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.
Beiträge getagged ‘Passenger’
Twitter liebt Open Source
24 Februar 2010Passenger für die Entwicklung
25 Juli 2009Wer 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


