Одновременное использование двух версий руби на одной системе
Введение
Как молодой язык с неутверждённой спецификацией, руби переживает подростковую болезнь, через которую большинство известных языков уже прошли. Есть новая более быстрая версия, на которую уже стоит переходить, но уже много написано на предыдущей, и так боязно всё ломать...
Поэтому необходимо найти удобный для себя способ (а лучше несколько) чтобы начать использовать руби 1.9.
Постановка задачи
Сейчас практически панацеей для использования более одной версии руби является rvm. Очень удобно в использовании, полностью прозрачно, и позволяет иметь разные версии руби в разных окнах терминала.
Но недавно мне понадобилось скомпилировать wxRuby под свою систему (kubuntu 9.10 amd64), и rvm не справилась с этой задачей. По какой-то причине в момент компилляции были недоступны заголовки руби. Поэтому я решил поставить две версии руби более явно: одна системная (1.8.7) и одна в папке /opt (1.9.1). Причем все команды, связанные с руби 1.9 будут вызываться с суффиксом: ruby1.9, irb1.9, gem1.9, rake1.9.
Возможно, подобных инструкций уже полно, но мне будет удобнее, если я точно буду знать, где находится одна из них :) При всём этом, конечно, rvm продолжает работать. Мы никак ему не помешаем.
Решение
Сначала нужно поставить новый readline. Без него, когда мы будем использовать irb1.9, мы не сможем наслаждаться доступом к истории с помощью стрелок вверх-вниз и перемещаться по введенному тексту с помощью стрелок в стороны.
sudo apt-get install libreadline5-devТеперь хорошо бы вписать пути в наше окружение. В конце ~/.bashrc добавим:
export PATH=$PATH:/opt/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/libТеперь следует скачать и разархивировать последнюю версию руби. Зайдя в папку скомпилировать и установить:
./configure --prefix=/opt --enable-shared --program-suffix=1.9
make
sudo make installТеперь у нас есть две отдельных установки руби и сопутствующих инструментов. Единственное, что обе установки используют общие конфигурационные файлы: ~/.gemrc, ~/.irbrc и т.п., что вполне удобно. Также для обеих систем общей директорией джемов будет ~/.gem, куда будут устанавливаться библиотеки, запусти мы их установку без sudo (в случае с sudo, конечно же, директории установки различаются).
Так же я не нашёл быстрого способа добавить /opt/bin в переменную PATH для sudo. Поэтому в таких случаях пока использую полный путь. Например, первая команда, которую следует выполнить:
sudo /opt/bin/gem1.9 update --systemПотому что в пакете с руби идёт версия 1.3.1, а настоящие пацаны уже во всю используют 1.3.5.
Материалы для самостоятельного изучения
Комментарии:
Sergey Kruk 15 декабря 2009, 18:22
В этом случае вы ограничены теми версиями, которые распространяется с aptitude и только.
A.I. 15 декабря 2009, 19:07
Ну так что мешает собрать пакет и выложить, например, в Ubuntu on Rails PPA? Каждый раз делать велосипед — неправильно. А компилить файлы — моветон, можно повредить систему, да и вообще, какой-то Windows-way — неконтролируемо кидать файлы в системные папки.
Sergey Kruk 15 декабря 2009, 20:04
Для разработчика компилировать свежие, с пылу, с жару из trunk'a версии разных библиотек -- это вполне в порядке вещей. Если нужно убедиться, что выход новой версии библиотеки, от которой что-то зависит, ничего не сломает, до того как она попадёт в aptitude. Так же вполне, я считаю, похвально поддерживать несколько старых ключевых версий разных пакетов. Для этого и существует папка /opt, куда и следует собирать из исходников.
Sergey Avseyev 20 декабря 2009, 19:00
А еще можно настроить механизм альтернатив который широко используется в Ubuntu и Debian.
тогда переключение на другую версию можно будет делать с помощью
$ sudo update-alternatives --config ruby
Вот тут пример конфигурации http://avsej.net/2009/12/01/update-alternatives-for-ruby-in-ubuntu
И.Ш. 26 февраля 2010, 13:46
Дык совсем недавно в Райан ведал в своем касте 200м о RVM (ruby version manager) устанавливать можно хоть сколько угодно руби версий, на них устанавливать удобные джемы, а переключением между ними одной командой.
И.Ш. 26 февраля 2010, 13:48
Извиняюсь, что не приложил сразу: http://rvm.beginrescueend.com/
Посмотрел дату поста и включил голову)
Sergey Kruk 27 февраля 2010, 10:20
Написал эту статью после того, как не смог скомпилировать wxruby2 из исходников под rvm ruby1.9. Может, конечно, и через rvm как-то можно было.
A.I. 15 декабря 2009, 17:42
А почему просто не поставить пакеты ruby1.8 и ruby1.9.1 (если это Ubuntu).