From 9e228085dff660b92314cde7053d1b020a9efef8 Mon Sep 17 00:00:00 2001 From: benni Date: Sun, 30 Dec 2012 14:47:02 +0100 Subject: [PATCH] Added rake tasks for restarting resque workers. --- lib/tasks/resque.rake | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/lib/tasks/resque.rake b/lib/tasks/resque.rake index 4c093c8a..bf577602 100644 --- a/lib/tasks/resque.rake +++ b/lib/tasks/resque.rake @@ -1,3 +1,41 @@ require "resque/tasks" -task "resque:setup" => :environment +def run_worker(queue, count = 1) + puts "Starting #{count} worker(s) with QUEUE: #{queue}" + ops = {:pgroup => true, :err => ["log/resque_worker_foodsoft_notifier.log", "a"], + :out => ["log/resque_worker_foodsoft_notifier.log", "a"]} + env_vars = {"QUEUE" => queue.to_s, "PIDFILE" => "tmp/pids/resque_worker_foodsoft_notifier.pid", "VERBOSE" => "1"} + count.times { + ## Using Kernel.spawn and Process.detach because regular system() call would + ## cause the processes to quit when capistrano finishes + pid = spawn(env_vars, "rake resque:work", ops) + Process.detach(pid) + } +end + +namespace :resque do + task :setup => :environment + + desc "Restart running workers" + task :restart_workers do + Rake::Task['resque:stop_workers'].invoke + Rake::Task['resque:start_workers'].invoke + end + + desc "Quit running workers" + task :stop_workers do + pids = File.read('tmp/pids/resque_worker_foodsoft_notifier.pid').split("\n") + if pids.empty? + puts "No workers to kill" + else + syscmd = "kill -s QUIT #{pids.join(' ')}" + puts "Running syscmd: #{syscmd}" + system(syscmd) + end + end + + desc "Start workers" + task :start_workers do + run_worker("foodsoft_notifier") + end +end