Getting Started with Capistrano and Ruby on Rails Slides taken from
Automated App Deployment using ssh
Not for server configuration Use Chef or Puppet for that
Installation $ gem install capistrano Bundler: gem ‘capistrano’
Capify your application $ capify.
Rails Directory Structure / |- public/ |- public/ |- config/ |- config/ - deploy.rb <--- Capistrano - deploy.rb <--- Capistrano |- application/ |- application/
Example Script set :application, "set your application name here” role :app, "your app-server here” role :web, "your web-server here” role :db, "your db-server here", :primary => true
Example Script (git) set, set, “ set, set, set :scm, :git set :repository, set :branch, “master” set :deploy_via, :remote_cache
Example Script (Passenger) namespace :deploy do desc "Restarting mod_rails with restart.txt” task :restart, :roles => :app, :except => { :no_release => true } do run "touch #{current_path}/tmp/restart.txt” end [:start, :stop].each do |t| desc "#{t} task is a no-op with mod_rails” task t, :roles => :app do ; end end [:start, :stop].each do |t| desc "#{t} task is a no-op with mod_rails” task t, :roles => :app do ; end endend
Example Script (mongrel) require 'mongrel_cluster/recipes' namespace :deploy do task :restart do restart_mongrel_cluster end end
First-time server setup $ cap deploy:setup
:deploy_to/ |- releases/ |- releases/ |- current/ --> |- current/ -->
Deploy the app $ cap deploy
Deploy and run migrations cap deploy:migrations
Rollback to the last version $ cap rollback
Capistrano Best Practices
1. Create Deploy User $ sudo useradd deploy (helps scope gems, config, logs, etc.)
2. Cleanup Old Deploys $ cap cleanup (leaves last 5 deploys, removes the rest)
3. Disable sudo config/deploy.rb: :use_sudo false
4. Colorize Capistrano $ gem install capistrano_colors In config/deploy.rb: require 'capistrano_colors'
Thank you