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 также действенен.

Дополнительная информация