【发布时间】:2010-09-10 08:27:20
【问题描述】:
我想将 gem 配置为仅使用系统 gem - 从不使用 $HOME/.gem 中的那些。这是因为我正在编写一个将访问 Gem.path 的脚本,并且我不希望它返回我主目录中 gems 的路径。
我很确定我没有在我的.bashrc、.bash_login 等中明确设置GEM_HOME 或类似的东西。
但是 Gem.path 首先返回我的 homedir gems:
irb
> Gem.path
=> ["/home/nfm/.gem/ruby/1.9.1", "/usr/local/lib/ruby/gems/1.9.1"]
我可以阻止这种情况发生吗?它在哪里配置?还是只是默认先查看homedir?
如果我不能配置这个,我可以用正则表达式hackery返回gem的系统路径吗?
更多细节:
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: 在 Rails 应用程序中的 Rakefile 中的脚本的上下文中起作用,大概是因为 yaml 已显式加载。
不确定 yaml 到底发生了什么,但这种解释似乎与我在这里看到的一致。
修改! :P
【问题讨论】:
标签: ruby rubygems gem load-path