无法加载自定义gem

时间:2013-11-22 19:02:50

标签: ruby rubygems

我有一个真正的新手问题。我写了一个非常小的(单文件)库,我想在gem中发布它,以便我可以模块化地在其他项目中使用它。我使用了以下gemspec:

Gem::Specification.new do |s|
  s.name        = 'symbolize-array'
  s.version     = '1.0.0'
  s.date        = '2013-11-22'
  s.summary     = "Symbolizes strings in arrays"
  s.description = ""
  s.files       = ["lib/array.rb"]
  s.homepage    =
    'https://github.com/renra/symbolize-array-ruby'
  s.license       = 'MIT'
end

我建造了宝石。精细。我发布了宝石。精细。我从rubygems安装gem。精细。但是当我运行irb并且需要'symbolize-array'时,我得到:

LoadError: cannot load such file -- symbolize-array
from /home/renra/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require'
from /home/renra/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require'
from (irb):4
from /home/renra/.rvm/rubies/ruby-2.0.0-p247/bin/irb:13:in `<main>'

正如您从回溯中看到的,我使用rvm。当我运行“宝石环境”并进入宝石路径时,我可以看到我的宝石安装就像其他宝石一样。我可以要求其他人,但我不能要求我的宝石。所以我想这不是加载路径的问题(我已经看过像这样回答的问题),但也许是我构建gem的方式。感谢你的想法。

1 个答案:

答案 0 :(得分:3)

您需要require "array"来加载您的库,由于与其他宝石的名称冲突,这可能根本不起作用。安装gem时,它只是将其库文件夹添加到搜索路径,require按名称查找文件(没有.rb),它们不引用gem名称。

查看naming conventions for gem components以及链接http://guides.rubygems.org/name-your-gem/

我怀疑您应该将文件命名为"lib/symbolize_array.rb",并且宝石名称可能应该是"symbolize_array" - 理想情况下,它也会在这种情况下实现类或模块SymbolizeArray,但这样做会更少重要的。

相关问题