Entries from December 2009
At Viddler, we’re switching to using Git and Capistrano for our internal projects, and I was tasked with setting up the system to deploy our code to both staging and production environments. Capistrano doesn’t have built-in environment switching, but it’s dead simple to add it yourself.
The key to getting this to work is to utilize Capistrano’s ability to chain tasks–if you run
cap task1 task2, it will run the two commands in the order you listed them. Variables are shared between the tasks, so if you set a variable in
task2 will be able to access it. To get multiple environments working, you just create tasks to set environment variables, which you call before the actual task you want to run.
The first step is to figure out which variables you need to change, and then move them into their own tasks. Here’s an example of the tasks we added:
desc "Run on staging server" task :staging do server "staging.myserver.com", :app, :web, :db, :primary => true end desc "Run on production server" task :production do server "myserver.com", :app, :web, :db, :primary => true end
Now, if you want to deploy to staging, just run
cap staging deploy, and for production run
cap production deploy. Easy.