Прежде чем начну описывать установку, хочу сказать чем меня порадовал rbenv и почему я перешёл на него с RVM.
В одном из моих проектов мне понадобилось периодически запускать задачи (rake tasks) с помощью cron. Задачи для cron-а я формировал и записывал в crontab с помощью гема whenewer. Тогда я ещё пользовался RVM и cron в лог писал что-то вроде:
1
|
bundle
:
command
not
found
|
Искал решение с помощью гугла и нашёл в issues whenewer-а упоминание о такой же проблеме. Тикет был закрытым и упоминалось что в rbenv всё работает. Установил я rbenv и без каких-либо дополнительных настроек мои cron-задачи стали работать так как я и хотел. С того дня в новых проектах я только rbenv использую.
Ну а теперь по теме.
Содержание
Устанавливаем rbenv
Опишу процесс установки на Ubuntu, т. к. сам использую эту ОС в качестве десктопа и на серверах. По шагам рассмотрим полную установку на свеженький Ubuntu Server 12.04.
Первым делом устанавливаем git и curl:
1
|
sudo
apt
-
get
-
y
install
git
-
core
curl
|
Затем скачиваем и запускаем установочный скрипт:
1
|
curl
-
L raw
.github
.com
/
fesplugas
/
rbenv
-
installer
/
master
/
bin
/
rbenv
-
installer |
bash
|
Скрипт установит не только rbenv, но и ruby-build и rbenv-vars.
Далее нужно добавить следующий кусок кода в файл .bashrc, находящийся в домашней директории:
1
2
3
4
|
if
[
-
d
$
HOME
/
.
rbenv
]
;
then
export
PATH
=
"$HOME/.rbenv/bin:$PATH"
eval
"$(rbenv init -)"
fi
|
Очень важно поместить этот код перед строками:
1
2
|
# 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 его нужно перезагрузить командой:
1
|
.
~
/
.bashrc
|
Теперь rbenv готов к использованию.
Установка всего необходимого для ruby
Всем известно, что для того чтоб ruby нормально заработал в Ubuntu, необходимо предварительно установить кучу пакетов. В RVM есть команда rvm requirements, которая помогает выяснить что же надо установить. В rbenv этот шаг организован более удобно:
1
|
rbenv
bootstrap
-
ubuntu
-
12
-
04
|
Эта команда установит все нужные пакеты, после чего можно установить нужную версию руби.
Устанавливаем ruby
Тут хочу упомянуть о том, что по клавише Tab можно увидеть какие команды доступны для rbenv, а перед установкой руби можно посмотреть доступные версии нажав таб после ввода команды rbenv install:
Устанавливаем последнюю версию руби:
1
|
rbenv
install
1.9.3
-
p194
|
На время установки можно пойти попить чайку, а по её завершению делаем установленную версию руби глобальной в системе:
1
|
rbenv
global
1.9.3
-
p194
|
Последние штрихи
Теперь устновим gemsets, bundler и rake:
1
|
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.