我想将gem配置为只使用系统gems-而不是
$HOME/.gem
. 这是因为我正在编写一个脚本
Gem.path
我不希望它返回到我的主目录中gems的路径。
我很确定我还没有明确地设定
GEM_HOME
或者我的
.bashrc
,
.bash_login
等。
但是
GEM.PATH
首先返回我的homedir gems:
irb
> Gem.path
=> ["/home/nfm/.gem/ruby/1.9.1", "/usr/local/lib/ruby/gems/1.9.1"]
我能阻止这种事发生吗?它在哪里配置?或者只是默认先查找homedir?
如果我不能配置这个,我可以返回系统路径为gems与regexp hackry?
更多细节:
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
会起作用的,是一个更好的方法来包装你的配置。
但是,设置
:gempath:
在我的
~/GEMRC
在脚本位于我的
Rakefile
在Rails应用程序中,可能是因为显式加载了yaml。
不知道Yaml到底发生了什么,但这个解释似乎与我在这里看到的一致。
振作起来!P