Как я могу настроить gem только для использования системных гемов? - PullRequest
4 голосов
/ 10 сентября 2010

Я хочу настроить 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

1 Ответ

4 голосов
/ 10 сентября 2010

перезаписать это здесь:

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