Как я могу настроить 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
Другие вопросы по тегам