我开发了一个名为
safe-eth-ruby
的 Ruby gem,托管在 https://github.com/scionx-io/safe-eth-ruby/tree/bm-improve-test。虽然 gem 安装和加载没有任何错误,但在尝试直接访问使用 bundle exec irb
初始化的 IRB 中的特定模块时,我遇到了未初始化常量的问题。
例如:
irb(main):001> SafeEthRuby::Protocol
# Results in: uninitialized constant SafeEthRuby::Protocol (NameError)
但是,如果我在会话中手动需要 gem:
irb(main):004> require "safe_eth_ruby"
=> true
irb(main):005> SafeEthRuby::Protocol
=> SafeEthRuby::Protocol
手动要求后,一切都按预期进行。我想了解为什么 gem 的组件不会自动加载,以及如何配置它以确保它们可用,而无需每次在控制台中手动请求 gem。任何有关我的 gem 设置中可能缺少的内容或任何 Ruby 配置技巧的建议将不胜感激。
谢谢!
bundle exec irb
只是限制了您在 irb
会话中可以需要的宝石。它不会自动需要它们。
此命令执行该命令,使
中指定的所有 gem 可供 Ruby 程序使用。Gemfile
bundle console
会自动预加载“捆绑包”,但是:
此命令在 Bundler 2.1 中已弃用,并将在 3.0 中删除。使用
脚本,可以通过bin/console
生成。bundle gem <NAME>
默认脚本将如下所示
#!/usr/bin/env ruby
require "bundler/setup"
require "(your gem name here)"
# You can add fixtures and/or initialization code here to make experimenting
# with your gem easier. You can also use a different console, if you like.
# (If you use this, don't forget to add pry to your Gemfile!)
# require "pry"
# Pry.start
require "irb"
IRB.start(__FILE__)