如何配置gem才能使用系统宝石?

时间:2010-09-10 08:27:20

标签: ruby rubygems gem load-path

我想将gem配置为仅使用系统gem - 而不是$HOME/.gem中的那些。这是因为我正在编写一个访问Gem.path的脚本,我不希望它返回主目录中的gems路径。

我很确定我没有在GEM_HOME.bashrc等中明确设置.bash_login或类似内容。

Gem.path首先返回我的homedir宝石:

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

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

如果我无法配置,我可以使用regexp hackery返回宝石的系统路径吗?

更多详情:

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

所以,下面的答案似乎是获得正确行为的唯一一致方法,即使您假设:gempath:可行,并且将是一种更好的方式来包装您的配置。

但是,在我的~/.gemrc中设置Rakefile是在Rails应用程序中我的{{1}}脚本的上下文中工作的,可能是因为明确加载了yaml。

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

修改! :P

1 个答案:

答案 0 :(得分:4)

在此覆盖:

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