Skip to content

Instantly share code, notes, and snippets.

@Sutto
Created May 11, 2012 11:31
Show Gist options
  • Save Sutto/2659110 to your computer and use it in GitHub Desktop.
Save Sutto/2659110 to your computer and use it in GitHub Desktop.
# You can change the number per env.
set(:resque_workers) { 2 }
# Make sure you have a server with the role worker.
namespace :resque do
desc "Stops resque workers"
task :stop, :roles => :worker do
resque :stop
end
desc "Starts resque workers"
task :start, :roles => :worker do
resque :start
end
desc "Restarts resque workers"
task :restart, :roles => :worker do
resque :restart
end
desc "Shows the status of the given resque server"
task :status, :roles => :worker do
resque :status
end
def resque(command)
# Only run the command when Resque is enabled.
return unless resque_enabled
run "cd #{current_path} && RAILS_ENV=#{rails_env} WORKERS=#{resque_workers} bundle exec ./script/resque #{command.to_s}"
end
end
#!/usr/bin/env ruby
ENV['RAILS_ENV'] ||= 'development'
require File.expand_path('../../config/environment', __FILE__)
require 'daemon_spawn'
Rovi::Base.persistent true, 'rovi-base'
Rovi::Base.logging_enabled = true
class ResqueWorkerDaemon < DaemonSpawn::Base
def start(args)
redirect_log!
@worker = Resque::Worker.new(ENV['RESQUE_QUEUE'] || '*') # Specify which queues this worker will process
puts "Starting up resque worker: #{@worker.to_s}"
@worker.verbose = 1 # Logging - can also set vverbose for 'very verbose'
@worker.work
end
def stop
@worker.try(:shutdown)
end
def redirect_log!
config = Rails.application.config
logger = ActiveSupport::BufferedLogger.new(STDOUT)
logger.level = ActiveSupport::BufferedLogger.const_get(config.log_level.to_s.upcase)
logger.auto_flushing = true
Rails.logger = logger
# Reopen mongos logger correctly.
MongoMapper.connection.instance_variable_set :@logger, Rails.logger
end
end
logs = Rails.root.join("log", "resque_workers.#{Rails.env}.log").to_s
pids = Rails.root.join('tmp', 'pids', "resque_workers.#{Rails.env}.pid").to_s
ResqueWorkerDaemon.spawn!({
:processes => (ENV['WORKERS'] || 1).to_i,
:log_file => logs,
:pid_file => pids,
:sync_log => true,
:working_dir => Rails.root,
:singleton => true
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment