# Copyright (c) 2010-2011, Diaspora Inc. This file is # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. set :config_yaml, YAML.load_file(File.dirname(__FILE__) + '/deploy_config.yml') require './config/cap_colors' require 'bundler/capistrano' require './config/boot' require 'airbrake/capistrano' set :bundle_dir, '' set :stages, ['production', 'staging'] set :default_stage, 'staging' require 'capistrano/ext/multistage' set :application, 'diaspora' set :scm, :git set :use_sudo, false set :scm_verbose, true set :repository_cache, "remote_cache" set :deploy_via, :checkout set :bundle_without, [:development, :test, :heroku] # Figure out the name of the current local branch def current_git_branch branch = `git symbolic-ref HEAD 2> /dev/null`.strip.gsub(/^refs\/heads\//, '') logger.info "Deploying branch #{branch}" branch end namespace :deploy do task :symlink_config_files do run "ln -s -f #{shared_path}/config/database.yml #{current_path}/config/database.yml" run "ln -s -f #{shared_path}/config/application.yml #{current_path}/config/application.yml" run "ln -s -f #{shared_path}/config/oauth_keys.yml #{current_path}/config/oauth_keys.yml" end task :symlink_cookie_secret do run "ln -s -f #{shared_path}/config/initializers/secret_token.rb #{current_path}/config/initializers/secret_token.rb" end task :bundle_static_assets do run "cd #{current_path} && bundle exec rake assets:precompile" end task :restart do thins = capture_svstat "/service/thin*" matches = thins.split("\n").inject([]) do |list, line| m = line.match(/(thin_\d+):/) list << m.captures[0] unless m.nil? end matches.each_with_index do |thin, index| unless index == 0 puts "sleeping for 20 seconds" sleep(20) end svc "-t /service/#{thin}" end svc "-t /service/resque_worker*" end task :kill do svc "-k /service/thin*" svc "-k /service/resque_worker*" end task :start do svc "-u /service/thin*" svc "-u /service/resque_worker*" end task :stop do svc "-d /service/thin*" svc "-d /service/resque_worker*" end desc 'Copy resque-web assets to public folder' task :copy_resque_assets do target = "#{release_path}/public/resque-jobs" run "cp -r `cd #{release_path} && bundle show resque`/lib/resque/server/public #{target}" end end before 'deploy:update' do set :branch, current_git_branch end after 'deploy:symlink' do deploy.symlink_config_files deploy.symlink_cookie_secret deploy.bundle_static_assets deploy.copy_resque_assets end def maybe_sudo(cmd) "#{svc_sudo ? sudo : ''} #{cmd}" end def svc(opts) run(maybe_sudo("svc #{opts}")) end def capture_svstat(opts) capture(maybe_sudo("svstat #{opts}")) end