Как я могу настроить gem только для использования системных гемов?
Я хочу настроить 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, но это объяснение кажется совместимым с тем, что я вижу здесь.
Мод вверх!:П
1 ответ
Переписать это здесь:
#in ~/.bashrc
export GEM_PATH=/usr/local/lib/ruby/gems/1.9.1