Debian mod_fcgidにおけるRAILS_ENV

Ruby on Rails - ApacheDebianの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は試したっけ? ひょっとしてこれでもうまくいったんだろうか。まぁ、余計な環境変数は無くて済むならその方がいいから、これでいいか。