Beiträge getagged ‘Passenger’

Twitter liebt Open Source

24 Februar 2010

Was wäre Twitter ohne Open Source? Nicht existent. Der erfolgreiche Kurznachrichtendienst ist wohl eine der bekanntesten Anwendungen die größten Teils mit Ruby on Rails geschrieben sind. Bei solch einem Projekt bleiben Änderungen an vorhandener Software oder Komponenten nicht aus. Und über genau diese Änderungen an Open Source Projekten sowie Eigenentwicklungen von Twitter berichtet eine neu eingerichtete Website.

» Weiterlesen: Twitter liebt Open Source

Passenger für die Entwicklung

25 Juli 2009

Wer mit Rails programmiert, kennt mit Sicherheit ruby script/server. Dabei wird ein Mongrel Server gestartet, der die aktuelle Anwendung auf localhost:3000 bereitstellt. Soweit so gut. Nun hatte ich ja bereits über Passenger geschrieben. Damit lassen sich Rails-Anwendungen genauso einfach installieren wie z.B. PHP-Anwendungen. Was liegt also näher, den Passanger auch für die in Entwicklung befindlichen Anwendungen zu nutzen? Mit dem Vorteil, gleich mehrere Rails-Anwendungen parallel laufen zu lassen?

Den Passenger gibt es einzeln als GEM oder als Beipack zu Ruby Enerprise. Da ich auf meinem Entwicklungsrechner schon das Ruby der Distribution installiert habe, benötige ich die Ruby Enterprise Edition nicht. Also wird nur das Passenger GEM installiert und daraus das Modul für den bereits laufenden Apache2 erstellt.

sudo gem install passenger
sudo passenger-install-apache2-modul

Die Installation ist gewohnt einfach. Sogar fehlende Pakete werden erkannt und das Nachinstallieren derselben vorgeschlagen. Nach erfoglreichem Bauen wird das Passenger-Modul noch dem Apache bekannt gemacht. Dazu können die folgenden Einträge der Apache Konfiguration hinzugefügt werden.

LoadModule passenger_module /var/lib/gems/1.8/gems/passenger-2.2.4/ext/apache2/mod_passenger.so
PassengerRoot /var/lib/gems/1.8/gems/passenger-2.2.4
PassengerRuby /usr/bin/ruby1.8

Da ich nur ungern in Konfigurationsdateien von Paketen herumwurschtele, die ich nach einem Update evtl. erneut anpassen muss, habe ich unterhalb von /etc/apache2/conf.d/ eine Datei mit dem Namen passsenger und oben stehendem Inhalt angelegt. Der Apache fügt beim Start den Inhalt aller in dem Verzeichnis vorhandener Dateien seiner Konfiguration hinzu.

Abschließend muss noch jede Railsanwendung dem Apache bekannt gemacht werden. Das kann auf zwei Arten geschehen. Zum einen kann für jede Anwendung ein virtueller Host erstellt werden.

<VirtualHost *:80>
        ServerName app1.localhost
        DocumentRoot /home/anrichter/src/rails/app1/trunk/public
        <Directory /home/anrichter/src/rails/app1/trunk/public>
                RailsEnv "development"
        </Directory>
</VirtualHost>
<VirtualHost *:80>
        ServerName app2.localhost
        DocumentRoot /home/anrichter/src/rails/app2/trunk/public
        <Directory /home/anrichter/src/rails/app2/trunk/public>
                RailsEnv "development"
        </Directory>
</VirtualHost>

Die virtuellen Hosts müssen, damit die DNS Namensauflösung auch funktioniert, noch in der /etc/hosts verewigt werden.

Der für mich elegantere Weg stellt für jede Railsanwendung ein Unterverzeichnis auf localhost bereit. Dazu werden der Konfiguration für localhost fogende Zeilen hinzugefügt:

        RailsBaseURI /app1
        <Directory /var/www/app1/>
                RailsEnv "development"
        </Directory>
        RailsBaseURI /app2
        <Directory /var/www/app2/>
                RailsEnv "development"
        </Directory>

Im Rootdirectory vom localhost (/var/www) wird zu jeder Railsanwendung ein symbolischer Link angelegt.

ln -s /home/anrichter/src/rails/app1/trunk/public app1
ln -s /home/anrichter/src/rails/app2/trunk/public app2

Wichtig beim Einrichten ist, dass Passenger als Startverzeichnis immer das public-Verzeichnis der Rails-Anwendung haben möchte. Weiterhin muss für jedes Verzeichnis RailsEnv auf development gesetzt werden. Andernfalls startet die Rails-Anwendung in der production-Umgebung.

So eingerichtet kann ich nun problemlos an zwei oder mehr Railsanwendungen parallel arbeiten und ich muss mich nicht mehr um das Starten der Anwendungen kümmern. Selbst ein Neustart ist mit einem

touch tmp/restart.txt

im Railsverzeichnis erledigt.

So macht das Arbeiten Spaß :)

Weiterführende Informationen zu Passenger gibt es auf modrails.org und in der Passenger Dokumentation

Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Deutschland
This work by Andreas Richter is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Deutschland.