Ruby gem列出,但不会加载(用户目录中的gem,而不是ruby目录)

时间:2009-08-11 13:58:30

标签: ruby rubygems

我正在尝试让一些宝石在支持ruby和一些红宝石的web主机上工作,但不是我需要使用的一些宝石。

按照我发现here的说明,我将原始宝石位置保存在我的宝石路径中,并将我自己的/ path /添加到/ my / home / gems到〜/ .gemrc

gemhome: /users/home/myuser/gems
gempath:
- /usr/local/lib/ruby/gems/1.8
- /users/home/mysuser/gems

我手动下载了一些gem,并使用gem命令的--local和--install-dir选项进行了安装。然后我做了一个“宝石列表”,实际上可以看到我在我的用户目录中安装的宝石,以及正常系统路径中的原始宝石。

如果我踢IRB或做ruby -e,所有系统宝石都可以正常工作。但是,我无法在我的用户目录中安装gems:

$ 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

我对所有用户目录安装gems都有同样的问题。我在这里缺少什么?

编辑:这是一个rails应用程序。这适用于命令行应用程序。该程序将由我的用户帐户执行,就像上面显示的测试一样。

编辑:根据Rafe的建议,我从IRB看了Gem.path。 列出了系统gem路径/usr/local/lib/ruby/gems/1.8,而不是我的用户目录路径。

5 个答案:

答案 0 :(得分:38)

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

require 'rubygems'

希望有所帮助

答案 1 :(得分:5)

我当前的工作(但不太理想)解决方案是做一个

Gem.path.push "/path/to/my/gems"

我说不太理想,因为这是我期望.gemrc的内容自动为我做的,对于我的用户环境下的所有ruby执行。不知道为什么没有 - 但上述至少有效。

答案 2 :(得分:0)

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

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

答案 3 :(得分: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

答案 4 :(得分:0)

我遇到了类似的问题,但这里接受的答案显然不是要走的路(至少不适合我)。如果可能,您不应该在gem文件中执行此操作:

require 'rubygems'

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

在任何情况下,只要在调用irb:

时要求'rubygems'就可以了
> irb -r 'rubygems'

你应该得到相同的结果。不知道为什么这个问题,这个方法不起作用。

相关问题