Skip to content

Instantly share code, notes, and snippets.

@ivanvanderbyl
Created September 5, 2012 05:51
Show Gist options
  • Select an option

  • Save ivanvanderbyl/3631247 to your computer and use it in GitHub Desktop.

Select an option

Save ivanvanderbyl/3631247 to your computer and use it in GitHub Desktop.
load 'deploy/assets'
set :bundle_roles, [:app] #{:except => {:no_release => true}} # e.g. [:app, :batch]
require 'bundler/capistrano'
set :application, "my_app"
set :repository, "[email protected]:myname/#{application}.git"
set :user, 'deploy'
set :use_sudo, false
set :scm, :git
set :branch, "master"
set :deploy_via, :remote_cache
set :git_shallow_clone, 1
set :deploy_to, "~/#{application}"
set :keep_releases, 3
set :stages, %w(production staging)
set :default_stage, "staging"
require 'capistrano/ext/multistage'
set :application_env, 'production'
set :bundle_gemfile, "Gemfile"
set :bundle_dir, File.join(fetch(:shared_path), 'bundle')
set :bundle_flags, "--deployment --quiet"
set :normalize_asset_timestamps, false
require 'capistrano-unicorn'
before 'deploy:finalize_update', 'deploy:symlink_sockets', 'deploy:symlink_configs'
after 'deploy', 'deploy:cleanup'
before 'deploy', 'set_start_time'
after 'deploy', 'log_duration'
after 'deploy:setup', 'deploy:setup_unicorn_dirs'
namespace :deploy do
task :symlink_sockets, :roles => :web, :except => { :no_release => true } do
run <<-CMD
mkdir -p #{latest_release}/tmp &&
rm -rf #{latest_release}/tmp/sockets &&
ln -s #{shared_path}/sockets #{latest_release}/tmp/sockets &&
rm -rf #{latest_release}/tmp/pids &&
ln -s #{shared_path}/pids #{latest_release}/tmp/pids
CMD
end
task :symlink_configs do
run <<-CMD
if [ -f #{shared_path}/config/backend.yml ]; then
rm -f #{latest_release}/config/backend.yml &&
ln -s #{shared_path}/config/backend.yml #{latest_release}/config/backend.yml ;
fi
CMD
end
task :setup_unicorn_dirs, :except => { :no_release => true } do
dirs = ["#{shared_path}/sockets", "#{shared_path}/pids", "#{shared_path}/config"]
dirs += shared_children.map { |d| File.join(shared_path, d.split('/').last) }
run "#{try_sudo} mkdir -p #{dirs.join(' ')}"
run "#{try_sudo} chmod g+w #{dirs.join(' ')}" if fetch(:group_writable, true)
end
end
task :set_start_time do
set :started_at, Time.now.to_f
end
task :log_duration do
duration = (Time.now.to_f - started_at)
logger.info "Deploy completed in %1.4f seconds" % duration
end
role :web, "app1.somewhere"
role :app, "app1.somewhere"
role :db, "app1.somewhere", :primary => true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment