You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bundler环境下Ruby Gem safe-eth-ruby自动加载异常求助

问题分析与解决方案

可能的原因

  • Gemspec未配置自动加载入口:你的gem的.gemspec文件里没指定自动加载的主文件,导致Bundler在启动irb时不会自动require你的gem。
  • 主入口文件未加载子模块:即使gemspec配置了自动加载,如果lib/safe_eth_ruby.rb没有引入Protocol模块,控制台里还是找不到这个常量。

具体修复步骤

1. 修正Gemspec配置

打开safe-eth-ruby.gemspec,补充或确认以下关键配置:

Gem::Specification.new do |spec|
  # ... 其他已有配置 ...

  # 指定gem的自动加载入口文件
  spec.autorequire = "safe_eth_ruby"

  # 确保lib目录被设为require路径(默认就是["lib"],但要确认没被修改)
  spec.require_paths = ["lib"]

  # 确保包含lib下所有必要文件
  spec.files = Dir["lib/**/*", "README.md", "LICENSE.txt"]
end

2. 调整主入口文件的加载逻辑

编辑lib/safe_eth_ruby.rb,确保它加载了Protocol模块:

# lib/safe_eth_ruby.rb
require "safe_eth_ruby/protocol"

module SafeEthRuby
  # 你的gem核心逻辑
end

同时确认lib/safe_eth_ruby/protocol.rb的模块命名符合目录结构:

# lib/safe_eth_ruby/protocol.rb
module SafeEthRuby
  module Protocol
    # 模块具体实现
  end
end

3. 验证修复效果

重新构建并安装gem:

gem build safe-eth-ruby.gemspec
gem install ./safe-eth-ruby-<version>.gem

之后运行bundle exec irb,直接访问SafeEthRuby::Protocol就不会再触发未初始化常量的错误。

额外排查点

  • 如果使用Ruby 2.5+默认的Zeitwerk自动加载器,必须保证目录结构和模块命名严格对应:lib/safe_eth_ruby/protocol.rb对应SafeEthRuby::Protocol,否则自动加载会失效。
  • 检查Gemfile中是否正确引用了gem,比如本地开发时用gem "safe-eth-ruby", path: "./your-gem-path",并执行bundle install同步配置。

内容的提问来源于stack exchange,提问作者Bolo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 23:17:11