我想配置寶石只使用系統寶石 - 從來沒有在$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,顯然yaml
時irb
啓動(不知道在這一個!)不加載:
$ 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
搞混了一段時間後,這個似乎是得到正確的行爲的唯一途徑。查看更新的問題,解釋爲什麼'.gemrc'中的配置對我無效。 – nfm 2010-09-12 23:44:16