You are here

Ruby on Rails deployen

Error message

Deprecated function: The each() function is deprecated. This message will be suppressed on further calls in menu_set_active_trail() (line 2405 of /is/htdocs/wp1022769_0UTS5D8WKG/www/siarp.de/includes/menu.inc).

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:

$ sudo chmod -R www-data. /var/www/rails/tracks/

Server starten:

$ sudo mongrel_rails start -c /var/www/rails/tracks -d -p 3001 -e production --prefix /tracks --user www-data --group www-data

Server automatisch starten:

$ sudo vim /etc/init.d/PROJEKTNAME
#!/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...

$ sudo crontab -u www-data -e

# 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):

<Proxy *>
    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