1

У меня есть Ruby 1.8 и Ruby 1.9.1 в моей операционной системе Ubuntu. Когда я делаю gem install php_http_build_query , он устанавливает гем в Ruby 1.8. Как мне получить его, чтобы установить его на Ruby 1.9.1?

5 ответов5

1

Предисловие RVM (Ruby Version Manager) может быть лучшей долгосрочной альтернативой.

Мне кажется, я знаю ваш сценарий, потому что я был там раньше, когда использовал Ubuntu 12.04. Прежде всего, пройдя через эти обручи, я узнал, что лучший способ управления Ruby в системе - это использование RVM (Ruby Version Manager). Это не является частью официальной настройки менеджера пакетов Ubuntu/Debian, но если вы серьезно относитесь к разработке на Ruby, RVM - лучший способ перейти к установке и использовать несколько версий Ruby без конфликтов.

Но если вы просто используете Ruby 1.9.1 и просто хотите, чтобы это было признано версией Ruby по умолчанию, сделайте следующее.

Тем не менее, если вы находитесь на установке, где RVM не соответствует вашим потребностям, или вы предпочитаете использовать Ruby 1.9.1, читайте дальше ...

Итак, я собираюсь предположить, что вы установили Ruby 1.8 через репозиторий по умолчанию в Ubuntu 12.04, а затем - после этого - поняли, что вам нужен Ruby 1.9.1, поэтому вы установили его с помощью такой команды:

sudo aptitude install ruby1.9.1 ruby1.9.1-dev \
                      rubygems1.9.1 irb1.9.1 ri1.9.1 rdoc1.9.1 \
                      build-essential libopenssl-ruby1.9.1 \
                      libssl-dev zlib1g-dev

Ну, что получит рубин 1.9.1 установлен на вашей системе , но это не будет делать Руби 1.9.1 по умолчанию. Ключом к получению этого набора является использование update-alternatives и как объясняется на официальной странице руководства по update-alternatives :

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

Система альтернатив Debian направлена на решение этой проблемы. Общее имя в файловой системе совместно используется всеми файлами, обеспечивающими взаимозаменяемую функциональность. Система альтернатив и системный администратор вместе определяют, на какой фактический файл ссылается это общее имя.

Таким образом, в этом случае вам нужно выполнить три шага, чтобы Ruby 1.9.1 был правильно распознан как Ruby по умолчанию в системе.

Сначала запустите эту команду:

sudo update-alternatives --install /usr/bin/ruby ruby /usr/bin/ruby1.9.1 400 \
                         --slave   /usr/share/man/man1/ruby.1.gz ruby.1.gz \
                                   /usr/share/man/man1/ruby1.9.1.1.gz \
                         --slave   /usr/bin/ri ri /usr/bin/ri1.9.1 \
                         --slave   /usr/bin/irb irb /usr/bin/irb1.9.1 \
                         --slave   /usr/bin/rdoc rdoc /usr/bin/rdoc1.9.1

Затем снова запустите update-alternatives чтобы выбрать интерпретатор Ruby. Это также меняет символические ссылки для основных элементов Ruby:

sudo update-alternatives --config ruby

Сделайте свой выбор, а затем перейдите к update-alternatives для связанных Ruby GEM:

sudo update-alternatives --config gem

Наконец, подтвердите, что версия Ruby была обновлена следующим образом:

 ruby --version
0

Команда Gem связана с установленной версией Ruby.

Gem для Ruby 1.8 отличается от gem для ruby 1.9.

Итак, если ваш путь указывает на 1.8, команда gem установит гем в путь, соответствующий 1.8.

Решение: Быстрый и простой способ - изменить путь ruby в переменной окружения на 1.9 и выполнить установку gem.

Примечание: если вам нужен Ruby 1.8, вам нужно снова изменить путь. Также гем должен быть установлен для каждой версии Ruby отдельно вышеупомянутым способом.

0

Используйте абсолютный путь для установки конкретной версии gem на конкретную версию ruby. например /opt/sensu/embedded/bin/gem install vmstat .

ruby -v
ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-linux]

/opt/sensu/embedded/bin/ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]

Хотя моя версия по умолчанию - ruby 1.9.3p392, я могу установить гемы, специфичные для ruby 2.3.0p0.

0

Команды gem также поставляются с именами файлов для каждой версии. Взгляните на этот пакет, например: он содержит gem1.8 . Это означает, что вы можете выбрать нужную версию Ruby, независимо от того, какая версия Ruby для системы используется по умолчанию.

0

Не лучшее решение, но я спешу. Я зашел в папку /var/lib/gems/1.8/gems/ и скопировал содержимое в папку /var/lib/gems/1.9.1/gems . У меня не было папки с драгоценными камнями в 1.9.1, поэтому мне пришлось создавать ее вручную.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .