2009-08-11 100 views
14

我想獲得一些支持紅寶石和一些紅寶石寶石,但不是我需要的一些網絡主機上的寶石使用。紅寶石列出,但不會加載(用戶目錄中的寶石,而不是紅寶石目錄)

接着我發現here的指示,我一直在我的寶石路原寶石的位置,並加入我自己的/路徑/要/我的/ home /寶石到〜/ .gemrc

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

我手動下載了一些寶石,並使用gem命令的--local和--install-dir選項進行安裝。然後我做了一個「寶石列表」,並且實際上可以看到我安裝在我的用戶目錄中的寶石,以及正常系統路徑中的原始寶石。

如果我踢IRB或做紅寶石-e,所有的系統寶石工作正常。但是,我不能讓我的用戶目錄中安裝了寶石裝:

$ 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 

我對所有的用戶目錄安裝寶石都有同樣的問題。我在這裏錯過了什麼?

編輯:這是而不是一個rails應用程序。這是一個命令行應用程序。該程序將由我的用戶帳戶執行,就像上面顯示的測試一樣。

編輯:根據Rafe的建議,我查看了IRB的Gem.path。它只有列出系統寶石路徑,/usr/local/lib/ruby/gems/1.8,而不是我的用戶目錄路徑。

+0

當你在irb中輸入表達式「Gem.path」時會顯示什麼? – Rafe 2009-08-12 14:16:35

+1

啊,有趣...看到上面編輯 – Matt 2009-08-12 14:29:58

回答

38

我有同樣的問題,我固定它通過增加在紅寶石的頂部以下文件

require 'rubygems' 

希望幫助

+0

花了一個小時搞清楚哪個是'ruby文件'來添加這個,因爲我有'-rails'的寶石。最後將其添加到rails/rails.rb文件中,並且神奇地工作 – 2013-07-02 22:28:02

0

我想象的問題是Web應用程序沒有使用與您的用戶帳戶相同的配置,可能是因爲它作爲另一個用戶運行。一種選擇是在您的應用程序中將寶石加載到vendor/gems

您可以使用rake gems:unpack來做到您的本地機器,將這些寶石檢入版本控制,然後將它們部署到服務器上。就我而言,這是最可靠的方法。或者,您可以更改應用程序的配置以在主目錄中查找寶石。

+0

這實際上不是一個網絡應用程序 - 沒有軌道等我需要一個命令行應用程序的寶石庫。 – Matt 2009-08-11 16:11:57

+0

命令應用程序也會在我的用戶正常環境下執行 - 所以上面顯示命令行執行錯誤的示例正是問題所在。 – Matt 2009-08-11 16:14:57

+0

我想知道它是否是一個Rails應用程序。 – Rafe 2009-08-12 14:14:18

5

我目前的工作(但不夠理想)的解決方案是做一個

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

我說不太理想,因爲這是我期望的.gemrc的內容爲我自動完成,對所有ruby在我的用戶環境下執行。不知道爲什麼它不 - 但上述至少起作用。

0

我一直在冥思苦想這一點,並已經確定。 gemrc在所有情況下都不會被加載。例如,它在安裝gem時很榮幸,但在運行irb或腳本/控制檯時並不一定。

我還發現,本地目錄的路徑需要與我在許多網站上看到的不同。對我來說,以下工作:

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

我也曾有過類似的問題,但在這裏接受的答案是顯然沒有去(至少這不是對我來說)的方式。如果可能的話,你不應該在寶石文件中這樣做:

require 'rubygems' 

你爲什麼不問?看看這篇文章: http://tomayko.com/writings/require-rubygems-antipattern

在任何情況下,你應該調用IRB時只需要「RubyGems的」罰款:

> irb -r 'rubygems' 

,你應該有同樣的結果。不知道爲什麼這個問題,這種方法不起作用。