I decided to run AltLaw.org under a “/v1” URL prefix. It’s still beta, and the URL structure will likely change in the future. I don’t want to break 160,000 links when that day comes. Fortunately, Mongrel makes this pretty easy with the –prefix option to mongrel_rails.
I added --prefix '/v1'
to my mongrel_rails command line. After removing absolute URLs (those not using {:controller=>...}
) from my views, everything worked great.
The only problem is, this technique prevents Apache from serving static files without hitting the Mongrel server. A typical mod_rewrite directive like this:
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f RewriteRule (.*) $1 [L]
doesn’t work, because the REQUEST_URIs now all start with “/v1” and the files in “MyRailsApp/public” don’t.
Here’s a simple workaround: make a symlink like this:
cd /path/to/MyRailsApp/public ln -s . v1
That’s right, “v1” is a symlink that points back to the “public” directory. I was afraid this might cause an infinite loop, but it doesn’t. Keeping the same mod_rewrite rule above, Apache will serve the static files under “public” even if the request is prefixed with “/v1”. Pretty cool.