使用 Bundler 自动加载 Gem

问题描述 投票:0回答:1

我开发了一个名为

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 配置技巧的建议将不胜感激。

谢谢!

ruby bundler
1个回答
0
投票

bundle exec irb
只是限制了您在
irb
会话中可以需要的宝石。它不会自动需要它们。

此命令执行该命令,使

Gemfile
中指定的所有 gem 可供 Ruby 程序使用。

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__)
© www.soinside.com 2019 - 2024. All rights reserved.