2010-09-10 62 views
4

我想配置宝石只使用系统宝石 - 从来没有在$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,显然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可以工作,并且将是一种更好的方式来包装你的配置。

但是,设置在我~/.gemrc:gempath:曾在剧本中我Rakefile是上下文的Rails应用程序,大概是因为YAML被明确载入。

不确定到底是怎么回事,但这个解释似乎与我在这里看到的一致。

Mod up! :P

回答

4

这里覆盖它:

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

搞混了一段时间后,这个似乎是得到正确的行为的唯一途径。查看更新的问题,解释为什么'.gemrc'中的配置对我无效。 – nfm 2010-09-12 23:44:16

相关问题