Search code examples
ruby-on-railsapachepassengerrefinerycms

How do I serve multiple rails apps on one domain (and sub)?


This is kind of weird but I'd like to serve multiple websites on the same domain. If possible, we want to avoid subdomains to keep urls simple for our users - no need for them to know it's two separate apps. This is purely for keeping the code bases separate. Any ideas?

For example:

Rails App 1 (Refinery CMS) serves:

http://example.com/

http://example.com/about

http://example.com/pricing

Rails App 2 (our real App) serves:

http://example.com/account

http://example.com/store

http://example.com/listings

We use ruby 1.9.2, ruby on rails, refinery cms, apache and passenger.


Solution

  • If you're using Passenger, check out the Deploying to a sub URI portion of the manual - it's quite simple to set up an app on a sub-URI. You may need to set config.action_controller.relative_url_root in your app configuration, as well.

    Edit: I misread the question; not one app per URI, but one app serving some (but not all) endpoints. This is actually moderately easy to do with some basic rewrites, as well.

    Deploy your Rails app to, let's say, /railsapp (but without setting relative_url_root). Now, in .htaccess:

    RewriteRule ^account/(.*)$ railsapp/account/$1 [L]
    

    This will internally remap /account/* to /railsapp/account/*, so as long as you set up a rewrite per path your Rails app handles, it should work fine.