[Rails][Tips] Rails 2.3.4でmongrel_clusterのprefixが効かない

先日に引き続きRailsのTipsです。

実は、来月開催の「Ruby on Railsインストール道場(2)運用環境構築編」は、前回までRails2.0.xをベースにした内容になっていたのですが、次回からRails2.3.4対応に教材を改訂する予定でおります。

といいつつ、ほとんどの内容はちょっとした違いだけで済んでいるのですが、このコースではApache+Mongrelという組み合わせで環境を作るのですが、ひとつだけ結構変わってしまったポイントがあります。それが、mongrel_clusterの設定ファイル(mongrel_cluster.yml)で設定できるアプリケーションのprefix(JavaのWebアプリでいうところのコンテキストパスみたいなものです)です。

mongrel_cluster.ymlに記述することのできたprefix属性は、Rails2.3.4では効かなくなっています(ネット上の情報によれば2.3かららしいです)。かわりに、production.rbなどのファイルに

config.action_controller.relative_url_root  = '/プレフィックス'

のように設定します。私の場合、開発時はprefixなし、本番運用時のみprefixありにするので、production.rbに書きますが、開発時も運用時もprefixありでいいなら、environment.rbに書いてもいいでしょう。

そして、このMongrelにApacheのリバースプロキシで接続するようにしている場合は、


<VirtualHost *:80>
ServerAdmin www
DocumentRoot /home/www/rails/app
ServerName localhost
ErrorLog logs/app.com-error_log
CustomLog logs/app.com-access_log combined
# ProxyPass/ProxyPassReverseの接続先URLからプレフィックスを外す
ProxyPass /app http://localhost:3000
ProxyPassReverse /app http://localhost:3000
</VirtualHost>

のようにします。今までとの違いは、mongrel_cluster.ymlにprefixをつけていたときはProxyPass/ProxyPassReverseの接続先URLにも同じくプレフィックスが必要だったのですが、前述のconfig.action_controller.relative_url_rootを使う場合には、接続先URLにはプレフィックスはつけなくてよいことになりました。私は最初これがわからなくてだいぶ時間を使ってしまいました。

参考になりましたら幸いです。

また、これらを含めた運用環境のインストール手順については、「Ruby on Railsインストール道場(2)運用環境構築編」で扱いますので是非ご検討ください。