Das Szenario: Es sollen neben statischen Webseiten und PHP-Anwendungen auch Ruby-on-Rails-Anwendungen auf dem Server laufen. Die klassische Variante ist für jede Rails-Anwendung einen oder mehrere (Load Balancing) Mongrel-Server laufen zu lassen und die mittels Reverse Proxy hinter den Apache zu schalten (Port 80, SSL, Sicherheit). Außerdem gibt es (relativ neu) das Apache-Modul Phusion Passenger (a.k.a. mod_rails / mod_rack). Passenger empfiehlt Apache mit Worker statt mit Prefork zu nutzen [1], aber das PHP-Modul für den Apache (mod_php) läuft nur mit Prefork. Leider hat das Ubuntu-Paket für Passenger eine Abhängigkeit mir Worker, so dass es nicht eingesetzt werden kann [2]. (PHP via CGI laufen zu lassen kommt erstmal nicht in Frage). Allerdings kann man Passenger auch mit RubyGems installieren (auch mit Prefork).
Weil es mit Tracks 1.7 Probleme gab und außerdem die Mongrel-Variante etwas sparsamer sein soll, haben wir dann die genommen. Es folgen trotzdem für beide Varianten Anleitungen.
Die Rails-Anwendung wird in /var/www/rails
entpackt. Wir gehen davon aus, dass sich Rails selber Teil des Pakets ist.
Mongrel
Dateien dem Benutzer zuordnen:
Server starten:
Server automatisch starten:
#!/bin/bash
mongrel_rails start -c /var/www/rails/tracks -d -p 3001 -e production --prefix /tracks --user www-data --group www-data
$ sudo chmod +x /etc/init.d/PROJEKTNAME
$ update-rc.d PROJEKTNAME defaults
Mongrel regelmäßig neu starten wegen Ressourcen und so...
# m h dom mon dow command
13 5 * * * mongrel_rails restart -c /var/www/rails/tracks
Das Ganze jetzt noch hinter den Apache. In der vhost-Konfiguration (Abhängigkeit mod_proxy
und mod_proxy_http
):
Order Deny,Allow
Allow from all
</Proxy>
ProxyPass /tracks http://127.0.0.1:3001/tracks
Passenger
aptitude install ruby build-essential apache2-mpm-prefork apache2-prefork-dev rake rubygems1.8 ruby1.8-dev libopenssl-ruby1.8 libmysql-ruby1.8
gem install passenger /var/lib/gems/1.8/bin/passenger-install-apache2-module
/etc/apache2/mods-available/passenger.load: LoadModule passenger_module /var/lib/gems/1.8/gems/passenger-2.2.5/ext/apache2/mod_passenger.so
/etc/apache2/mods-available/passenger.conf: PassengerRoot /var/lib/gems/1.8/gems/passenger-2.2.5 PassengerRuby /usr/bin/ruby1.8
a2enmod passenger
http://www.modrails.com/documentation/Users%20guide.html#deploying_rails_to_sub_uri
cd DocumentRoot ln -s /var/www/myrailsapp/public myrailsapp
vhost conf: RailsBaseURI /myrailsapp
/etc/init.d/apache2 restart