Apache2 + fcgid + Ruby on Railsメモ

久々にしっかりとはまったので、メモを残しておきます。

やりたかったこと

Ruby on Railsをお試しでインストールして、アプリケーションをつくったのですが、
CGIだとやはりとてもとても遅いので、fastCGIで動かすことを決意。
つまり、Ruby on Railsが速く動くなるようになればよい。

はまった点

Gentooで、emerge mod_fastcgiを実行すると、Apache-1.3がインストールされてしまう。。
Apache-2のモジュール(/usr/lib/apache2/module)を確認してみると
明らかにfastcgiポイ、fcgid.soを見つける。
ただ、設定の仕方が全然分からない。。。。
適当にやっていると。

Application error
Rails application failed to start properly

全然だめじゃん。
ということで。以下が解決法。

インストール手順

RubyfastCGIに対応させる。(fcgi)

ここは、RubyGemsで提供されているので、以下のコマンドで完了。

gem install fcgi --remote

apache2にfastCGIモジュールをインストールする。(mod_fcgid.so)

gentooなので、いつも通り

emerge mod_fcgid

なんか、「fastCGI」と「fcgid」はバイナリレベルで同じようなものって
書いてありました。よくわかりませんが。
ただし、設定は結構違うみたい。

apache2(/etc/apache2/modules.d/20_mod_fcgid.conf)に設定。

(ここがとても大事なポイント)
ここで設定すべき項目は、Railsの初期設定をapacheの設定にしなくてはいけないということ。

Railsがどのモード(DB利用:config/database.yml)を利用するかを指定する。
ひとまず、developmentで作成していたので。
以下の通り指定

DefaultInitEnv RAILS_ENV development

後、以下の設定も必須らしい。

IPCCommTimeout 40
IPCConnectTimeout 10

結局。/etc/apache2/modules.d/20_mod_fcgid.confはこうなっています。



LoadModule fcgid_module modules/mod_fcgid.so
DefaultInitEnv RAILS_ENV development
IPCCommTimeout 40
IPCConnectTimeout 10


AddHandler fcgid-script .fcgi

ROR/public/.htaccessの設定。(これはどこにでも書いてある)

fastcgiをfcgidに変更

# General Apache options
#AddHandler fastcgi-script .fcgi
AddHandler fcgid-script .fcgi

RewriteRuleを変更(CGI用からfastCGI用へ)

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

apache2起動時のパラメータを追加

起動時に"-D FCGID"を追加する。
/etc/conf.d/apache2に以下を設定。

#APACHE2_OPTS="-D SSL"
APACHE2_OPTS="-D FCGID"

apache2の再起動

そして実行。

/etc/init.d/apache2 restart

参考サイト

moroの日記http://d.hatena.ne.jp/moro/20060130/1138628101
ratio - rational - irrationalhttp://idm.s9.xrea.com/ratio/2005/10/18/000274.html
Bloggy Hellhttp://myles.eftos.id.au/blog/archives/27
Paul's Journalhttp://paul.querna.org/journal/articles/2006/01/01/using-mod_fcgid-for-ruby-on-rails-applications

たぶん適当なところが多いので、どなたかフォローしていただけたらたすかります。