thinよりlighttpdなの
nginx + thin とかやってみたけど、lighttpd + fastcgi が良い。
script/server lighttpd
とかやると、 config/lighttpd.conf が出来るので適当にいじっておく。の前に、public/dispatch.fcgi の実行パスと実行権限を書いておくのを忘れていつも1分くらい時間無駄にする私マーメイ
あとは
script/process/spawner
を使って自動監視的なことをするんだ。
rails@xxx:~/$ ruby script/process/spawner --help
Usage: spawner [options]Description:
The spawner is a wrapper for spawn-fcgi that makes it easier to start multip le FCGI
processes running the Rails dispatcher. The spawn-fcgi command is included w ith the lighttpd
web server, but can be used with both Apache and lighttpd (and any other web server supporting
externally managed FCGI processes).You decide a starting port (default is 8000) and the number of FCGI process instances you'd
like to run. So if you pick 9100 and 3 instances, you'll start processes on 9100, 9101, and 9102.By setting the repeat option, you get a protection loop, which will attempt to restart any FCGI processes
that might have been exited or outright crashed.Examples:
spawner # starts instances on 8000, 8001, and 8002
spawner -p 9100 -i 10 # starts 10 instances counting from 9100 to 9109
spawner -p 9100 -r 5 # starts 3 instances counting from 9100 to 9102 and at tempts start them every 5 secondsOptions:
-p, --port=number Starting port number (default: 8000)
-i, --instances=number Number of instances (default: 3)
-r, --repeat=seconds Repeat spawn attempts every n seconds (defa ult: off)
-e, --environment=name test|development|production (default: produ ction)
-s, --spawner=path default: /usr/bin/env spawn-fcgi
-d, --dispatcher=path default: /home/rails/radiodays/public/dispa tch.fcgi-h, --help Show this help message.
みたいな感じなので、
script/process/spawner fcgi -p 8100 -i 2 -r 5
みたいな感じにすると、8100,8101 番ポートで FastCGI 立ち上げてくれて、5秒おきに死活監視してくれる感じになってるみたい。だけど、もしFastCGIのプロセスが落ちても、次のアクセスで自動的に立ち上がるようになってるみたいだから特に気にしなくてもいいのかな?
自前で HTTPリクエストを飛ばしてステータス見てるよりは良いのかもしれない。
FastCGIが System Exit したときのリクエストが気になる。 thin + nginx でunix のソケット経由でやったときは、1個のリクエスト中に裏の thin のプロセスを kill と、すぐ他のとこつないで 500 的なステータスは返らず正常に表示できたみたいで、そこは良かったなぁと思うのです。
で、 spawner を kill する方法がわからないので、 pid 調べて kill しています…。
Rails のソースを変更したときは、FastCGIのプロセスだけ再起動してあげればよくて、
script/process/reaper -a graceful
とやればいいんだ。
フロントは pound が安定してていい感じ。10以上のサーバで使ってるけど、まったく落ちない。そして、URLの正規表現で簡単に振り分けが出来るのが素敵だと思う。