Установка RVM, Ruby 1.9.2, Ruby on Rails 3.0.1 на Ubuntu + решение проблемы с гемом mysql2
В этой статье я опишу идеологически правильную установку Rails 3.0.1 и сопутствующего добра на Ubuntu. Вообще я стараюсь ставить весь софт из пакетов, но в данном случае, для лучшего контроля версий сделаю исключение.
Сразу хочу ответить на вопрос, зачем я это делаю. В сети много материалов по установке Rails, про RVM тоже есть. Однако везде есть какие-либо неточности, и из простого руководства статья превращается в квест “собери сам”. Хочется надеяться, что эта статья такой не станет. Итак поехали!
Установка RVM на Ubuntu
RVM (Ruby Version Manager) – программа для управления версиями руби, и его гемов (расширений), одним из которых является Rails.
1. Ставим RVM через CURL
|
1 2 3 |
sudo aptitude install build-essential bison openssl libreadline5 libreadline-dev curl git-core zlib1g zlib1g-dev libssl-dev vim libsqlite3-0 libsqlite3-dev sqlite3 libreadline-dev libxml2-dev git-core subversion autoconf bash < <( curl https://rvm.beginrescueend.com/releases/rvm-install-head ) |
2. Открываем файл /home/имя_вашего_юзера/.bashrc и в начале файла
меняем строку:
|
1 |
[ -z "$PS1" ] && return |
на
|
1 |
if [[ -n "$PS1" ]]; then |
Затем в конце файла добавляем эти строки:
|
1 2 3 |
if [[ -s $HOME/.rvm/scripts/rvm ]] ; then source $HOME/.rvm/scripts/rvm ; fi fi |
3. Проверяем установку RVM:
|
1 |
rvm notes |
Установка RVM для всех пользователей
Этот вариант подходит для серверов. Для примера будем ставить RVM для всех пользователей (и в частности для юзера andrey).
1. Заходим под root. Ставим RVM через CURL
|
1 2 3 4 |
andrey@comp$ su root@comp# aptitude install build-essential bison openssl libreadline5 libreadline-dev curl git-core zlib1g zlib1g-dev libssl-dev vim libsqlite3-0 libsqlite3-dev sqlite3 libreadline-dev libxml2-dev git-core subversion autoconf root@comp# bash < <( curl https://rvm.beginrescueend.com/releases/rvm-install-head ) |
2. Для каждого юзера, который будет работать с rvm (в т.ч. и root) делаем следующее
|
1 |
andrey@comp$ echo '[[ -s "/usr/local/rvm/scripts/rvm" ]] && . "/usr/local/rvm/scripts/rvm" # Load RVM function' >> ~/.bash_profile |
2. Открываем файл /home/имя_вашего_юзера/.bashrc и в начале файла
меняем строку:
|
1 |
[ -z "$PS1" ] && return |
на
|
1 |
if [[ -n "$PS1" ]]; then |
Затем в конце файла добавляем эти строки:
|
1 2 3 |
if [[ -s /usr/local/rvm/scripts/rvm ]] ; then source /usr/local/rvm/scripts/rvm ; fi fi |
3. Выходим из терминала. Запускаем заново. Проверяем установку RVM:
|
1 |
rvm notes |
Тут есть такой нюанс. Если вы сделаете такую последовательность команд.
|
1 2 |
andrey@comp$ su root@comp# rvm notes |
то вы проверите установку rvm для юзера andrey, а не root, как могло бы показаться. Для точнйо проверки делайте так:
|
1 2 |
andrey@comp$ ssh localhost -l root root@comp# rvm notes |
Установка Ruby 1.9.2 через RVM
Тут история такова, что в некоторых мануалах рекомендуют ставить из head (rvm install 1.9.2-head), однако у меня установить его таким образом не получилось. Были ошибки типа этой:
|
1 2 3 |
ruby-1.9.2-head - #compiling ERROR: Error running 'make ', please read /home/andrey/.rvm/log/ruby-1.9.2-head/make.log ERROR: There has been an error while running make. Halting the installation. |
А в логах – ошибки компиляции:
|
1 2 3 4 |
long-long -fPIC -I. -I.ext/include/x86_64-linux -I./include -I. -DRUBY_EXPORT -o dmyversion.o -c dmyversion.c echo executable host ruby is required. use --with-baseruby option.; false -I. ./tool/compile_prelude.rb ./prelude.rb miniprelude.c executable host ruby is required. use --with-baseruby option. make: *** [miniprelude.c] Ошибка 1 |
Так что ставим без head.
ВАЖНОЕ ЗАМЕЧАНИЕ! Если вы будете ставить гемы от пользователя root, то они будут доступны всем остальным пользователям (начиная со следующего их входа в систему).
1. Устанавливаем ruby и делаем симлинки
|
1 2 |
rvm install 1.9.2 rvm --default 1.9.2 |
2. Проверяем
|
1 2 |
$ ruby -v ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux] |
Установка Rails 3.0.7
Последняя на данный момент версия Rails – 3.0.7 (хотя и есть 3.1, но она пока в бете). Ставится Rails очень просто:
|
1 |
gem install rails |
Смотрим версию:
|
1 2 |
$ rails -v Rails 3.0.7 |
Если резюмировать, то установка через RVM на порядок проще, чем через пакеты. Ну и собственно пакеты в репозитарии отстают по версиям.
Решение проблемы с геомом mysql2
После вышеприведённой установки, при наличии MySQL 5.5/Percona 5.5 в системе Rails-приложение с геомо mysql2 запускаться не будет. При запуске (rails server) возвращает примерно такие ошибки:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
andrey@z11:~/1/app$ rails server /home/andrey/.rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.2.7/lib/mysql2.rb:8:in `require': Incorrect MySQL client library version! This gem was compiled for 5.5.10 but the client library is 5.1.55. (RuntimeError) from /home/andrey/.rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.2.7/lib/mysql2.rb:8:in `' from /home/andrey/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.13/lib/bundler/runtime.rb:68:in `require' from /home/andrey/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.13/lib/bundler/runtime.rb:68:in `block (2 levels) in require' from /home/andrey/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.13/lib/bundler/runtime.rb:66:in `each' from /home/andrey/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.13/lib/bundler/runtime.rb:66:in `block in require' from /home/andrey/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.13/lib/bundler/runtime.rb:55:in `each' from /home/andrey/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.13/lib/bundler/runtime.rb:55:in `require' from /home/andrey/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.13/lib/bundler.rb:120:in `require' from /home/andrey/1/app/config/application.rb:7:in `' from /home/andrey/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.7/lib/rails/commands.rb:28:in `require' from /home/andrey/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.7/lib/rails/commands.rb:28:in `block in ' from /home/andrey/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.7/lib/rails/commands.rb:27:in `tap' from /home/andrey/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.7/lib/rails/commands.rb:27:in `' from script/rails:6:in `require' from script/rails:6:in `' |
Проблема решается принудительной установкой версии 0.2.6 гема mysql2.
|
1 2 |
rails new app -d mysql cd ./app |
Далее в Gemfile прописываем вместо
|
1 |
gem 'mysql2' |
следующее
|
1 |
gem 'mysql2', '0.2.6' |
Затем, как обычно:
|
1 2 |
bundle install rails server |
Начиная с версии 0.2.7 работать перестает, а < 0.2.7 всё ок.
Удаление RVM
При первой установке я поставил RVM для своего юзера(andrey) и потом уже не смог поставить его для root. Чтобы переустановить RVM, мне пришлось сначала его удалить. Делается это так:
|
1 |
rvm implode |
Не забудьте проверить файлы .bashrc, .profile и .bash_profile files.
А также удалить /etc/rvmrc file, or one в домашнем каталоге ~/.rvmrc.
Подробности тут.
Литература
http://www.christopherirish.com/2010/08/25/how-to-install-rvm-on-ubuntu-10-04/
http://fominov.ru/2010/09/ustanovka-ruby-1-9-2-i-rails-3-s-pomoshhyu-rvm-na-ubuntu-10-04/