All examples here for deploy RoR application with unicorn, staging machine (where we deploys) available via ssh by ssh_key.
Deploy via remote_cache:
require 'rvm/capistrano'
require 'bundler/capistrano'
set :application, '_proj_'
set :rails_env, 'production'
set :domain, '_user@your_deploy_domain_'
set :deploy_to, "_path_to_#{application}"
set :use_sudo, false
set :unicorn_conf, "#{deploy_to}/current/config/unicorn.rb"
set :unicorn_pid, "#{deploy_to}/shared/pids/unicorn.pid"
set :rvm_ruby_string, '_2.0.0@proj_'
set :scm, :git
set :repository, '_git@your_proj_repo_'
ssh_options[:forward_agent] = true
ssh_options[:keys] = File.join(ENV['HOME'], '.ssh', '_ssh_key_for_staging_machine.pem_')
set :branch, 'master'
set :deploy_via, :remote_cache
set :bundle_gemfile, 'Gemfile'
set :rake_file, "#{deploy_to}/current/Rakefile"
role :web, domain
role :app, domain
role :db, domain, :primary => true
before 'deploy:setup', 'rvm:install_rvm', 'rvm:install_ruby'
before 'deploy:assets:update_asset_mtimes', :roles => :app do
run "rm -f #{current_release}/config/database.yml"
run "rm -f #{current_release}/config/application.yml"
run "ln -s #{deploy_to}/shared/config/database.yml #{current_release}/config/database.yml"
run "ln -s #{deploy_to}/shared/config/application.yml #{current_release}/config/application.yml"
end
before 'deploy:db:populate', 'deploy:stop'
after 'deploy:db:populate', 'deploy:start'
namespace :deploy do
namespace :db do
task :populate do
puts 'run db:populate'
run "cd #{current_release}; RAILS_ENV=#{rails_env} /usr/bin/env rake db:populate -f #{rake_file}"
end
end
task :restart do
run "cd #{current_release}; if [ -f #{unicorn_pid} ] && [ -e /proc/$(cat #{unicorn_pid}) ]; then kill -USR2 `cat #{unicorn_pid}`; else cd #{deploy_to}/current && bundle exec unicorn_rails -c #{unicorn_conf} -E #{rails_env} -D; fi"
end
task :start do
run "cd #{current_release}; bundle exec unicorn_rails -c #{unicorn_conf} -E #{rails_env} -D"
end
task :stop do
run "cd #{current_release}; if [ -f #{unicorn_pid} ] && [ -e /proc/$(cat #{unicorn_pid}) ]; then kill -QUIT `cat #{unicorn_pid}`; fi"
end
end
Deploy from local folder via rsync:
Gemfile
next lines into development group: gem 'oz_capistrano_rsync_with_remote_cache'
gem 'capistrano-deploy-scm-passthrough'
require 'rvm/capistrano'
require 'bundler/capistrano'
set :application, '_proj_'
set :rails_env, 'production'
set :domain, '_user@your_deploy_domain_'
set :deploy_to, "_path_to_#{application}"
set :use_sudo, false
set :unicorn_conf, "#{deploy_to}/current/config/unicorn.rb"
set :unicorn_pid, "#{deploy_to}/shared/pids/unicorn.pid"
set :rvm_ruby_string, '_2.0.0@proj_'
set :scm, :passthrough
set :repository, '.'
set :user, '_user_'
ssh_options[:forward_agent] = true
ssh_options[:keys] = File.join(ENV['HOME'], '.ssh', '_ssh_key_for_staging_machine.pem_')
set :rsync_options, '-azr --exclude-from=.rsync-filter --delete --delete-excluded'
set :deploy_via, :rsync_with_remote_cache
set :bundle_gemfile, 'Gemfile'
set :rake_file, "#{deploy_to}/current/Rakefile"
set :local_cache, '.'
set :revision, ENV['GIT_COMMIT'] || ENV['SVN_REVISION'] || Time.now
role :web, domain
role :app, domain
role :db, domain, :primary => true
before 'deploy:setup', 'rvm:install_rvm', 'rvm:install_ruby'
before 'deploy:assets:update_asset_mtimes', :roles => :app do
run "rm -f #{current_release}/config/database.yml"
run "rm -f #{current_release}/config/application.yml"
run "ln -s #{deploy_to}/shared/config/database.yml #{current_release}/config/database.yml"
run "ln -s #{deploy_to}/shared/config/application.yml #{current_release}/config/application.yml"
end
before 'deploy:db:populate', 'deploy:stop'
after 'deploy:db:populate', 'deploy:start'
namespace :deploy do
namespace :db do
task :populate do
puts 'run db:populate'
run "cd #{current_release}; RAILS_ENV=#{rails_env} /usr/bin/env rake db:populate -f #{rake_file}"
end
end
task :restart do
run "cd #{current_release}; if [ -f #{unicorn_pid} ] && [ -e /proc/$(cat #{unicorn_pid}) ]; then kill -USR2 `cat #{unicorn_pid}`; else cd #{deploy_to}/current && bundle exec unicorn_rails -c #{unicorn_conf} -E #{rails_env} -D; fi"
end
task :start do
run "cd #{current_release}; bundle exec unicorn_rails -c #{unicorn_conf} -E #{rails_env} -D"
end
task :stop do
run "cd #{current_release}; if [ -f #{unicorn_pid} ] && [ -e /proc/$(cat #{unicorn_pid}) ]; then kill -QUIT `cat #{unicorn_pid}`; fi"
end
end
.rsync-filter
should looks like:
#rsync will ignore files in this list
config/database.yml
config/application.yml
log/*
public/*
tmp/*