現在、Ruby on Railsの本番運用環境にはコレという決定打がない感じだ。僕が開発したシステムでは現状2件ほどApache+FastCGIで動かしているがちょっと不安定な感じがする(稀に落ちる)。他にはMongrelやThinなどのPureRubyなWebサーバを別途動かしてApacheからリバースプロキシを設定するという方法も結構一般的なようだが、正直面倒くさいし、いくつもWebサーバを動かすという冗長感がRubyらしくなくて拒絶反応。
で、最近登場した新プラットフォームが「Passenger」だ。というよりmod_railsと言ったほうが分かりやすい。簡単に言えば、ようするにmod_railsです。これなら僕のように「Apacheじゃなきゃ」という古い人間にも安心。
さっそくインストール、…が、インストール途中でエラーが出てしまい頓挫。…したけど、結局RubyGemsをアップデートしたら解決。
ということなので前準備としてRubyGemsをアップデートしておく。こう。
# gem update --system
新しいRubyGemsではrequire_gemが廃止されているので、このままだと一部のパッケージがうまく動作しない。たとえばrakeを動かすとこうなる。
/usr/bin/rake:17: undefined method `require_gem'
for main:Object (NoMethodError)
このままだとやっぱりPassengerのインストールも失敗するので、こうする。
# gem pristine --all
以上で前準備終わり。ここからがPassengerのインストール。
Passengerはgemで簡単にインストールできる。
# gem install passenger
gemしたら、インストールコマンドを叩く必要がある。
# passenger-install-apache2-module
インストール完了後出てくる表示通り、httpd.confでLoadModule、RailsSpawnServer、RailsRubyを設定する。(以下は例、パスなど環境によって異なる)
LoadModule passenger_module /path/to/ext/apache2/mod_passenger.so
RailsSpawnServer /path/to/so/bin/passenger-spawn-server
RailsRuby /usr/bin/ruby
あとは普通にCGI向けのpublic/.htaccess設定で動く。(必要に応じてhttpd.confでAllowOverride Allしてね)