2010-09-10 60 views
4

我想配置寶石只使用系統寶石 - 從來沒有在$HOME/.gem。這是因爲我正在編寫一個腳本,它將訪問Gem.path,我不希望它返回到我的主目錄中的寶石路徑。我該如何配置gem才能使用系統寶石?

我敢肯定我沒有明確設置GEM_HOME或類似的東西在我的.bashrc.bash_login

Gem.path返回我的主目錄寶石第一:

irb 
> Gem.path 
=> ["/home/nfm/.gem/ruby/1.9.1", "/usr/local/lib/ruby/gems/1.9.1"] 

我能阻止這種從發生?它在哪裏配置?或者它只是默認首先查看homedir?

如果我不能配置這個,我可以用regexp hackery返回gems的系統路徑嗎?

更多細節:

which ruby 
/usr/local/bin/ruby 
ruby --version 
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux] 

gem env 
    - RUBYGEMS VERSION: 1.3.7 
    - RUBY VERSION: 1.9.2 (2010-08-18 patchlevel 0) [x86_64-linux] 
    - INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/1.9.1 
    - RUBY EXECUTABLE: /usr/local/bin/ruby 
    - EXECUTABLE DIRECTORY: /usr/local/bin 
    - RUBYGEMS PLATFORMS: 
    - ruby 
    - x86_64-linux 
    - GEM PATHS: 
    - /usr/local/lib/ruby/gems/1.9.1 
    - /home/nfm/.gem/ruby/1.9.1 
    - GEM CONFIGURATION: 
    - :update_sources => true 
    - :verbose => true 
    - :benchmark => false 
    - :backtrace => false 
    - :bulk_threshold => 1000 
    - REMOTE SOURCES: 
    - http://rubygems.org/ 

更新:

因此很明顯,這可以在~/.gemrc配置:

# Note the use of a symbol before the colon - the string version doesn't work! 
:gempath: 
    - /usr/local/lib/ruby/gems/1.9.1 

然而,這似乎並沒有生效,如果你開火了irb。這事做的事實,該配置文件是YAML,顯然yamlirb啓動(不知道在這一個!)不加載:

$ irb 
> Gem.path 
=> ["/home/nfm/.gem/ruby/1.9.1", "/usr/local/lib/ruby/gems/1.9.1"] 
> Gem.configuration.path 
=> ["/usr/local/lib/ruby/gems/1.9.1"] 
# Ready for a WTF moment? 
> Gem.path 
=> ["/usr/local/lib/ruby/gems/1.9.1"] 

,則回答下面似乎是唯一的一致的方式來獲得正確的行爲,即使你認爲~/.gemrc可以工作,並且將是一種更好的方式來包裝你的配置。

但是,設置在我~/.gemrc:gempath:曾在劇本中我Rakefile是上下文的Rails應用程序,大概是因爲YAML被明確載入。

不確定到底是怎麼回事,但這個解釋似乎與我在這裏看到的一致。

Mod up! :P

回答

4

這裏覆蓋它:

#in ~/.bashrc 
export GEM_PATH=/usr/local/lib/ruby/gems/1.9.1 
+0

搞混了一段時間後,這個似乎是得到正確的行爲的唯一途徑。查看更新的問題,解釋爲什麼'.gemrc'中的配置對我無效。 – nfm 2010-09-12 23:44:16

相關問題