Ruby宝石列出了,但无法加载(宝石在用户目录中,不在Ruby目录中)

14

我想在一个支持Ruby和一些Ruby gems的Web主机上使一些gems工作,但不支持我需要使用的一些gems。

按照我在 这里 找到的说明,我将原始gem位置保留在我的gem路径中,并将我的路径添加到 ~/.gemrc 中的 /path/to/my/home/gems。

gemhome: /users/home/myuser/gems
gempath:
- /usr/local/lib/ruby/gems/1.8
- /users/home/mysuser/gems
我手动下载了一些 gem 包并使用 gem 命令的--local和--install-dir选项进行安装。然后我运行了 "gem list" 命令,实际上可以看到我安装在用户目录下的 gem 包以及普通系统路径中的原始 gem 包。
如果我启动 IRB 或者执行 ruby -e 命令,所有系统 gem 都能正常工作。然而,我无法加载我的用户目录中安装的 gem 包。
$ ruby -r rubygems -e "require 'nokogiri'"
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:in `require__': no such file to load -- nokogiri (LoadError)
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:in `require'
    from -e:1

我甚至尝试了老派的require_gem:

$ irb -r rubygems
irb(main):001:0> require_gem 'nokogiri'
Gem::LoadError: Could not find RubyGem nokogiri (> 0.0.0)

    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:204:in `report_activate_error'
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:141:in `activate'
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:37:in `require_gem_with_options'
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:31:in `require_gem'
    from (irb):1

从我的“宝石清单”中,我可以看到:

nokogiri (1.3.3)
Nokogiri is an HTML, XML, SAX, and Reader parser
我在所有用户目录安装 gem 时遇到了相同的问题。我错过了什么吗?
编辑:这不是一个 Rails 应用程序。这是一个命令行应用程序。该程序将由我的用户帐户执行,就像上面显示的测试一样。
编辑:根据 Rafe 的建议,我查看了 IRB 中的 Gem.path。它仅列出系统 gem 路径 /usr/local/lib/ruby/gems/1.8,并没有列出我的用户目录路径。

当您在irb中键入表达式"Gem.path"时,会显示什么? - Rafe
1
啊,有趣……请查看上面的编辑。 - Matt
5个回答

39

我遇到了同样的问题,我通过在 Ruby 文件顶部添加以下内容来解决它

require 'rubygems'

希望能对你有所帮助。


花了一个小时找出要添加这个的“ruby文件”,因为我有一个带有“-rails”的gem。最终将其添加到rails/rails.rb文件中,神奇的是,它起作用了。 - Cosmin Atanasiu

5
我的当前工作解决方案(但不是理想的)是执行一个
Gem.path.push "/path/to/my/gems"

我说不是很理想,因为我希望.gemrc文件可以自动地为我的所有用户环境下的ruby执行提供相应的内容。不确定为什么它不起作用,但至少上述内容可行。


0
我遇到过类似的问题,但是这里接受的答案显然不是解决办法(至少对我来说不是)。如果可能的话,你应该避免在 gem 文件中这样做:
require 'rubygems'

为什么不问一下呢?看看这篇文章吧: http://tomayko.com/writings/require-rubygems-antipattern

无论如何,在调用irb时,只需要求'require 'rubygems''即可:

> irb -r 'rubygems'

你应该得到相同的结果。不确定为什么对于这个问题,这种方法不起作用。


0

我一直在努力解决这个问题,并确定在某些情况下似乎没有加载.gemrc文件。例如,在安装gem时会受到尊重,但不一定在运行irb或script/console时。

我还发现本地目录的路径需要与我在许多网站上看到的描述不同。以下是适用于我的内容:

---
gem: --no-ri --no-rdoc
gemhome: /home/.gem/ruby/1.8
gempath: 
- /home/.gem/ruby/1.8
- /usr/lib/ruby/gems/1.8

0

我想问题在于Web应用程序没有使用与您的用户帐户相同的配置,可能是因为它正在以另一个用户身份运行。一种选择是将gem加载到应用程序中的vendor/gems中。

您可以在本地计算机上使用rake gems:unpack来执行此操作,将这些gems检入版本控制,然后在服务器上部署它们。对我来说,这是最可靠的方法。或者,您可以更改应用程序的配置,以在您的主目录中查找gems。


这实际上根本不是一个Web应用程序 - 没有Rails等。我需要命令行应用程序的gem库。 - Matt
一个命令行应用程序需要在我的用户正常环境下执行 - 因此上面的示例显示从命令行执行时出现的错误正是问题所在。 - Matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接