Установка 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/
Еще вот полезная фишка по работе с RVM. Допустим, у нас есть приложение blog.
Делаем:
$ cd blog/
Затем создаем гемсет для нашего приложения (для удобства имя такое же, как у приложения):
$ rvm gemset create blog
Потом:
$ nano .rvmrc
и в файле прописываем и сохраняем:
rvm use 1.9.2@blog
Затем делаем:
$ cd ./
Появится сообщение от RVM. Пишем там ‘yes’. Вот, теперь при переходе в папку нашего приложение через консоль будет автоматически использоваться Ruby 1.9.2 с гемсетом blog. Очень удобно.
Нет. Ерунда какая-то. Потом при перемещении такой папки в неё нельзя войти.
Отличная статья!
1.9.2-head может не устанавливаться, потому что head-версия это самая новая из репозитариев. Просто 1.9.2 конечно, лучше и стабильней
А что же о безопасности ОС ?
В баш вставляем обращение через CURL наружу, не ведомо что прийдёт в ответ?
Не слишком ли жирно потерять с десяток заказчиков, проекты которых храняться на сервере и за одних рельсов?
Наверное проще крест поставить на этом Rails…
Дико извиняюсь.
Да всё правильно. Но лучшего решения на данный момент нет.
Уважаемый Dexel, описываю вам классическую схему деплоя Rails-приложения.
Для каждого приложения на сервере создается отдельный пользователь. Устанавливается rvm-per-user, unicorn и его воркеры с приложением запускаются от имени пользователя приложения. nginx под www-data использует сокет юникорна для обслуживания сайта. Никаких рутов, все безопасно
Додрфй день, по совету знакомых решил освоить Ruby,
пока раотаю в winXP, перепробовал много RubyInstalers,
при попытке запустить простенькую программу возникают проблемы, уже потратил кучу времени,пожалуйста помогите проскочить проблем уили нужно просто перейти на линукс. Спасибо Николай
Да легко, только задавайте конкретные вопросы 🙂
здравствуйте! У меня возникла такая проблема- при выполнении команды – bash < <( curl https://rvm.beginrescueend.com/releases/rvm-install-head )
возникает сообщение об ошибке – bash: ошибка синтаксиса около неожиданной лексемы `&’
подскажите пожалуйста в каком направлении копать?
Это косяк сайта, он символы перекодирует. &l = &
Весь список см. вот тут.
Спасибо, с этим разобрался – иеперь вопрос в следующем – при выполнении 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
Выдается ошибка 404 файлы не найдены. Система у меня Рунта. Жду Вашей помощи.
Runtu LXDE 10.04
Приведите полный текст ошибки.
Здравствуйте! Все команды выполняются нормально, но после завершения, при попытке ввести команду rvm notes, система говорит, что команда rvm не найдена. ОС – Ubuntu 11.04. Буду очень благодарен за помощь.
Привет! Попробуйте выполнить инструкции со страницы http://beginrescueend.com/rvm/install/ из раздела “Multi-User installations”.