Heroku雪松堆栈上的Resque工作者终止后,工作者计数仍然存在

时间:2011-08-11 04:46:50

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

我已成功在heroku雪松堆上运行resque并将接口安装在rails上。

当我开始工作时,一切正常。工人处理工作。但是,当我杀死工人时,Resque仍然认为工人可以使用。当我开始另一个工人时,它认为有2个工人,但事实上只有一个工人。

我还注意到这里http://devcenter.heroku.com/articles/ps表示heroku在杀死一个worker时发送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环境吗?

这是我的佣金任务lib/tasks/resque.rake

require "resque/tasks"

task "resque:setup"  => :environment

2 个答案:

答案 0 :(得分:5)

我刚刚发现问题,在rake任务上传递ENV时会发生这种情况。比如通过QUEUE='*'

这个问题更完整 https://github.com/defunkt/resque/issues/319#issuecomment-1789239

问题仍然存在于https://github.com/defunkt/resque/issues/368

任何我的临时补丁,使resque只运行所有que。

https://github.com/yulrizka/resque

答案 1 :(得分:2)

ahmy,

根据您的解决方案,我提出了一个不涉及分配resque的问题。

我把它放在resque.rake

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

并将其放在Profile

worker:  bundle exec rake resque:work

并将其放在Gemfile

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