Установка ruby в Ubuntu с помощью rbenv-installer

На хабре уже есть несколько статей о rbenv (раз, два, три), но ни в одной не упомянут очень удобный инструмент rbenv-installer. Этой статьёй я и заполню этот пробел.

Прежде чем начну описывать установку, хочу сказать чем меня порадовал rbenv и почему я перешёл на него с RVM.

В одном из моих проектов мне понадобилось периодически запускать задачи (rake tasks) с помощью cron. Задачи для cron-а я формировал и записывал в crontab с помощью гема whenewer. Тогда я ещё пользовался RVM и cron в лог писал что-то вроде:
bundle: command not found

Искал решение с помощью гугла и нашёл в issues whenewer-а упоминание о такой же проблеме. Тикет был закрытым и упоминалось что в rbenv всё работает. Установил я rbenv и без каких-либо дополнительных настроек мои cron-задачи стали работать так как я и хотел. С того дня в новых проектах я только rbenv использую.

Ну а теперь по теме.

Устанавливаем rbenv


Опишу процесс установки на Ubuntu, т. к. сам использую эту ОС в качестве десктопа и на серверах. По шагам рассмотрим полную установку на свеженький Ubuntu Server 12.04.

Первым делом устанавливаем git и curl.
sudo apt-get -y install git-core curl

Затем скачиваем и запускаем установочный скрипт.
curl -L raw.github.com/fesplugas/rbenv-installer/master/bin/rbenv-installer | bash

Скрипт установит не только rbenv, но и ruby-build и rbenv-vars.

Далее нужно добавить следующий кусок кода в файл .bashrc, находящийся в домашней директории.
if [ -d $HOME/.rbenv ]; then
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
fi


Очень важно поместить этот код перед строками:
# If not running interactively, don't do anything
[ -z "$PS1" ] && return

В комментарии говорится — ничего не делать, если не запущено в интерактивном режиме.

Наверняка из-за этого нюанса cron не мог найти bundle при установленном RVM, который сам прописывается в конец файла. В rvm notes написано:

If you wish to use RVM in an interactive fashion in other shells then place the following line at the end of your shell's loading files (.bashrc or .bash_profile for bash and .zshenv for zsh), after all PATH/variable settings

Возможно, если инициализировать RVM также в начале .bashrc, cron узнает о том, что такое bundle, но я уже окончательно перешёл на rbenv, хотя возможно при случае и протестирую.

После сохранения .bashrc его нужно перезагрузить командой:
. ~/.bashrc

Теперь rbenv готов к использованию.

Установка всего необходимого для ruby


Всем известно, что для того чтоб ruby нормально заработал в Ubuntu, необходимо предварительно установить кучу пакетов. В RVM есть команда rvm requirements, которая помогает выяснить что же надо установить. В rbenv этот шаг организован более удобно:
rbenv bootstrap-ubuntu-12-04

Эта команда установит все нужные пакеты, после чего можно установить нужную версию руби.

Устанавливаем ruby
Тут хочу упомянуть о том, что по клавише Tab можно увидеть какие команды доступны для rbenv, а перед установкой руби можно посмотреть доступные версии нажав таб после ввода команды rbenv install:
image

Устанавливаем последнюю версию руби:
rbenv install 1.9.3-p194

На время установки можно пойти попить чайку, а по её завершению делаем установленную версию руби глобальной в системе:
rbenv global 1.9.3-p194

Последние штрихи


Теперь устновим gemsets, bundler и rake:
rbenv bootstrap

И завершении выполним rbenv rehash, чтобы получить доступ к исполняемому файлу bundle.

Собственно для сервера этого достаточно. Теперь на нём полноценный руби, который виден даже cron-у.
На своей рабочей машине я ещё устанавливаю rbenv-bundler, чтобы не писать bundle exec перед тем же annotate.

О его установке и использовании можно почитать на странице проекта.

Ссылки по теме и около неё

  • rbenv — страничка самого rbenv-a
  • rbenv-installer — страничка героя этой статьи
  • rbenv-bundler — плагин для тех кто не любит писать bundle exec
  • Railscast #335: Deploying to a VPS — в этом скирнкасте Райан Бэйтс (Ryan Bates) рассказывает как установить и настроить полноценный сервер для RoR.
Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 10

    0
    Спасибо, нужно попробовать. Раньше (и сейчас) проблему с $PATH решал при помощи .rvmrc
      –1
      > После сохранения .bashrc его нужно перезагрузить командой:
      >. ~/.bashrc

      Тут не опечатка случайно с командой?
        +3
        Всё верно написано. «.» == «source»

        $ source ~/.bashrc
        +1
        rbenv-installer действительно так сложен, что о нём надо писать статью?
          0
          Во всех предыдущих статьях писали как ставить rbenv без него. Я решил показать, что с ним удобнее.
          0
          Ну он сложнее чем rvm, кнопочек больше жать нужно)
            0
            Зачем так мучатся? Надо всегда избегать (если вы не разработчик Ruby-интерпретатора) компилирование ПО (чтобы не следить за фиксами безопасности и т. п.), поэтому у Ubuntu есть прекрасный apt. Нужно просто выбрать PPA со свежим Ruby и ставить его оттуда. Например, есть прекрасный PPA с Ruby 1.9.3 и со всеми вкусными патчами: blog.brightbox.co.uk/posts/author/john
              0
              А как между версиями переключаться?
                0
                Лично я просто указывал явно irb1.8 или gem1.9.1, но можно и менять — в PPA есть ruby-switch.
                0
                Спасибо за ссылочку. Такого решения не знал.

              Only users with full accounts can post comments. Log in, please.