ruby - 如何将 gem 配置为只使用系统 gem?

标签 ruby rubygems gem load-path

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

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

但是 Gem.path 首先返回我的 homedir gem :

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 的事实有关,显然 irb 启动时未加载 yaml(不确定这个!):

$ 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 到底发生了什么,但这个解释似乎与我在这里看到的一致。

retrofit ! :P

最佳答案

在这里覆盖它:

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

关于ruby - 如何将 gem 配置为只使用系统 gem?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3683160/

相关文章:

javascript - Rails 6 与佩吉

ruby-on-rails - 由于 ruby​​gems (LoadError),无法在 Rails 应用程序中运行测试

ruby - Sinatra 找不到 View 目录

javascript - 创建 Ruby Gem 以将 HTML/JavaScript 插入主应用程序

ruby - 我应该把我的 gem 放在我开发的 gem 中的什么地方?

javascript - 如何使 rails 与 vue.js 一起工作?

ruby-on-rails - 如何用 Sunspot 突出显示找到的单词?

ruby-on-rails - 在 Rails 中使用 Ajax 更新 Div 而无需重新加载页面

ruby-on-rails - 在 RSpec 中为 Gem 编写测试

ruby - 从线程循环中脱离出来