One assumption in that post is that each web app will be running as its own site (using the ServerName directive inside an Apache <VirtualHost> element). In my case, I wanted to run each web app as a virtual directory in a single VirtualHost. My original configuration (with everything running the same Ruby version) looked like this:
1 2 3 4 5 6
This server is using (regular) Passenger to serve 3 Rack apps (in this case Sinatra) at the urls /app1, /app2, and /app3. Now I want to run app1 under a different Ruby version. Following the instructions in Phusion’s post, I installed Ruby 1.9.3 using RVM and then installed Passenger (note: the
--pre flag isn’t necessary for installing Passenger anymore since the current release version includes the Standalone server).
The next step is to switch app1 to Ruby 1.9.3 while leaving app2 and app3 alone:
1 2 3 4 5 6 7 8 9 10
There are only a few changes here. First, app1 has its
RackBaseURI directive removed. Secondly, a
<Location> element was added for the
/app1 virtual directory. On line 6 the
PassengerEnabled directive turns off the “main” Passenger processing for this virtual directory. Then the
ProxyPassReverse directives are added to handle the proxying to Passenger Standalone.
With only those few changes, app1 is now running on Ruby 1.9.3 while app2 and app3 continue to run as they did before. If the need arises later to run another version of Ruby it’s just a matter of installing it with RVM, setting up a new instance of Passenger Standalone, and adding another