Ruby on Rails を Apache2で使う

DebianのsidでRuby on Rails と Apache2 の連携を設定してみてうまくいったのでメモ。RubyRails はインストール済の前提。

連携するRailsのアプリのパスを $RAILS_HOMEにしてます。設定ファイル内では自分の環境に合わせて展開してください。

Fast CGIのインストール

ApacheRuby on Rails を使う時には Fast CGI が必要。でもDebianでは fastcgi はなくて、fcgid というパッケージになってます。

$ sudo apt-get install libfcgi-ruby1.8 libapache2-mod-fcgid

httpd.confの設定

無事にインストールできたら /etc/apache2/site-available の下にある httpd.conf に以下の記述を追加。

Alias /cookbook/ "$RAILS_HOME/public"
Alias /cookbook "$RAILS_HOMEpublic"

<Directory $RAILS_HOME/public/>
    Options ExecCGI FollowSymLinks
    AllowOverride all
    Order allow,deny
    Allow from all
</Directory>

細かい設定は臨機応変に。

.htaccessの設定

$RAILS_HOME/public に .htaccess ファイルがあるので、以下のように修正します。

$ diff -u .htaccess.org .htaccess
--- .htaccess.org       2006-03-01 19:11:40.000000000 +0900
+++ .htaccess   2006-03-01 20:00:58.000000000 +0900
@@ -1,5 +1,5 @@
 # General Apache options
-AddHandler fastcgi-script .fcgi
+AddHandler fcgid-script .fcgi
 AddHandler cgi-script .cgi
 Options +FollowSymLinks +ExecCGI

@@ -25,11 +25,12 @@
 # Example:
 #   Alias /myrailsapp /path/to/myrailsapp/public
 #   RewriteBase /myrailsapp
+RewriteBase /cookbook/

 RewriteRule ^$ index.html [QSA]
 RewriteRule ^([^.]+)$ $1.html [QSA]
 RewriteCond %{REQUEST_FILENAME} !-f
-RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
+RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
 
 # In case Rails experiences terminal errors
 # Instead of displaying this message you can supply a file here which will be rendered instead

「RewriteBase /cookbook/ 」は「RewriteEngine ON」の後に書くこと。あと、cookbook は自分のアプリ名に変更しましょう。

fcgid.conf の修正

/etc/apache2/mods-available/fcgid.conf に以下の設定を追加します。

IPCCommTimeout 40
IPCConnectTimeout 10
DefaultInitEnv  RAILS_ENV production

ここの設定が Fast CGI とは違うのではまりやすいところ。

rewriteモジュールを有効化

rewriteモジュールを有効化します。

 # a2enmod rewrite

apacheの再起動

これで設定は完了。あとはapacheを再起動して確認だ。

 # /etc/init.d/apache2 restart

初回はdispacher.fcgiを起動させるのに若干時間がかかりますが、その後はさくさく動きます。

dispacher.fcgiがたくさん起動しすぎるという時は、fcgid.confに「DefaultMaxClassProcessCount xxx」で最大プロセス数を設定できます。他にも設定項目がたくさんあるのでいろいろとチューニングはできそうです。