Я хочу настроить gem так, чтобы он использовал только системные гемы, а не те, что в $HOME/.gem
. Это потому, что я пишу скрипт, который будет обращаться к Gem.path
, и я не хочу, чтобы он возвращал путь к гемам в моем домашнем каталоге.
Я почти уверен, что не установил 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, и, очевидно, 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
будет работать и будет более приятным способом завершить настройку.
Однако установка :gempath:
в моем ~/.gemrc
работала в контексте сценария, находящегося в моем Rakefile
в приложении Rails, возможно потому, что yaml явно загружен.
Не уверен, что именно происходит с yaml, но это объяснение, похоже, согласуется с тем, что я вижу здесь.
Мод up! : P