Ruby on Rails - ApacheをDebianのlibapache2-mod-fcgidで連携させようとしたのだけれど、環境変数RAILS_ENVをどこで設定したらよいのか分からず、悪戦苦闘した。
Debianで配布されているのが、一般的なmod-fastcgiじゃなくて、 mod_fcgid なのだ。バイナリ互換とは書いてあるけれど、ディレクティブは微妙に違ったりする。ハンドラ名は fastcgi-handler じゃなくて fcgid-handlerだし。
世間のドキュメントを見るには、apacheではSetEnvしろと至極当然なことが書いてあるけれど、これでは駄目だった。で、調べるとどうやらmod-fcgidのDefaultInitEnv ディレクティブを使うとspawnするときに環境変数を設定してくれるらしい。でも、最初バーチャルホストの中で設定していて、どうしても反映されずに悩んだ。
結局、fastcgiなprocessは、1つのfastcgi専用のapacheプロセスにぶら下がってるので、バーチャルホストでなくてserver configレベルで設定しておかないといけなかったらしい。
httpd(root) -+- [httpd](非root) -- [fcgi app]s | | +- [httpd]s (非root)
/etc/apache2/apache2.confに設定したらうまくいった。
あれ? server configレベルでSetEnvは試したっけ? ひょっとしてこれでもうまくいったんだろうか。まぁ、余計な環境変数は無くて済むならその方がいいから、これでいいか。