Ruby в Debian

11 July 2011 #ruby #debian #rvm

Решил поэкспериментировать с Ruby 1.9.2, установил через aptitude и столкнулся с тем, что команда ruby все так же указывала на запуск руби версии 1.8.7.

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

RVM

На помощь приходит RVM (Ruby Version Manager). Перед его установкой необходимо удалить ruby из системы.

$ sudo aptitude purge ruby ruby1.8 rubygems
$ sudo aptitude install bash curl git-core
$ sudo aptitude install build-essential zlib1g-dev libssl-dev libreadline5-dev libxml2-dev libsqlite3-dev

Устанавливаем сам RVM:

$ bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)

Установка осуществляется в домашнюю папку пользователя, поэтому запуск, установка будет осуществляться от имени текущего пользователя.

Чуть раньше по завершении данной команды требовалось добавлять определенную строку в файл ~/.bashrc, теперь этого делать не нужно, она прописывается автоматически.

Вполне вероятно, что при использовании bash при запуске оболочки будут появляться предупреждения о наличии ошибок в файле ~/.rvm/scripts/cd. Можно, конечно на них не обращать внимания, но я решил разобраться. Оказалось, что в данном файле достаточно в строках 24 и 34 в объявление функции добавить ключевое слово function.

Было

cd()

Стало

function cd()

Теперь заставляем bash перечитать файлы конфигурации и проверяем, все ли установилось правильно:

$ source ~/.bashrc
$ rvm notes

Если все прошло нормально, то на экране увидим информацию по зависимостям данной программы.

Настала пора устанавливать ruby. Посмотрим список доступных интерпретаторов:

$ rvm list known

И теперь устанавливаем требуемую версию:

$ rvm install 1.8.7

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

$ rvm use 1.8.7
$ ruby -v

Теперь аналогично можно установить другую версию ruby, и в различных проектах использовать требуемую версию. Для того, чтобы в системе постоянно использовалась определенная версия ruby необходимо дать команду:

$ rvm --default use 1.8.7

Gem

Для каждой версии ruby создается своя коллекция gem. Что довольно удобно. К тому же есть возможность создавать свои собственные коллекции и использовать их для определенного круга задач. Так как ruby мы устанавливали от имени пользователя, то и gem необходимо устанавливать так же, например:

$ gem install jekyll kramdown serve thin

Переключение коллекции осуществляется автоматически при изменении используемой версии ruby.

Для управления коллекциями используется команда gemset. Создадим коллекцию и будем ее использовать:

$ rvm gemset create bestgems
$ rvm gemset use bestgems

Теперь устанавливаем нужные нам gem (коллекция создается по умолчанию пустой). И для того, чтобы определенная коллекция использовалась по умолчанию, ее необходимо указать при определении версии ruby:

$ rvm use 1.9.2-head@bestgems --default

Для того, чтобы gem устанавливались без документации (к примеру, на сервере она совершенно не нужна), достаточно в файл ~/.gemrc добавить строки:

install: --no-rdoc --no-ri
update: --no-rdoc --no-ri

Преимущества

В Debian ruby прекрасно ставится из репозитория, однако в дальнейшем обновлять версию ruby возможно только при обновлении соответствующего пакета, что происходит довольно редко и с большими задержками. Использование команды обновления просто заблокировано:

$ sudo gem update --system

При попытке ее использования мы получим довольно объемное описание, почему использование данной команды запрещено.

Если же использовать RVM, то таких проблем не возникает.

К тому же, установка по умолчанию производиться в домашнюю папку пользователя. И все программы, gems доступны только ему. Любой пользователь системы может иметь свой набор инструментов, который может понадобиться именно ему. А при необходимости RVM можно установить и как системный менеджер.

RVM позволяет очень просто создавать собственные коллекции gem, использовать для каждой отдельной задачи свой набор и свою версию ruby. Гибкость разработки просто невероятная!

Вы все еще не используете RVM? Тогда мы идем к Вам!!!