RoR и Apache без CGI
Увлекся я последнее время Ruby on Rails. Очень понравилась система для видения проектов Redmine. Поставил ее у себя на сервере для ведения своих проектов. Но настроил я ее на работу через FastCGI, как то мне этот подход не понравился слишком много надо прописывать в Apache. Поэтому искал другой путь. И он был найден.
Нашел Passeger. Эть по сути mod_ruby или mod_rack.
В общем что нам дает Passenger:
- развертывание приложения Ruby (on Rails) без использование специальных веб-серверов;
- работает в виде модуля к Apache;
- простота в обслуживании;
- хорошая документация.
Ставить я все это буду на Gentoo, но настройка Apache не должна сильно отличаться в другом дистрибутиве.
Установка:
emerge -av passenger
Добавляем к значению переменной APACHE2_OPTS в файле /etc/conf.d/apache2, следующую строчку: " -D PASSENGER". Тем самым говорим, что надо запускать Apache с модулем Passenger.
Настройка: Настройка на самом деле очень проста. Надо указать директиве DocumentRoot путь до папки public.
Примерно так:
<Virtualhost *:80>;
ServerName www.mycook.com
DocumentRoot /webapps/mycook/public
</Virtualhost>
Если же вы используете не отдельный виртуальный хост, а поддериктории, то код настройка будет следующей
<Virtualhost *:80>
ServerName www.phusion.nl
DocumentRoot /websites/phusion
RailsBaseURI /rails
</Virtualhost>
Как видите добавилась еще одна строка с указанием папки, которая используется для RoR приложения. Если существует несколько приложений, то просто перечисляете требуемые папки:
<Virtualhost *:80>
...
RailsBaseURI /rails
RailsBaseURI /rails1
RailsBaseURI /rails2
</Virtualhost>
Еще скорее всего потребуется настроить права доступа к статическим файлам (css, картинки и тд).
<Location "/webapps/mycook/public">
AllowOverride None
Order allow,deny
Allow from all
</Location>
Затем перезапускаете Apache и проверяете работу приложения.
/etc/init.d/apache2 restart
Установка новой версии Если до этого вы использовали FastCGI, то вам приходилось перезапускать веб-сервер. Passenger сделает это за вас, вам лишь надо сделать следуюещее:
touch /webapps/mycook/tmp/restart.txt
Но вариант перезапуска Apache также действенен.
Дополнительная информация