我有一个自定义 gem,它是基于以下文件结构构建的:
something/common/searchcommon.gemspec
something/common/lib/searchcommon.rb
something/common/lib/commonfiles/scommon.rb
something/common/lib/commonfiles/token_stream.rb
something/common/lib/commonfiles/rbbi.rb
我的 gemspec 文件如下所示:
Gem::Specification.new do |s|
s.name = 'searchcommon'
s.version = '0.0.0'
s.date = '2012-04-28'
s.summary = "Search Common classes"
s.description = "Contains the common classes for search"
s.authors = ["some author"]
s.email = '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="433b033b6d202c2e" rel="noreferrer noopener nofollow">[email protected]</a>'
s.files = ["lib/searchcommon.rb","lib/commonfiles/scommon.rb","lib/commonfiles/rbbi.rb","lib/commonfiles/token_stream.rb"]
end
我能够毫无问题地构建和安装 gem。
它也适用于 irb:
>> require 'searchcommon'
=> true
但是,我有一个脚本需要这个 gem。该脚本包含 gem,如下所示:
#!/usr/local/bin/ruby
require 'rubygems'
require 'searchcommon'
我遇到的错误抛出以下堆栈跟踪:
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require': no such file to load -- scommon (LoadError)
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
from /usr/local/lib/ruby/gems/1.8/gems/searchcommon-0.0.0/lib/commonfiles/rbbi.rb:1
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
from /usr/local/lib/ruby/gems/1.8/gems/searchcommon-0.0.0/lib/searchcommon.rb:1
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:60:in `gem_original_require'
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:60:in `require'
from ./mapper.rb:3
错误行是 lib/commonfiles/searchcommon.rb 内的 "require 'commonfiles/rbbi'"
rbbi.rb 中出现此错误的行是 "require 'scommon'",它也存在于同一文件夹中。
当我能够通过 IRB 很好地使用 gem 时,我无法理解为什么这在脚本中不起作用。
我查看了this question on SO但它并没有完全解决同样的问题。
如有任何帮助,我们将不胜感激。
编辑:删除并替换了一些令人困惑的文件名。
最佳答案
您正在尝试加载scommon
,但该文件不在加载路径中。您可以使用“完整”路径:require 'commenfiles/scommon'
请注意,发生这种情况是因为文件的目录不是加载路径的一部分。我建议使用 require_relative
(它不使用加载路径): require_relative 'scommon'
关于ruby - 自定义 gem 在 irb 中工作,而不是在 ruby 脚本中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10714605/