Fast git-based deploy process 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:
Then when you push some changes to git repository simply run:
Or if you have migrations (
:rails recipe should be used in Capfile:
To look through the changes to be deployed:
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
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.
And add callback to run
bundle install on each deploy:
after 'deploy:update', 'bundle:install'
Add callback to precompile assets after update:
after 'deploy:update', 'deploy:assets:precompile'
It will automatically do
touch tmp/restart.txt on each deploy.
You can setup callback to reload unicorn after deploy is done:
after 'deploy:restart', 'unicorn:reload'
To automatically update crontab file:
after 'deploy:restart', 'whenever:update_crontab'
You can also clear crontab file with command: