# Ruby в Debian

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

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

## RVM

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

```shell
$ 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:

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

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

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

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

Было

```bash
cd()
```

Стало

```bash
function cd()
```

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

```shell
$ source ~/.bashrc
$ rvm notes
```

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

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

```shell
$ rvm list known
```

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

```shell
$ rvm install 1.8.7
```

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

```shell
$ rvm use 1.8.7
$ ruby -v
```

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

```shell
$ rvm --default use 1.8.7
```

## Gem

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

```shell
$ gem install jekyll kramdown serve thin
```

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

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

```shell
$ rvm gemset create bestgems
$ rvm gemset use bestgems
```

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

```shell
$ rvm use 1.9.2-head@bestgems --default
```

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

```text
install: --no-rdoc --no-ri
update: --no-rdoc --no-ri
```

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

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

```shell
$ sudo gem update --system
```

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

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

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

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

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

