Skip to content
accelerando

Rails mit FastCGI und Apache unter Mac OS X

Die vorherigen Artikel Ruby on Rails mit Mac OS X und Rails: Rolling into production on Mac OS X beschäftigten sich mit der Installation von Ruby on Rails unter Mac OS X bzw. mit der Produktivumgebung von Rails.

Prämisse für mich war jedesmal, dass der eingebaute Mac OS X Apache genutzt wird und nicht ein zweiter Serverprozess.

Heute soll es um die FastCGI Integration gehen. CGI war mir bis jetzt zum Testen nicht zu langsam. Fängt man aber mit AJAX Spielerein an und nutzt Rails mit CGI, kann man das auch getrost ganz sein lassen. Vorweg: FastCGI zu CGI ist ein Unterschied wie Tag und Nacht.

Was braucht man? (Die Links verweisen direkt auf die benötigten Dateien)

Die Installation ist relativ einfach.

FastCGI SDK:

./configure
make
sudo make install

mod_fastcgi

apxs -o mod_fastcgi.so -c *.c 
sudo apxs -i -a -n fastcgi mod_fastcgi.so

Ruby Bindings

ruby install.rb config
ruby install.rb setup
ruby install.rb install

Fast geschafft. Es folgt ein Apache Neustart mit

sudo apachectl graceful

Anschliessend gibt es einen kleinen Pitfall. Man muss zwei Tempverzeichnisse für FastCGI chmoden:

chmod 777 /tmp/fcgi_ipc
chmod 777 /tmp/fcgi_ipc/dynamic

sonst geht es in die Hose.

Anschliessend zur Apache Konfiguration. Diese habe ich wieder auf zwei Dateien aufgeteilt. In der httpd.conf wird das Modul mod_fastcgi geladen. Der Installer hat diesen Eintrag bereits automatisch erzeugt. Wenn nicht, folgende Zeilen ergänzen:

LoadModule fastcgi_module     libexec/httpd/mod_fastcgi.so

Danach den Handler einrichten:

<IfModule mod_fastcgi.c> 
FastCgiIpcDir /tmp/fcgi_ipc/ 
AddHandler fastcgi-script .fcgi 
</IfModule>

und wir sind fast fertig. Die eigentliche Rails Anwendung wird wieder in der Userspezifischen httpd.conf eingestellt, zu finden unter /etc/httpd/users/name.conf:

<IfModule mod_fastcgi.c>
   FastCgiServer "/Users/msimons/dev/rails/test/public/dispatch.fcgi" -
initial-env RAILS_ENV=production -processes 15 -idle-timeout 60
</IfModule>

Die Werte fürs Timeout und die Anzahl Prozesse sind aus dem Buch “Agile Web Development with Rails”.

Die Anwendung nutzt fastcgi, sobald man die entsprechende Rewrite Rule in .htaccess im public folder setzt:

RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

bzw. die ursprüngliche Regel

RewriteRule ^(.*)$ dispatch.cgi [QSA,L]

ändert.

Danach ist ein letzter Apache Neustart fällig und man sieht seine Anwendung auf einmal in einem ganz anderen Tempo.

Post a Comment

Your email is never published nor shared. Required fields are marked *
*
*

*

Close
E-mail It