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