Passengerとmod_dir

ApacheでPassengerを有効にするとmod_dirが動かなくなる。
つまりディレクトリにアクセスした際に末尾のスラッシュを忘れると404が発生。

これはPassengerのバグではなく意図された仕様のようだ。

とりあえずそのサーバーでRailsしか動かしていないのなら問題ないのだけれど、その他のバーチャルホストで静的サイトやPHPで作成したアプリなどを置いている場合はmod_dirが効かないことで微妙に404が発生するようになる。
末尾のスラッシュというものはリンクが拡散する途中でまま抜け落ちるものらしい。

というわけで他のサイトが動いているサーバーにPassengerを載せる場合は基本PassengerEnabledをoffにした方がよい。
httpd.confのグローバルコンテキストに一行追加。

PassengerEnabled off

Railsを動かすバーチャルホストではonとする。

PassengerEnabled on

逆にすでにPassengerで色々アプリが動いているサーバーに静的サイトを乗せるなら、そのバーチャルホストにだけPassengerEnabled offを設定することもできる。

またRailsのpublic以下に静的コンテンツを置いている場合は、その部分ではPassengerEnabled offしておいた方が良い。

例えばpublic/some_static_contentに何か置いているなら以下のようにする。

<Location /some_static_content>
  PassengerEnabled off
</Location>

前の記事

RailsでSQLiteが使えるPaaSを求めて