Heroku cedar平台上的Resque工作者终止后仍存在工作者数量

5
我已经成功地在Heroku Cedar Stack上运行了Resque,并在Rails上挂载了接口。
当我启动工作程序时,一切都正常。工作者处理工作。但是当我杀死工作者时,Resque仍然认为该工作者可用。当我启动另一个工作者时,它会认为有两个工作者,但实际上只有一个正在运行。
我还从这里http://devcenter.heroku.com/articles/ps注意到,当杀死一个工作者时,Heroku发送SIGTERM信号,如果不能终止,则发送SIGKILL信号。
这是我的工作者日志。
2011-08-11T02:32:45+00:00 heroku[worker.1]: Starting process with command `bundle exec rake resque:work QUEUE=*`
2011-08-11T02:32:46+00:00 heroku[worker.1]: State changed from starting to up
2011-08-11T02:33:58+00:00 heroku[worker.1]: State changed from up to stopping
2011-08-11T02:34:00+00:00 heroku[worker.1]: Stopping process with SIGTERM
2011-08-11T02:34:09+00:00 heroku[worker.1]: Error R12 (Exit timeout) -> Process failed to exit within 10 seconds of SIGTERM
2011-08-11T02:34:09+00:00 heroku[worker.1]: Stopping process with SIGKILL
2011-08-11T02:34:11+00:00 heroku[worker.1]: Process exited

我看到我的进程需要超过10秒才能终止。这是否与在工作任务中加载Rails环境有关?
这是我的rake任务 lib/tasks/resque.rake
require "resque/tasks"

task "resque:setup"  => :environment
2个回答

5

您可以通过连接到 Redis 并运行 .del('workers') 来清理掉控制台上的工作进程。 - Bob

2

您好,根据您的解决方案,我提出了一个不需要分叉resque的解决方案。

我将其放在resque.rake中:

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

并将此放入个人资料中:

worker:  bundle exec rake resque:work

并将其放入Gemfile中:

gem 'resque', :git => 'git://github.com/defunkt/resque.git'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接