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
全然だめじゃん。
ということで。以下が解決法。
インストール手順
RubyをfastCGIに対応させる。(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/1138628101ratio - 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
たぶん適当なところが多いので、どなたかフォローしていただけたらたすかります。