Passenger, als Alternative für script/server

Passenger vereinfacht nicht nur das deployen von Rails-Applikationen auf dem Server (siehe Artikel Passenger: Rails-Hosting leicht gemacht) sondern auch das Ausführen auf dem lokalen Rechner. Immer mehr Rails-Entwickler verwenden Passenger als Alternative für script/server.

Die Verwendung von script/server hat einige Nachteile:

  • Nur ein Mongrel-Server (kann bei aufwendigen Apps zu wenig sein)
  • um mehrer Rails-Applikationen gleichzeitig zu starten, muss script/server unter verschienden Ports gestartet werden (z.B. script/server -p 3001)
  • kein SSL möglich.
  • Geschwindigkeit ist zu langsam, insbesondere beim Start.

Diese Probleme werden mit Passenger gelöst. Da Passenger ein sehr effizientes Prozess-Management besitzt. Daher ist es auch möglich, alle Rails-Projekte gleichzeitig auf dem lokalen Rechner laufen zu lassen. Wird eine Applikation länger nicht aufgerufen, so werden die unnötigen Prozesse beendet.

Installation unter Mac OS X Leopard

Im Folgenden wird gezeigt, wie Passenger unter Mac OS X Leopard installiert wird.

1. sudo gem install passenger

2. sudo passenger-install-apache2-module

3. Datei /etc/apache2/users/passenger.conf anlegen mit folgendem Inhalt
  # Bitte nicht die folgenden 3 Zeilen kopieren, sondern die Befele, die das  Installer-Skript aus Schritt 2 ausgegben hat.
  LoadModule passenger_module /Library/Ruby/Gems/1.8/gems/passenger-1.0.5/ext/apache2/mod_passenger.so
  RailsSpawnServer /Library/Ruby/Gems/1.8/gems/passenger-1.0.5/bin/passenger-spawn-server
  RailsRuby /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby

  RailsEnv development

  # Im folgenden den Pfad anpassen, indem die eigenen Projekte liegen
  <Directory "/Users/hussein/projekte">
      Order allow,deny
      Allow from all
  </Directory>

  NameVirtualHost *:80

  # Pfade anpassen in dem das Rails-Projekt liegt. Wichtig ist, dass am ende das Verzeichnis @public@ angegeben wird.
  <VirtualHost *:80>
  DocumentRoot "/Users/hussein/prokte/projekt1/public" 
  ServerName projekt1.local
  </VirtualHost>

  <VirtualHost *:80>
  DocumentRoot "/Users/hussein/prokte/projekt2/public" 
  ServerName projekt2.local
  </VirtualHost>
5. Host-Einträge am ende der Datei /etc/hosts
  # nicht die anderen Einträge löschen, sonst kann der Rechner ggf. nicht booten
  127.0.0.1 projekt1.local projekt2.local

4. Apache neustarten mit sudo apachectl restart

Aufruf der Rails-Applikationen im Webbrowser

Im Browser kann nun über projekt1.local und projekt2.local auf die Projekte zugefriffen werden.

Neustart der Rails-Applikationen

Um eine Rails-Applikation neuzustarten, einfach den folgenden Befehl ausfürhen:

touch pfad-zur-rails-app/tmp/restart.txt, wie z.B. touch /Users/hussein/projekte/projekt1/tmp/restart.txt

Alternativ kann man auch den folgenden Rake-Task erstellen:

1. Erstellen im Verzeichnis lib/taks innerhalb des Rails-Projekts die Datei passenger.rake mit folgendem Inhalt:
require 'fileutils'

namespace :passenger do
  desc "Restart Application" 
  task :restart do
    FileUtils.touch "#{RAILS_ROOT}/tmp/restart.txt" 
  end
end       

Anschließend kann ein Neustart einfach mit rake passenger:restart durchgeführt werden.

Sorry, comments are closed for this article.