Capistrano deploy recipes
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=
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