Passenger(mod_rails)をインストールしてみた


Ruby on Railsの実行環境として注目をあびている Passenger をインストールしてみました。

少しだけトラブルもありましたが、インストールや設定は mongrelFastCGIに比べればはるかに簡単です。

また、Apacheのモジュールになっているので運用も楽ですし、Apacheのバーチャルホスト機能を使えば、複数Railsアプリを簡単に1つのサーバーで運用できるのが大きな魅力です。






インストール

http://www.modrails.com/install.html ここに書かれているように、gem で Passenger をインストールし、専用インストールコマンドで Apacheモジュールの作成・インストールを行えば良いのですが・・・
私の Mac には Apacheプレインストールされた /usr/sbin/ と Portでインストールした /opt/local/apache2 の2つが入っていて /opt/local/apache2 の方を使っているので、書かれているようにインストールすると /usr/sbin/ の方に入ってしまいます。


そこで、User guide を読んでみると有りました!
環境変数 APXS2 で apxs を指定すれば良いようです。

% sudo su
# gem install passenger
# export APXS2=/opt/local/apache2/bin/apxs
# passenger-install-apache2-module


インストール終了後、画面に表示される設定情報を httpd.conf, httpd-vhosts.conf に追加します。

httpd.conf

LoadModule passenger_module /opt/local/lib/ruby/gems/1.8/gems/passenger-2.0.1/ext/apache2/mod_passenger.so
PassengerRoot /opt/local/lib/ruby/gems/1.8/gems/passenger-2.0.1
PassengerRuby /opt/local/bin/ruby

httpd-vhosts.conf

<VirtualHost *:80>
    ServerName dm
    DocumentRoot /Users/yy/RailsWorks/dm/public
    RailsEnv development    # production環境なら不要
</VirtualHost>

<Directory "/Users/yy/RailsWorks/dm/public">
    # AllowOverride All            # 必要があればコメントアウト
    # Options FollowSymLinks       # 必要があればコメントアウト
    Order allow,deny
    Allow from all
</Directory>

これで動きました。

プロセス

Passengerで dm と todo 2つのRailsアプリが動いていると

 1831   ??  S      0:00.01 /opt/local/apache2/bin/httpd -k start
 1832   ??  S      0:11.64 Passenger spawn server                                                  
 1967   ??  S      0:01.55 Passenger FrameworkSpawner: 2.1.0                                       
 1968   ??  S      0:00.41 Passenger ApplicationSpawner: /Users/yy/RailsWorks/dm                   
 1970   ??  S      0:00.43 Rails: /Users/yy/RailsWorks/dm  
 2148   ??  S      0:00.35 Passenger ApplicationSpawner: /Users/yy/RailsWorks/todo                 
 2150   ??  S      0:00.53 Rails: /Users/yy/RailsWorks/todo                                                                                

のようになプロセスが動いています。

しかし、一定時間アクセスがないと。

 1831   ??  S      0:00.01 /opt/local/apache2/bin/httpd -k start
 1832   ??  R      0:11.46 Passenger spawn server                                                  

のように、アプリや FrameworkSpawner (Ruby on Railsフレームワーク?) のプロセスが無くなります。
1つのサーバーで、アクセスの少ない複数のアプリを運用するのにも安心ですね ^^)