Phusion Passenger with a prefix

Mike Burns

The Mongrel Web server can run with a URL prefix, using the –prefix option. This is useful for running an app in a “subdirectory”—say BankDirectr at http://banks.info/directr and BankRobbr at http://banks.info/robbr .

Lola robbing a store in Run Lola Run

In development you want that same prefix; this way your stylesheets, images, and other static assets show correctly at the right URL. For this we had originally modified script/server to always pass –prefix to Mongrel.

Switching to Phusion Passenger has removed one tab from my screen session, and made development faster and easier. However, getting it to work with a subdirectory took a few minutes.

The basic idea is that Apache handles the static assets, and Passenger handles the rest. So in your VirtualHost block you need to add an Alias from the prefix to the DocumentRoot. Like this:

<VirtualHost *:80>
  ServerName banks.info
  DocumentRoot /var/www/robbr
  Alias /robbr /var/www/robbr
</VirtualHost>

However, in an attempt to ruin our fun, Phusion Passenger’s documentation says this:

Phusion Passenger conflicts with mod_rewrite and mod_alias. Those modules may be installed and loaded together with mod_passenger, and they will work fine outside virtual hosts that contain a Rails application, but we recommend you not to use their features inside virtual hosts that contain a Rails application.

Fine. It works just fine for me using mod_alias, but that’s only in my development environment and not in production. Here’s another solution:

cd /var/www/robbr/public
ln -s . robbr

Now any asset that references /robbr , such as /robbr/stylesheets/layout.css , will follow the symlink to public .