Послушав некоторых людей и прочитав некоторые статьи и комментарии я пришел к выводу, наверняка, очевидному для других, что REE быстрее и стабильнее Ruby 1.9.x. Собственно к этому выводу можно прийти просто расшифровав аббревиатуру REE как Ruby Enterprise Edition. А т.к. мой любимый iLukmus крайне нуждается в скорости, я решил перенести его на REE, а также, по совету Elfiel’а сменил back-end сервер с Mongrel’а на Thin, который, говорят, по скорости может конкурировать с мюонными нейтрино из CERN.
установка REE через RVM
Установка REE несколько отличается от установки Ruby 1.9.2, а точнее тем, что еще потребуется пакет patch
.
1 2 3 | # yum install git gcc gcc-c++ curl zlib zlib-devel -y # yum install sqlite-devel.x86_64 openssl-devel -y # yum install readline readline-devel <strong>patch.x86_64</strong> -y |
Теперь как обычно ставим сам RVM:
1 | # bash < <(curl -s https://rvm.beginrescueend.com/install/rvm) |
Теперь надо закрыть терминал/завершить сессию и снова открыть терминал/залогиниться, в противном случае bash не увидит RVM.
Ставим REE и делаем его версией по умолчанию:
1 2 3 4 5 | # rvm install ree # rvm use ree --default $ ruby -v ruby 1.8.7 (2011-02-18 patchlevel 334) [x86_64-linux], MBARI 0x6770, Ruby Enterprise Edition 2011.03 |
Устанавливаем Rails (здесь на удивиление без приколов в отличии от Ruby 1.9.2):
1 | # gem install rails |
Делаем тестовое приложение, заходим в ее директорию и бандлим:
1 2 | $ rails new Testapp && cd Testapp # bundle install |
Пытаемся запустить:
1 | $ rails s |
и если в ответ появляется ошибка:
1 2 3 4 5 | /usr/local/rvm/gems/ree-1.8.7-2011.03/gems/execjs-1.2.9 /lib/execjs/runtimes.rb:47:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson /execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable) |
то дописываем в Gemfile
:
1 2 | gem 'execjs' gem 'therubyracer' |
и опять бандлим.
установка Thin
Судя по диаграмме на офсайте Thin’а, он по скорости превосходит все остальные back-end сервера Rails. Как говорит сам офсайт Thin это web-сервер, который ‘склеивает’ 3 из лучших библиотеки Ruby в истории web’а. Что делает его самым безопасным, быстрым, стабильным и, разумеется, самым скромным web-сервером в этой и некоторых других галактиках.
Устанавливается он просто:
1 | # gem install thin |
Далее, чтобы запустить, нужно зайти в директорию приложения, причем зайти надо именно в корень папки, а не так как это было с Mongrel’ом и Webrick’ом где попало.
Такой командой запустится приложение в development’е на порте 3000, короче как обычно.
1 | $ thin start |
Для промышленного запуска делаем:
1 | $ thin start -e production -p <порт> -d |
Останавить его можно так:
1 | $ thin stop |
ошибка с версией rack
Иногда, когда, например, приложение написано на Rails 3.0.x, а на сервере стоит Rails 3.1.x может вылететь ошибка с версией rack, типа этой (здесь для Ruby 1.9.2):
1 2 3 4 5 6 7 | $ thin start >> Using rack adapter /usr/local/rvm/gems/ruby-1.9.2-p290/gems/bundler-1.0.18 /lib/bundler/runtime.rb:31:in `block in setup': You have already activated rack 1.3.2, but your Gemfile requires rack 1.2.3. Consider using bundle exec. (Gem::LoadError) |
В такой ситуации мне помогло следующее:
1 2 | # bundle update $ bundle exec thin start |
P.S. Убедиться или разочаровться в стабильности, быстроте и прочих достоинствах Thin и REE можно глядя на iLukmus.
Забыл сразу же отписаться. Через ~6 часов после перехода на REE я обратно перешел на 1.9.2 от греха подальше. И пусть 99.9(9)% гемов в REE полностью совместимы, в то время как каждый 10-й гем в 1.9.x нужно немного исправлять, пусть REE стабильней чем 1.9.x, и т.д. Но все же 1.9.x быстрее чем REE и причем это достаточно заметно.
И еще если вы захотите перейти с 1.9.x на REE, то вам придеться переписывать некоторые куски кода, где идет работа со строками, напр.: код ‘абвгдеёжз’[0..2] в REE и 1.9.x выдает различные результаты.
А если же вы захотите перейти потом обратно с REE на 1.9.x в БД возникнут проблемы с кодировкой.