Разобрать несколько версий rubygems

На моем компьютере установлено несколько версий rubygems, когда я список драгоценных камней, я вижу все свои драгоценные камни, но когда я запускаю скрипты, я получаю сообщения об ошибках, например

Missing these required gems:
  SystemTimer 

Могу ли я воспользоваться какой-либо методологией для удаления всех версий rubygems, кроме одной? В идеале я хотел бы иметь доступ ко всем драгоценным камням, которые отображаются в списке драгоценных камней в моих программах.

Из среды Gem - ИСПОЛНИТЕЛЬНЫЙ РУБИН: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby

Тем не менее, если я бегу:

$ /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby script/mailer_daemon_fetcher start production
no such file to load -- SystemTimer
/Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
/Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `require'
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:156:in `require'
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:521:in `new_constants_in'
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:156:in `require'
/Library/Ruby/Gems/1.8/gems/rails-2.3.4/lib/rails/gem_dependency.rb:208:in `load'
/Library/Ruby/Gems/1.8/gems/rails-2.3.4/lib/initializer.rb:307:in `load_gems'
/Library/Ruby/Gems/1.8/gems/rails-2.3.4/lib/initializer.rb:307:in `each'
/Library/Ruby/Gems/1.8/gems/rails-2.3.4/lib/initializer.rb:307:in `load_gems'
/Library/Ruby/Gems/1.8/gems/rails-2.3.4/lib/initializer.rb:164:in `process'
/Library/Ruby/Gems/1.8/gems/rails-2.3.4/lib/initializer.rb:113:in `send'
/Library/Ruby/Gems/1.8/gems/rails-2.3.4/lib/initializer.rb:113:in `run'
./script/../config/environment.rb:13
script/mailer_daemon_fetcher:5:in `require'
script/mailer_daemon_fetcher:5
no such file to load -- SystemTimer
/Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
/Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `require'
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:156:in `require'
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:521:in `new_constants_in'
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:156:in `require'
/Library/Ruby/Gems/1.8/gems/rails-2.3.4/lib/rails/gem_dependency.rb:208:in `load'
/Library/Ruby/Gems/1.8/gems/rails-2.3.4/lib/initializer.rb:307:in `load_gems'
/Library/Ruby/Gems/1.8/gems/rails-2.3.4/lib/initializer.rb:307:in `each'
/Library/Ruby/Gems/1.8/gems/rails-2.3.4/lib/initializer.rb:307:in `load_gems'
/Library/Ruby/Gems/1.8/gems/rails-2.3.4/lib/initializer.rb:169:in `process'
/Library/Ruby/Gems/1.8/gems/rails-2.3.4/lib/initializer.rb:113:in `send'
/Library/Ruby/Gems/1.8/gems/rails-2.3.4/lib/initializer.rb:113:in `run'
./script/../config/environment.rb:13
script/mailer_daemon_fetcher:5:in `require'
script/mailer_daemon_fetcher:5
Missing these required gems:
  SystemTimer  

You're running:
  ruby 1.8.7.72 at /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
  rubygems 1.3.5 at /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8, /Library/Ruby/Gems/1.8

обратите внимание, что я вручную вызываю ruby ​​** / System / Library / Frameworks / Ruby.framework / Versions / 1.8 / usr / bin / ruby ​​**, это тот же файл, что и мой / usr / bin / ruby имеет символическую ссылку, а мой GEM_PATH имеет значение /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8

полный вывод среды gem доступен здесь: http://pastie.org/661104


person Schneems    schedule 19.10.2009    source источник


Ответы (4)


У меня такое чувство, что вы могли использовать другую версию рубина, чем рубиновые драгоценные камни. Либо это, либо Рубин не знает, где искать ваши драгоценные камни.

См. руководство по установке гемов, чтобы убедиться, что ваша среда настроена для использования гемов.

Если после выполнения инструкций у вас все еще возникают проблемы, убедитесь, что у вас не установлено несколько версий ruby. Если доступно несколько версий Ruby, убедитесь, что ваши скрипты вызывают ту же версию Ruby, что и gem. Это делается путем сравнения gem environment листинга для RUBY_EXECUTABLE со строкой shebang вашего скрипта. Дважды проверьте наличие символических ссылок, потому что большинство установок ruby ​​на основе дистрибутивов будут символическими ссылками /usr/bin/ruby на /usr/bin/ruby1.8

Вы также должны убедиться, что ваши драгоценные камни были установлены тем же пользователем, который запускает скрипт.

Если вы запустили установку gem без привилегий root, новые драгоценные камни будут установлены в ваш домашний каталог. Если вы запускаете сценарий, который зависит от этих драгоценных камней от имени другого пользователя. Эти установленные драгоценные камни не будут найдены. Однако нет проблем, если ваши драгоценные камни установлены от имени пользователя root и другой пользователь запускает скрипты, требующие этих драгоценных камней.

У меня возникла эта проблема при переходе с Ruby на Ruby Enterprise Edition. Я обнаружил, что мне пришлось снова установить все необходимые драгоценные камни, используя экземпляр драгоценного камня REE.

person EmFi    schedule 19.10.2009
comment
как сделать так, чтобы их скрипты вызывали ту же версию Ruby, что и мои драгоценные камни? - person Schneems; 19.10.2009
comment
Обновленный ответ с новым возможным решением. - person EmFi; 19.10.2009
comment
обновлен с дополнительной информацией, похоже, что все версии выстроились в линию - person Schneems; 20.10.2009
comment
Вы проверяли пользовательскую ситуацию. Если вы запустили установку gem от имени snomaninthesun, драгоценные камни не будут найдены для задания cron, выполняемого под root. Также что хранится в переменной Gem.path при вызове из ваших скриптов? - person EmFi; 20.10.2009

Я думаю, проблема в том, что SystemTimer загружается немного странно, поэтому вам нужно больше настроек в environment.rb

Кажется, «проблема» в том, что гем называется «SystemTimer», но вам нужно загрузить «system_timer». Для этого с помощью environment.rb вы должны использовать:

  config.gem 'SystemTimer', :lib => 'system_timer'

Похоже, это решило для меня ту же проблему.

person byronsalty    schedule 23.11.2009

gem cleanup

он удалит все старые версии гемов

у вас проблемы с окружением - запуск gem приводит к другим, чем когда вы используете rubygems в скрипте

посмотрите на вывод (особенно GEM PATHS)

gem environment

также вы можете сравнить результаты ruby -e 'p ENV', выполненного в оболочке, и p ENV выполнения где-то в вашем коде - ищите различия в материалах, связанных с драгоценными камнями

person tig    schedule 19.10.2009
comment
Очистка gem задохнулась на нескольких установках и сказала, что это зависимости, могу ли я просто удалить папки вручную? Я разместил свои ПУТИ ДРАГОЦЕННОСТИ вверху после того, как запустил очистку драгоценных камней. Я все еще не могу использовать системный таймер внутри скриптов - person Schneems; 19.10.2009
comment
вы можете удалить папку с извлеченным гемом, но обратите внимание, что есть также кешированные версии гема, его спецификация, папка с документацией, а также некоторые гемы устанавливают двоичные файлы - person tig; 20.10.2009

Используя RVM https://rvm.io/, вы можете иметь разные версии Ruby (Enterprise Edition, MRI, Rubinius и т. Д. ) и различные наборы драгоценных камней.

Проверьте это, это действительно полезно!

person David    schedule 15.02.2011