Кажется, это должно быть очевидно, но я не смог найти способ сделать это.
Моя основная проблема заключается в следующем: у меня установлен Ruby 1.8.7 в системе Scientific Linux 6 (из базового репозитория). Я пытаюсь установить некоторые драгоценные камни с помощью gem install
, но я сталкиваюсь с большим количеством драгоценных камней, для которых требуется Ruby 1.9 или выше.
Я могу указать отдельные версии гемов с помощью - v
, но установка gem install
, похоже, всегда выбирает самую высокую версию, доступную для любых зависимостей gem, поэтому даже если я ограничу версию для нужного gem, моя установка все равно завершится ошибкой из-за одного из зависимости потребуют Ruby 1.9. Деревья зависимостей для некоторых драгоценных камней, которые мне нужны, глубокие и широкие; Потребовалось бы много времени, чтобы вручную определить, какая версия каждой зависимости мне нужна, а затем вручную установить каждый требуемый гем, прежде чем я смогу перейти к нужной мне. (Это то, что должно решить управление зависимостями.)
Итак: есть ли способ сказать Ruby: «Установите gem foo , используя только драгоценные камни, которые будут работать с установленной в данный момент версией Ruby "? (Или даже «Установить версию xyz gem foo , используя только драгоценные камни, которые будут работать с установленной в данный момент версией Ruby»?)
Как я уже упоминал, случается использовать Ruby 1.8.7 на Scientific Linux 6, но я сомневаюсь, что какое-либо решение будет зависеть от этой платформы.
Не используйте системный рубин для своих собственных программ. Его цель - обслуживать системные приложения, написанные на Ruby, и он поддерживается только Red Hat для этих приложений.
Вместо этого используйте диспетчер версий Ruby, такой как rvm или rbenv, с помощью которого вы можете запустить текущую версию Ruby. и любые драгоценные камни, которые могут вам понадобиться для ваших собственных программ.
Если вам нужна поддержка поставщика, вы также можете использовать версию Ruby из Red Hat Software Collections.
Нет "простого" способа сделать это, но есть один практический вариант - использовать Bundler для управления вашими драгоценными камнями. Один комментарий к Github рекомендует создать гем со строгими требованиями к версии на выбранном вами Ruby, а затем позволить Bundler обрабатывать оставшиеся зависимости.
Я не уверен, что это будет работать во всех дел. Некоторые драгоценные камни, особенно более старые, могут не указывать необязательный параметр required_ruby_version , и поэтому могут разрешаться как устанавливаемые. Однако, когда вы сталкиваетесь с такими драгоценными камнями, вы можете вручную закрепить нужные вам версии в Gemfile, используя нотацию Bundler ограничение версии .