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.
No comments yet
Post a Comment