It’s becoming more and more of a requirement to run different apps under different versions of ruby
One one project I have needed to take the plunge with Ruby 1.9 for unicode support.
This is no big deal really because Passenger and Rails 3 are pretty stable on Ruby 1.9, however, I still have apps that need 1.8 for various reasons I wont go into.
As it stands, Passenger does not support running apps under different interpreters using the apache or nginx modules, I came across this article
I’m going to try and simplify by just giving installation instructions, but if you want a bit more in-depth info as to the reason for this process head on over to Phusion’s blog.
First of all your going to need RVM and passenger module installed on your apache/nginx instance, I’m going to assume you’ve already got this working and the reason your here is to use multiple different versions of the ruby interpreter with passenger.
NOTE: You should be using the interpreter used for the majority of your apps as the base apache or nginx passenger ruby
Lets assume we already have a working app using passenger with ruby 1.8.7 and we want to get another app running but using ruby 1.9.2
So here’s our basic configuration:
1 2 3 4 5 6 7 8 9 10 11 12 | # Basic Apache configuration PassengerRuby /home/user/.rvm/wrappers/ruby-1.8.7-p330/ruby <VirtualHost *:80> ServerName foo.com DocumentRoot /home/user/apps/foo.com/public </VirtualHost> <VirtualHost *:80> ServerName bar.com DocumentRoot /home/user/apps/bar.com/public </VirtualHost> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # Basic Nginx configuration passenger_ruby /home/user/.rvm/wrappers/ruby-1.8.7-p330/ruby server { listen 80; server_name www.foo.com; root /home/user/apps/foo.com/public; passenger_enabled on; } server { listen 80; server_name www.bar.com; root /home/user/apps/bar.com/public; passenger_enabled on; } |
Now lets setup bar.com so that it’s using the ruby 1.9.2 interpreter
$ rvm install ruby-1.9.2 # if you don't already have it
$ rvm use 1.9.2
$ cd /home/user/apps/bar.com
$ passenger start -a 127.0.0.1 -p 3000 -d
Update our web server config to use proxy pass
1 2 3 4 5 6 7 8 | # Updated Apache configuration <VirtualHost *:80> ServerName www.bar.com DocumentRoot /home/user/webapps/bar.com/public PassengerEnabled off ProxyPass / http://127.0.0.1:3000/ ProxyPassReverse / http://127.0.0.1:3000/ </VirtualHost> |
1 2 3 4 5 6 7 8 9 10 | # Updated Nginx configuration server { listen 80; server_name www.bar.com; root /home/user/webapps/bar.com/public; location / { proxy_pass http://127.0.0.1:3001; proxy_set_header Host $host; } } |
Deploying your app, bundle and reload your apache or nginx instance.
Then point your browser to `bar.com` If you’ve followed all the steps, you’ll have foo.com using 1.8.7 and bar.com using 1.9.2