Skip to content

Instantly share code, notes, and snippets.

@mikeabiezzi
Created June 25, 2012 00:44
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mikeabiezzi/2985749 to your computer and use it in GitHub Desktop.
Save mikeabiezzi/2985749 to your computer and use it in GitHub Desktop.
Patch to Resque that stops workers from picking up a new job when Resque is "paused"
irb(main):001:0> Resque.enqueue Job, 1, 9
=> true
irb(main):002:0> Resque.enqueue Job, 10, 19
=> true
irb(main):003:0> Resque.enqueue Job, 20, 29
=> true
irb(main):004:0> Resque.enqueue Job, 30, 39
=> true
app[worker.1]: *** got: (Job{jobs} | Job | [1, 9])
heroku[run.2]: Process exited with status 0
app[worker.1]: Processed 1
heroku[run.2]: State changed from up to complete
app[worker.1]: Processed 2
app[worker.1]: Processed 3
app[worker.1]: Processed 4
app[worker.1]: Processed 5
app[worker.1]: Processed 6
app[worker.1]: Processed 7
app[worker.1]: Processed 8
app[worker.1]: Processed 9
app[worker.1]: *** done: (Job{jobs} | Job | [1, 9])
app[worker.1]: *** got: (Job{jobs} | Job | [10, 19])
app[worker.1]: Processed 10
app[worker.1]: Processed 11
app[worker.1]: Processed 12
heroku[run.2]: State changed from created to starting
app[worker.1]: Processed 13
app[worker.1]: Processed 14
app[worker.1]: Processed 15
heroku[run.2]: Awaiting client
heroku[run.2]: Starting process `bundle exec rake resque:pause`
heroku[run.2]: State changed from starting to up
app[worker.1]: Processed 16
app[worker.1]: Processed 17
app[worker.1]: Processed 18
app[worker.1]: Processed 19
app[worker.1]: *** done: (Job{jobs} | Job | [10, 19])
app[worker.1]: *** got: (Job{jobs} | Job | [20, 29])
app[worker.1]: Processed 20
app[worker.1]: Processed 21
heroku[run.2]: Process exited with status 0
heroku[run.2]: State changed from up to complete
app[worker.1]: Processed 22
app[worker.1]: Processed 23
app[worker.1]: Processed 24
app[worker.1]: Processed 25
app[worker.1]: Processed 26
app[worker.1]: Processed 27
app[worker.1]: Processed 28
app[worker.1]: Processed 29
app[worker.1]: *** done: (Job{jobs} | Job | [20, 29])
heroku[run.2]: State changed from created to starting
heroku[run.2]: Awaiting client
heroku[run.2]: Starting process `bundle exec rake resque:resume`
heroku[run.2]: State changed from starting to up
app[worker.1]: *** got: (Job{jobs} | Job | [30, 39])
heroku[run.2]: Process exited with status 0
heroku[run.2]: State changed from up to complete
app[worker.1]: Processed 30
app[worker.1]: Processed 31
app[worker.1]: Processed 32
app[worker.1]: Processed 33
app[worker.1]: Processed 34
task "resque:pause" => :environment do
Resque.redis.set "resque_paused", true
puts "Resque paused."
end
task "resque:resume" => :environment do
Resque.redis.set "resque_paused", false
puts "Resque resumed."
end
task "resque:paused" => :environment do
paused = Resque.redis.get("resque_paused") == 'true'
puts "Resque paused: #{paused}"
end
module Resque
class Worker
alias :original_reserve :reserve
def reserve( *args )
unless Resque.redis.get("resque_paused") == "true"
self.original_reserve *args
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment