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: 
- add to your Gemfilenext lines into development group:
    gem 'oz_capistrano_rsync_with_remote_cache'
    gem 'capistrano-deploy-scm-passthrough'
- and change deploy.rb like this:
    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-filtershould looks like:
     #rsync will ignore files in this list
    config/database.yml
    config/application.yml
    log/*
    public/*
    tmp/*
Posted by konjoot to wiki (2014-01-06 15:42)