I had heard of mod_rails awhile back but never had the time to take a closer look at it. While setting up a new rails app, I was getting frustrated with all of the configuration I needed to do to get the mongrel clusters and proxy balancers setup. So I decided to give passenger a chance. I'm a fan now :)
The process was dead simple.
That's it! No more of this proxy balancer and mongrel_cluster.yml configuration.
There's some magic going on in the background. As requests come in, passenger will spin up more application instances. For more tweaking your configuration options check out the user guide.
Go to your website and you should see your rails app up and running.
So now we have your app up and running, how do we update or restart our app? Passenger provides two ways for us to do this.
The first is whenever apache is restarted, your application is restarted.
The second way allows us to restart a specified application without affecting Apache. Whenever passenger detects
This will create that restart.txt after the cap:deploy task gets executed, causing the application to restart.
Finally, passenger comes with some pretty useful utilities.
Check out
Another utility
Pretty sweet.
- Install the passenger gem
sudo gem install passenger
- Install passenger as an Apache module
passenger-install-apache2-module
- Load the passenger apache module by editing the Apache config
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/ext/apache2/mod_passenger.so PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5 PassengerRuby /usr/bin/ruby1.8
- Restart Apache
<VirtualHost *:80> ServerName www.mywebsite.com DocumentRoot /home/deploy/mywebsite/public </VirtualHost>
tmp/restart.txt
, it will restart the application instances for us. We can integrate this into our Capistrano deploy flow by adding the following our config/deploy.rb
namespace :passenger do desc "Restart Application" task :restart do run "touch #{current_path}/tmp/restart.txt" end end after :deploy, "passenger:restart"
passenger-status
which produces output showing current passenger server statuses.
Sample output:
----------- General information ----------- max = 6 count = 1 active = 0 inactive = 1 Using global queue: no Waiting on global queue: 0 ----------- Applications ----------- /home/deploy/www.myapp.com/releases/20081206183156: PID: 30784 Sessions: 0
passenger-memory-status
gives you insight into how much memory is being used by apache and passenger.
Sample output:
-------------- Apache processes --------------- PID PPID Threads VMSize Private Name ----------------------------------------------- 12841 1 1 225.9 MB 0.0 MB /usr/sbin/apache2 -k start 28294 12841 1 248.4 MB 21.4 MB /usr/sbin/apache2 -k start 28300 12841 1 243.7 MB 0.5 MB /usr/sbin/apache2 -k start 28306 12841 1 248.4 MB 4.4 MB /usr/sbin/apache2 -k start 28357 12841 1 249.1 MB 19.8 MB /usr/sbin/apache2 -k start 29400 12841 1 249.4 MB 3.7 MB /usr/sbin/apache2 -k start 29788 12841 1 249.3 MB 21.7 MB /usr/sbin/apache2 -k start 29834 12841 1 245.8 MB 18.9 MB /usr/sbin/apache2 -k start 29836 12841 1 245.8 MB 9.3 MB /usr/sbin/apache2 -k start 29868 12841 1 245.8 MB 2.4 MB /usr/sbin/apache2 -k start 29870 12841 1 246.5 MB 5.2 MB /usr/sbin/apache2 -k start ### Processes: 11 ### Total private dirty RSS: 107.44 MB --------- Passenger processes ---------- PID Threads VMSize Private Name ---------------------------------------- 28031 10 15.3 MB 0.1 MB /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/ext/apache2/ApplicationPoolServerExecutable 0 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/bin/passenger-spawn-server /usr/bin/ruby1.8 /tmp/passenger_status.12841.fifo 28032 2 48.7 MB 0.6 MB Passenger spawn server 29161 1 114.8 MB 0.7 MB Passenger FrameworkSpawner: 2.1.2 30461 1 122.8 MB 32.3 MB Passenger ApplicationSpawner: /home/deploy/www.myapp.com/releases/20081206183156 30784 1 129.3 MB 33.4 MB Rails: /home/deploy/www.myapp.com/releases/20081206183156 ### Processes: 5 ### Total private dirty RSS: 67.08 MB