mynethome.de

5. November 2008 um 11:04 Uhr

Ruby on Rails mit Apache

Möchte man eine Rails-Anwendung, wie zum Beispiel Redmine (eine Anwendung zur Verwaltung von Projekten, mit einer beeindruckenden Featureliste) unter Linux mit dem Apache 2 bereistellen, bietet sich das noch recht junge Apache Modul Passenger (aka mod_rails) an.

Für Ubuntu sind sogar mod_rails Pakete verfügbar, nach eigener Erfahrung muss ich jedoch von deren Verwendung – und das ist der Grund für diesen Blogeintrag – abraten.

Warum? In den Abhängigkeiten des Pakets wird der Apache in der Version mpm-worker verlangt. mpm-worker bezeichnet hierbei die interne Arbeitsweise des Apache und impelemtiert einen Hybrid-Webserver mit Multi-Thread und Multi-Prozess-Unterstützung, was große Performancegewinne und Skalierbarkeit verspricht. Alternativ dazu gibt es u.a. noch die Variante mpm-prefork, die einen im Voraus forkenden Webserver ohne Thread-Unterstützung bietet. Durch das Forken und die fehlende Threadunterstützung besitzt diese Varante zwar weniger Flexibilität, jedoch deutlich mehr Stabilität. Außerdem können nicht-threadsichere Module und Bibliotheken wie zum Beispiel PHP verwendet werden.

Die Verwendung von mpm-worker führte bei mir zu massiven Problemen. In meinem Fall war es ein kleiner V-Server, auf dem es zu Speicherproblemen kam, die sich folgendermaßen im Errorlog zeigten:
[Thu Oct 30 19:12:52 2008] [alert] (12)Cannot allocate memory: apr_thread_create: unable to create worker thread

oder

[Thu Oct 30 19:14:22 2008] [error] (12)Cannot allocate memory: fork: Unable to fork new process
*** Exception Errno::ENOMEM in spawn manager (Cannot allocate memory - /usr/bin/apxs2 -q BINDIR 2>/dev/null) (process 29905):
from /var/lib/gems/1.8/gems/passenger-2.0.3/lib/passenger/platform_info.rb:67:in ``'
[...]

Nach einigen Versuchen, mit verschiedenen Direktiven für mod_rails/passenger dem Problem beizukommen, habe ich das Paket deinstalliert und mittels
gem install passenger
passenger-install-apache2-module

wieder installiert. Gleichzeitig den Apache mpm-worker gegen den mpm-prefork getauscht, und schon läuft die Anwendung rund und ohne Fehlermeldungen oder Warnungen im Logfile.
Bei dieser Variante kann man auch problemlos PHP5 parallel auf dem selben Apache-Server nutzen.

Eine andere Variante, mpm-worker mit PHP zu nutzen ist übrigens der Einsatz von FastCGI. Dies soll der Vollständigkeit halber erwähnt sein. Allerdings hat man damit die Speicherprobleme von mod_rails/passenger noch nicht gelöst, aber vielleicht lagen diese bei mir ja auch „einfach nur“ an dem V-Server.

2 Reaktionen zu “Ruby on Rails mit Apache”

  1. Gravatar Icon Marc

    Was auch noch interessant ist, die Jungs von mod_rails haben auch eine gratis „ruby enterprise“ Version. Die sollte etwas weniger Speicher verbrauchen.

  2. Gravatar Icon Olli

    Das Problem ist bis zum jetzigen Zeitpunkt noch nicht geklärt.

Einen Kommentar schreiben


Gravatar unterstützt

mynethome.de wird erstellt mit WordPress
Beiträge (RSS) und Kommentare (RSS)

(c) 2005 - 2015 Markus Schlichting