如何将 gem 配置为仅使用系统 gem?

nfm*_*nfm 5 ruby rubygems load-path

我想将 gem 配置为仅使用系统 gem - 而不是$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"]
Run Code Online (Sandbox Code Playgroud)

我可以阻止这种情况发生吗?在哪里配置的?或者只是默认首先查看 homedir ?

如果我无法配置此功能,我可以使用 regexp 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/
Run Code Online (Sandbox Code Playgroud)

更新:

显然这可以在以下位置配置~/.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
Run Code Online (Sandbox Code Playgroud)

然而,如果你启动的话,这似乎不会生效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"]
Run Code Online (Sandbox Code Playgroud)

因此,下面的答案似乎是获得正确行为的唯一一致的方法,即使您认为这~/.gemrc可行并且是包装配置的更好方法。

但是,在 Rails 应用程序中的脚本上下文中设置:gempath:my工作,大概是因为 yaml 已显式加载。~/.gemrcRakefile

不确定 yaml 到底发生了什么,但这个解释似乎与我在这里看到的一致。

改装起来!:P

sle*_*led 4

在这里覆盖它:

#in ~/.bashrc
export GEM_PATH=/usr/local/lib/ruby/gems/1.9.1
Run Code Online (Sandbox Code Playgroud)