Passenger für die Entwicklung

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.

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.

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.

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:

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

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

im Railsverzeichnis erledigt.

So macht das Arbeiten Spaß 🙂

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

Passenger für die Entwicklung
Markiert in:         

5 Gedanken zu „Passenger für die Entwicklung

  • 25. Juli, 2009 um 21:11
    Permalink

    Mit Mongrel kannst du auch mehrere Anwendungen parallel laufen lassen. Die erste liegt dann auf Port 3000 die 2. auf 3001 und so weiter.
    Für die Entwicklung bietet sich auch anstelle von touch tmp/restart.txt folgende datei an: tmp/always_restart.txt. Damit wird die Anwendung bei jedem Request neu gestartet (nur mal so als Info).

    Antworten
  • 25. Juli, 2009 um 21:21
    Permalink

    Ahja. Mehrere Mongrel-Instanzen habe ich noch nicht ausprobiert. Allerdings muss man die auch immer per Hand starten. Mit Apache + Passenger brauch ich nur die URL aufrufen und die Anwendung startet. Das gefällt mir persönlich besser 🙂

    always_restart.txt ist zwar super zum Entwickeln von Routen und alles, was einen Neustart der Anwendung benötigt, bremst die Anwendung aber doch merklich aus. Erst recht auf einem Laptop im Powersave-Mode, der mit 800 MHz dahindümpelt 🙂

    Auf einem Desktop-Rechner der mit voller Power läuft, fällt der Neustart u.U. garnicht auf.

    Antworten
  • 5. August, 2009 um 9:38
    Permalink

    Sehr schön.Danke für diese Infos, das wird mir eigentlich sehr helfen.Toll!

    Antworten
  • Pingback:Rails 3 Anwendung mit Passenger in einem Unterverzeichnis | Andreas Richter

  • Pingback:Phusion Passenger Standalone für die Entwicklung | Andreas Richter

Kommentar verfassen