Capistrano deploy recipes TravisCI Gemnasium

Inspired by https://github.com/blog/470-deployment-script-spring-cleaning.

Quickstart with Git and Rails

Add this line to your application's Gemfile:

gem 'capistrano-deploy', :group => :development, :require => false

Create a file named Capfile in your project root directory:

require 'capistrano-deploy'
use_recipes :git, :bundle, :rails

server 'server name or ip address', :web, :app, :db, :primary => true
set :user, 'user for deploy'
set :deploy_to, '/deploy/to/path'
set :repository, 'your git repository'

after 'deploy:update', 'bundle:install'

And then execute:

bundle

To setup:

cap deploy:setup

Then when you push some changes to git repository simply run:

cap deploy

Or if you have migrations:

cap deploy:migrations

To look through the changes to be deployed:

cap deploy:pending

If you want to update to a specific commit (e.g. to rollback):

cap deploy COMMIT=foobarbaz

Note: it may be required to run bundle exec cap ... instead of cap ....

Multistage

Basic usage:

use_recipe :multistage

set :default_stage, :development

stage :development do
  ...
end

stage :production do
  ...
end

You can also pass options that allow setting variables and default stage:

stage :development, :branch => :develop, :default => true
stage :production,  :branch => :master

When branches are specified for stages and git recipe is used it will automatically select stage based on current local branch.

Bundle

Use recipe:

use_recipe :bundle

And add callback to run bundle install on each deploy:

after 'deploy:update', 'bundle:install'

Rails Assets

Use recipe:

use_recipe :rails_assets

Add callback to precompile assets after update:

after 'deploy:update', 'deploy:assets:precompile'

Passenger

Use recipe:

use_recipe :passenger

It will automatically do touch tmp/restart.txt on each deploy.

Unicorn

Use recipe:

use_recipe :unicorn

You can setup callback to reload unicorn after deploy is done:

after 'deploy:restart', 'unicorn:reload'

Whenever

Use recipe:

use_recipe :whenever

To automatically update crontab file:

after 'deploy:restart', 'whenever:update_crontab'

You can also clear crontab file with command:

cap whenever:clear_crontab