Using Capistrano with Passenger (mod_rails)
May 10th, 2008I love Phusion Passenger. It takes away most of the pain from deploying. Instead of having to mess around with lengthy apache config files, you can just upload. POW!
Phusion Passenger — a.k.a. mod_rails — makes deployment of applications built on the revolutionary Ruby on Rails web framework a breeze. It follows the usual Ruby on Rails conventions, such as “Don’t-Repeat-Yourself”.
Installing Passenger
Another great thing about Passenger is that it’s stupidly easy to install.
gem install passenger
passenger-install-apache2-module
Then just follow the instructions that are displayed inside the terminal. It shouldn’t take more than 5-10 minutes max to get this shit on the road.
Passenger Meet Capistrano
You are using capistrano, aren’t you? Capistrano is a great tool, by Jamis Buck, for deploying your applications. It takes all the monotonous stuff and does it for you, which is nice.
If you’re not using capistrano, you can install it with the following:
gem install capistrano
Next, go to the root directory of your application and type:
capify .
This will set up your application for use with capistrano by creating a deploy.rb file and a Capfile. The deploy file is a recipe that will be used every time you deploy your application. Now lets look at making capistrano play with passenger.
The Deploy Recipe
I must confess something at this point: I’ve not actually tested this recipe yet as I’ve not had time. As far as I’m concerned it should work. If you find any problems let me know and I’ll fix them.
#############################################################
# Application
#############################################################
set :application, "example"
set :deploy_to, "/var/www/#{application}"
#############################################################
# Settings
#############################################################
default_run_options[:pty] = true
set :use_sudo, true
#############################################################
# Servers
#############################################################
set :user, "jim"
set :domain, "example.com"
server domain, :app, :web
role :db, domain, :primary => true
#############################################################
# Subversion
#############################################################
set :repository, "http://www.example.com/svn/example"
set :svn_username, "jim"
set :svn_password, "password"
set :checkout, "export"
#############################################################
# Passenger
#############################################################
namespace :passenger do
desc "Restart Application"
task :restart do
run "touch #{current_path}/tmp/restart.txt"
end
end
after :deploy, "passenger:restart"
From what I’ve read, the last few lines are all you should need to restart your application. This will be called after all deploy calls so you shouldn’t have to worry about anything.
Long live passenger
Some Stuff to Read
Here’s a list of a few things that are worth reading regarding capistrano and/or passenger.
Capistrano
- Getting Started with Capistrano
- Capistrano 2.3.0 Released
- Building an Environment From Scratch With Capistrano 2


