如何杀死Heroku上的resque工作者?

时间:2011-07-24 15:25:51

标签: ruby-on-rails ruby-on-rails-3 redis resque

我正在使用本指南设置Resis with Redis http://blog.redistogo.com/2010/07/26/resque-with-redis-to-go/

我已经完成了所有设置,当我把它放在我的resque队列中时。它是在heroku上,然后我运行

heroku rake resque:work QUEUE=*
(in /app)
Starting the New Relic Agent.
Installed New Relic Browser Monitoring middleware
Connected to NewRelic Service at collector-1.newrelic.com:80
^C
[canceled]

然后完成工作,但现在工人仍然在那里。我现在如何删除/杀死工人?

我目前有这个0 of 4 Workers Working我希望这样做,以便在队列中的任务完成后,工作人员只是删除自己。我将如何继续这样做,或者我需要调用另一个heroku终端命令。

还有resque工作人员在heroku上花钱吗?我只想这样做,我可以在我的resque队列中手动触发任务。我不需要它自动完成它。

4 个答案:

答案 0 :(得分:9)

我知道这是一个老问题,但您可以从控制台执行此操作:

$ heroku run console
irb(main):001:0> Resque.working[0].id
=> "09ec127d-bb90-4629-a6f2-bb2610885ab5:62:*"
irb(main):002:0> Resque.working.length
=> 28
irb(main):003:0> Resque.remove_worker("09ec127d-bb90-4629-a6f2-bb2610885ab5:62:*")
=> 0
irb(main):004:0> Resque.working.length
=> 27
irb(main):005:0> 

我还没有尝试过,但还有一个gem for doing this manually,听起来你想要自动化它。

答案 1 :(得分:3)

要与heroku worker集成,您需要实现一个名为jobs:work的rake任务。要使用resque,您需要将以下任务添加到rake文件(取自http://blog.redistogo.com/2010/07/26/resque-with-redis-to-go/):

require 'resque/tasks'

task "resque:setup" => :environment do
  ENV['QUEUE'] = '*'
end

desc "Alias for resque:work (To run workers on Heroku)"
task "jobs:work" => "resque:work"

要在heroku上启动单个工作人员:

? heroku workers 1

要关闭后台工作人员,请执行以下操作:

? heroku workers 0

要使用5名工人,请执行以下操作:

? heroku workers 5

Heroku会为您运行的每个工人向您收取第二个费用。如果您登录heroku,您将能够在应用的资源页面上查看当前工作人员的费用。

答案 2 :(得分:1)

在Heroku Cedar Stack上,这很简单,这是将工作人员数量更改为n您将运行此命令的命令,它会杀死/创建工作人员以实现n

heroku ps:scale worker=n --app your-app-name

有关详细信息,请参阅Heroku上的这篇文章:https://devcenter.heroku.com/articles/scaling

答案 3 :(得分:0)

你试过HireFire吗?

它专门用于扩展Heroku上的Resque(和Delayed Job)工作人员。