Phusion Passenger with 2 different ruby versions
Сегодня долго разбирался как же запустить 2 версии Phusion Passenger с 2-мя различными версиями ruby.
Началось всё с того, что мне потребовалось задеплоить приложение на 3-х рельсах на сервер под управлением Ubuntu Server 9.04, где уже был установлен Ruby 1.8.7, который использовался для работы Redmine. Причём версия Redmine была из trunk и активно эксплуатировалась для ведения проектов.
Я подключил к проекту capistrano, настроил его и проверил. Локально всё заработало. А вот при попытке задеплоить приложение на целевой сервер возникли проблемы. Во-первых, мне был нужен Ruby 1.9.2, который я тут же поставил. Во-вторых после деплоя (приложение поднялось) сдох Redmine.
После продолжительных разбирательств, я обнаружил, что виной тому гем i18n. Для 3-х рельсов требуется его версия не ниже 0.4.1, а вот Redmine с этой версией не работает, а работает аж только с 0.3.7. Танцы с бубном вокруг "gem, :version => 0.3.7", "Monkey-патчинга", и даже gem:extract почти ничего толкового не дали. Никак redmine не хотел работать с другой версией i18n (когда я пытался принудительно оставить только 0.3.7). Поэтому я, в конец разочаровавшийся, начал искать пути запуска сервера с 2-мя различными версиями ruby.
Сперва я осознал, что надо установить одновременно 2 версии ruby. Для этого я установил и настроил RVM по этому мануалу.
Redmine на сервере был запущен через Phusion-Passenger-плагин к Apache и я начал выяснять можно ли использовать 2 версии ruby одновременно. Оказалось - через apache это сделать нельзя. Однако, можно установить nginx-версию passenger и использовать её. Сперва я перевёл apache на использование версии Ruby из RVM. Для этого нужно отредактировать файл /etc/apache2/mods-enabled/passenger.load ($RVM нужно заменить путём к rvm в вашем энвайроменте - в моём случае это было /home/smecsia/.rvm).
LoadModule passenger_module $RVM/gems/ruby-1.8.7-p302/gems/passenger-3.0.0/ext /apache2/mod_passenger.soА так же файл /etc/apache2/mods-enabled/passenger.conf
PassengerRoot $RVM/gems/ruby-1.8.7-p302/gems/passenger-3.0.0 PassengerRuby $RVM/wrappers/ruby-1.8.7-p302/rubyТеперь нужно было установить nginx и passenger-модуль для него. Для этого (как и написано в официальном туториале по Passenger) надо выполнить команду:
passenger-install-nginx-moduleПосле выполнения я быстро понял, что необходимо собрать nginx из исходников. И инсталлятор может сделать это за меня. Я попробовал это сделать, но вскоре стало очевидно, что этот вариант не очень удобен, поскольку запускать nginx пришлось бы вручную - или самому писать скрипт запуска его в качестве демона. И я начал искать варианты установки nginx+passenger из пакетов. Оказалось этот вариант существует:
deb http://apt.brightbox.net hardy main apt-get install nginx-brightboxОднако, тут я тоже наткнулся на проблему. Версия из пакетов была не свежей, и несовместимой с версией гема passenger который был у меня установлен. Тогда я решил собрать всё же nginx из исходников, но воспользоваться скриптом его запуска из пакета nginx-brightbox.
mkdir ~/dist/nginx && cd ~/dist/nginx wget http://sysoev.ru/nginx/nginx-0.8.53.tar.gz tar zxf nginx-0.8.53.tar.gz && cd nginx-0.8.53 passenger-install-nginx-moduleДальше я выбрал вариант указать исходники nginx вручную (вариант 2) и указал ~/dist/nginx/nginx-0.8.53, затем указал в качестве директории для последующей установки ~/opt/nginx. После компиляции я отредактировал файл ~/opt/nginx/conf/nginx.conf таким образом:
http { passenger_root $RVM/gems/ruby-1.9.2-p0/gems/passenger-3.0.0; passenger_ruby $RVM/wrappers/ruby-1.9.2-p0/ruby; include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 127.0.0.1:81; root /var/www/rails-webapps/myapp/current/public; passenger_enabled on; } }Так же, открыл файл /etc/init.d/nginx и исправил строку DAEMON=/usr/sbin/nginx на путь к собранной версии (~/opt/nginx/sbin/nginx).
Затем я запустил nginx:
sudo /etc/init.d/nginx startПосле этого можно настроить прокси из Apache на nginx (на 81 порт) и таким образом получить почти прозрачную возможность использовать 2 версии ruby для своих rails-приложений.
Комментарии: 0:
Отправить комментарий
Подпишитесь на каналы Комментарии к сообщению [Atom]
<< Главная страница