ROR + Passenger + Apache

После того как рельсовое приложение более-менее готово для его коммерческой эксплуатации необходимо перейти с Webrick’а на более серьезный сервер. Лично на данный момент выбрал Apache, поэтому и запишу процесс настройки ROR + Apache.
Для начала нужно установить сам Apache. В RH-линуксах это делается так:

1
yum install httpd

Для полноценности apache’а можно еще установить PHP:

1
yum install php

Но я бы этого не делал, на всякий случай, чтобы не один web-shell там не работал т.к. я не видел вебшеллов под unix’ы кроме как на PHP и CGI Perl.

установка passenger

Далее нужно установить такую штуку как Passenger. Этот gem поможет связать Apache с ROR’ом. Оффициальная инструкция установки Passenger есть тут – http://wiki.rubyonrails.org/deployment/apache-passenger. В принципе до определенного момента я буду ей следовать.
Устанавливаем сам гем:

1
# gem install passenger

Запускаем скрипт:

1
# passenger-install-apache2-module

Здесь скрипт скажет что нужно и что из этого у вас уже установлено. Если что-то не установлено он подскажет как установить, если же все уже есть, то установиться модуль к апачу. В случае если вам придется что-то доустановить, не забудьте после этого опять запустить этот скрипт.

настройка apache

Теперь самое сложное – надо настроить апач. Отворяем /etc/httpd/httpd.conf и колдуем.
В подгружаемые модули дописываем, то что порекомендовал скрипт passenger’а:

1
2
3
4
5
6
7
8
9
10
...bla-bla-bla...
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule cgi_module modules/mod_cgi.so
 
<span style="color: #3366ff;">LoadModule passenger_module /usr/local/lib/ruby/gems/1.9.1
/gems/passenger-3.0.2/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.9.1/gems
/passenger-3.0.2
PassengerRuby /usr/local/bin/ruby
</span><span style="color: #0000ff;">PassengerDefaultUser root</span>

Чтобы наверняка, можно дописать еще строку выделенную темносиним.

Далее надо будет поколдовать с директивой NameVirtualHost. Возможно она и не понадобиться, а быть может и поможет. Раскомментируйте ее:

1
NameVirtualHost *:80

настройка виртуального хостинга

Для каждого сайта(домена) следует дописать в конец конфига что-то типа:

1
2
3
4
5
6
7
8
9
10
11
<VirtualHost *:80>
    ServerName <span style="color: #800080;">mysuperrubyonrailsunderapachesite.ru
</span>    ServerAlias <span style="color: #800080;">www.mysuperrubyonrailsunderapachesite.ru
</span>    DocumentRoot <span style="color: #3366ff;">/var/www/rails<strong>/public</strong></span>
    <Directory <span style="color: #3366ff;">/var/www/rails/</span><strong><span style="color: #3366ff;">public/</span></strong>>
        Allow from all
    </Directory>
    RailsEnv development
    RailsBaseURI /
    ErrorLog logs/mysuperrubyonrailsunderapachesite.ru.log
</VirtualHost>
mysuperrubyonrailsunderapachesite.ru

Эта конфа обозначает, что содержимое директории с рельсовым приложением лежит в /var/www/rails, а папка public – та самая публичная папка рельсов где лежат CSS, JS, картинки и прочее.

Внимательно посмотрите какие права у каталогов. Признаком нехватки прав у апача, помимо логов,  является Apache Test Page.
Помните, что апач по умолчанию работает под ущербным пользователем apache, поэтому следует дать ему права на чтение и исполнение в каталоге /var/www/rails/.
Вторая типовая, по крайне мере моя, ошибка проявляется в том случае если в /var/www/rails/ лежит не само рельсовое приложение а только ссылка на public. Здесь, если сами рельсы лежат допустим в /home/username/rails, даже если вы настроите права ко всем и всякому 0777 в браузере все равно может появиться Test Page. Виновником тому, например в RH-линуксах, может стать SELinux.
Отключить SELinux можно установив значение параметра SELINUX=disabled в файле /etc/selinux/config, после чего надо перезагрузиться.

На этом грубая настройка Apache под Ruby on Rails закончена. Запускайте Apache как умеете, у меня, например, в Fedora это выглядит так:

1
# service httpd start

Не забудьте настроить iptables, выключить же его можно так:

1
# service iptables stop

One Comments to “ROR + Passenger + Apache”

  1. [...] В принципе, настройка Nginx через Passenger под Rails 3 похожа на аналогичную Apache’а. Но для закрепления, я все равно здесь ее опишу. Прежде [...]

Leave a Reply

(обязательно)

(обязательно)