lib/caploy/recipes/unicorn.rb in caploy-0.1.12 vs lib/caploy/recipes/unicorn.rb in caploy-0.2.0

- old
+ new

@@ -1,150 +1,136 @@ -require 'capistrano' -require 'capistrano/version' +Capistrano::Configuration.instance.load do -module Unicorn - class CapistranoIntegration - def self.load_into(capistrano_config) - capistrano_config.load do + # Check if remote file exists + # + def remote_file_exists?(full_path) + 'true' == capture("if [ -e #{full_path} ]; then echo 'true'; fi").strip + end - # Check if remote file exists - # - def remote_file_exists?(full_path) - 'true' == capture("if [ -e #{full_path} ]; then echo 'true'; fi").strip - end + # Check if process is running + # + def process_exists?(pid_file) + capture("ps -p $(cat #{pid_file}) ; true").strip.split("\n").size == 2 + end - # Check if process is running - # - def process_exists?(pid_file) - capture("ps -p $(cat #{pid_file}) ; true").strip.split("\n").size == 2 + # Set unicorn vars + # + _cset :app_env, fetch(:rails_env, 'production') + _cset :unicorn_bin, "unicorn" + _cset :unicorn_pid, "#{fetch(:current_path)}/tmp/pids/unicorn.pid" + _cset :unicorn_env, app_env + _cset :unicorn_std_log, "log/unicorn.stderr.log" + _cset :unicorn_err_log, "log/unicorn.stderr.log" + _cset :unicorn_worker_processes, 2 + _cset :unicorn_timeout, 30 + _cset :unicorn_listen_backlog, 2048 + _cset :sidekiq_redis_url, nil + _cset :unicorn_hard_restart, false + + namespace :unicorn do + desc 'Start Unicorn' + task :start, :roles => :app, :except => {:no_release => true} do + if remote_file_exists?(unicorn_pid) + if process_exists?(unicorn_pid) + logger.important("Unicorn is already running!", "Unicorn") + next + else + run "rm #{unicorn_pid}" end + end - # Set unicorn vars - # - _cset(:app_env, (fetch(:rails_env) rescue 'production')) - _cset :unicorn_bin, "bundle exec unicorn" - _cset(:unicorn_pid, "#{fetch(:current_path)}/tmp/pids/unicorn.pid") - _cset(:unicorn_env, (fetch(:app_env))) - _cset :unicorn_std_log, "log/unicorn.stderr.log" - _cset :unicorn_err_log, "log/unicorn.stderr.log" - _cset :unicorn_worker_processes, 2 - _cset :unicorn_timeout, 30 - _cset :unicorn_listen_backlog, 2048 - _cset :sidekiq_redis_count, 1 - _cset :sidekiq_redis_url, nil - _cset :unicorn_hard_restart, false + config_path = "#{current_path}/config/unicorn/#{unicorn_env}.rb" + if remote_file_exists?(config_path) + logger.important("Starting...", "Unicorn - #{bundle_cmd} ") + run "cd #{current_path} && #{bundle_cmd} exec #{unicorn_bin} -c #{config_path} -E #{app_env} -D" + else + logger.important("Config file for \"#{unicorn_env}\" environment was not found at \"#{config_path}\"", "Unicorn") + end + end - namespace :unicorn do - desc 'Start Unicorn' - task :start, :roles => :app, :except => {:no_release => true} do - if remote_file_exists?(unicorn_pid) - if process_exists?(unicorn_pid) - logger.important("Unicorn is already running!", "Unicorn") - next - else - run "rm #{unicorn_pid}" - end - end + desc 'Stop Unicorn' + task :stop, :roles => :app, :except => {:no_release => true} do + if remote_file_exists?(unicorn_pid) + if process_exists?(unicorn_pid) + logger.important("Stopping...", "Unicorn") + run "#{try_sudo} kill `cat #{unicorn_pid}`" + else + run "rm #{unicorn_pid}" + logger.important("Unicorn is not running.", "Unicorn") + end + else + logger.important("No PIDs found. Check if unicorn is running.", "Unicorn") + end + end - config_path = "#{current_path}/config/unicorn/#{unicorn_env}.rb" - if remote_file_exists?(config_path) - logger.important("Starting...", "Unicorn") - run "cd #{current_path} && BUNDLE_GEMFILE=#{current_path}/Gemfile bundle exec #{unicorn_bin} -c #{config_path} -E #{app_env} -D" - else - logger.important("Config file for \"#{unicorn_env}\" environment was not found at \"#{config_path}\"", "Unicorn") - end - end - - desc 'Stop Unicorn' - task :stop, :roles => :app, :except => {:no_release => true} do - if remote_file_exists?(unicorn_pid) - if process_exists?(unicorn_pid) - logger.important("Stopping...", "Unicorn") - run "#{try_sudo} kill `cat #{unicorn_pid}`" - else - run "rm #{unicorn_pid}" - logger.important("Unicorn is not running.", "Unicorn") - end - else - logger.important("No PIDs found. Check if unicorn is running.", "Unicorn") - end - end - - desc 'Unicorn graceful shutdown' - task :graceful_stop, :roles => :app, :except => {:no_release => true} do - if remote_file_exists?(unicorn_pid) - if process_exists?(unicorn_pid) - logger.important("Stopping...", "Unicorn") - run "#{try_sudo} kill -s QUIT `cat #{unicorn_pid}`" - else - run "rm #{unicorn_pid}" - logger.important("Unicorn is not running.", "Unicorn") - end - else - logger.important("No PIDs found. Check if unicorn is running.", "Unicorn") - end - end - - desc 'Reload Unicorn' - task :reload, :roles => :app, :except => {:no_release => true} do - if remote_file_exists?(unicorn_pid) - logger.important("Stopping...", "Unicorn") - if unicorn_hard_restart - unicorn.stop - sleep(2) - unicorn.start - else - run "#{try_sudo} kill -s USR2 `cat #{unicorn_pid}`" - end - else - logger.important("No PIDs found. Starting Unicorn server...", "Unicorn") - config_path = "#{current_path}/config/unicorn/#{unicorn_env}.rb" - if remote_file_exists?(config_path) - run "cd #{current_path} && BUNDLE_GEMFILE=#{current_path}/Gemfile bundle exec #{unicorn_bin} -c #{config_path} -E #{app_env} -D" - else - logger.important("Config file for \"#{unicorn_env}\" environment was not found at \"#{config_path}\"", "Unicorn") - end - end - end - - desc "Setup unicorn" - task :setup, :roles => :app, :except => {:no_release => true} do - run "mkdir -p \"#{shared_path}/config/unicorn\"" - config_path = "#{shared_path}/config/unicorn/#{rails_env}.rb" - template_path = File.expand_path('../../templates/unicorn/unicorn.rb.erb', __FILE__) - vars = { - 'application' => application, - 'current_path' => current_path, - 'unicorn_pid' => unicorn_pid, - 'unicorn_std_log' => unicorn_std_log, - 'unicorn_err_log' => unicorn_err_log, - 'stage' => stage, - 'unicorn_listen_backlog' => unicorn_listen_backlog, - 'unicorn_worker_processes' => unicorn_worker_processes, - 'unicorn_timeout' => unicorn_timeout, - 'sidekiq_redis_count' => sidekiq_redis_count, - 'sidekiq_redis_url' => sidekiq_redis_url - } - put(render_erb_template(template_path, vars), config_path) - end + desc 'Unicorn graceful shutdown' + task :graceful_stop, :roles => :app, :except => {:no_release => true} do + if remote_file_exists?(unicorn_pid) + if process_exists?(unicorn_pid) + logger.important("Stopping...", "Unicorn") + run "#{try_sudo} kill -s QUIT `cat #{unicorn_pid}`" + else + run "rm #{unicorn_pid}" + logger.important("Unicorn is not running.", "Unicorn") end + else + logger.important("No PIDs found. Check if unicorn is running.", "Unicorn") + end + end - after :"deploy:restart", :"unicorn:reload" - after :"deploy:setup", :"unicorn:setup"; - - namespace :deploy do - task :start, :roles => :app do - unicorn.start - end - - task :stop, :roles => :app do - unicorn.stop - end + desc 'Reload Unicorn' + task :reload, :roles => :app, :except => {:no_release => true} do + if remote_file_exists?(unicorn_pid) + logger.important("Stopping...", "Unicorn") + if unicorn_hard_restart + unicorn.stop + sleep(2) + unicorn.start + else + run "#{try_sudo} kill -s USR2 `cat #{unicorn_pid}`" end + else + logger.important("No PIDs found. Starting Unicorn server...", "Unicorn") + config_path = "#{current_path}/config/unicorn/#{unicorn_env}.rb" + if remote_file_exists?(config_path) + run "cd #{current_path} && #{bundle_cmd} exec #{unicorn_bin} -c #{config_path} -E #{app_env} -D" + else + logger.important("Config file for \"#{unicorn_env}\" environment was not found at \"#{config_path}\"", "Unicorn") + end end end + + desc "Setup unicorn" + task :setup, :roles => :app, :except => {:no_release => true} do + run "mkdir -p \"#{shared_path}/config/unicorn\"" + config_path = "#{shared_path}/config/unicorn/#{rails_env}.rb" + template_path = File.expand_path('../../templates/unicorn/unicorn.rb.erb', __FILE__) + vars = { + 'application' => application, + 'current_path' => current_path, + 'unicorn_pid' => unicorn_pid, + 'unicorn_std_log' => unicorn_std_log, + 'unicorn_err_log' => unicorn_err_log, + 'stage' => stage, + 'unicorn_listen_backlog' => unicorn_listen_backlog, + 'unicorn_worker_processes' => unicorn_worker_processes, + 'unicorn_timeout' => unicorn_timeout, + 'sidekiq_redis_count' => sidekiq_redis_count, + 'sidekiq_redis_url' => sidekiq_redis_url + } + put(render_erb_template(template_path, vars), config_path) + end end -end -if Capistrano::Configuration.instance - Unicorn::CapistranoIntegration.load_into(Capistrano::Configuration.instance) + after :"deploy:restart", :"unicorn:reload" + after :"deploy:setup", :"unicorn:setup"; + + namespace :deploy do + task :start, :roles => :app do + unicorn.start + end + + task :stop, :roles => :app do + unicorn.stop + end + end end