ruby - 自定义 gem 在 irb 中工作,而不是在 ruby​​ 脚本中工作

标签 ruby rubygems irb

我有一个自定义 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/

相关文章:

ruby-on-rails - 我可以删除 rvm gemset 中的一些 nokogiri 和 capybara-webkit 文件夹吗?

ruby-on-rails - Elastic Beanstalk:找不到带有可执行包的 gem bundler (>= 0.a) (Gem::GemNotFoundException)

ruby - 断点和irb的结合(REPL)

ruby-on-rails - Rails 控制台限制文本输出。我怎样才能看到这一切?

ruby-on-rails - 验证网址 |前置 http ://

ruby-on-rails - 为什么我不能在 Rails 的表格中创建一个数组作为列?

ruby - 使用 bundler 仅更新一个 gem

Ruby:从陷阱上下文运行 irb?

ruby - 将正则表达式插入另一个正则表达式

ruby-on-rails-4 - spree guest 电子邮件已保存