默认的resque web界面说我有7个工作中的5个工作.我不明白这是怎么回事.
我是英雄,所以当我的电动势重启时,它应该旋转现有的动力和工人,然后旋转新的.所以,我假设这些工人中有一些是陈旧的,但是他们认为有更多的工作人员比那里应该有更多的工作(应该只有1个)
我如何检查这些是否陈旧或死亡?我期望只有1名工作人员工作.
最终,我希望我会做这个SO帖子的所有内容:How do I clear stuck/stale Resque workers?,但首先我想知道如何确定一个工人是否应该被删除…我不想盲目地注销工人…
道歉,如果这是一个明显的问题.我是新来的
谢谢!
解决方法
确定工作人员实际工作的唯一方法是检查工作人员的主机.在Heroku重新启动后,这台机器不再存在,所以如果工作人员没有注销自己,Resque会相信它仍然工作. Resque工作人员的分散性意味着你不能轻易地检查工人的实际状况.当每个工作人员启动时,它会自动注册redis.当工作人员拿起工作并开始工作时,再次将其注册为redis.当你像这样迭代时:
Resque.workers.each { |w| w.working? }
您正在从redis中提取工人名单,并检查这些工作人员的最后注册状态.它实际上并不查询工作人员本身.
reque-web显示中的主机名将与您在heroku日志输出中看到的名称相匹配,这是查看实际运行的不太好的方式.我希望可以使用从平台API获得的dyno ID自动化,但是它们与主机名不匹配.
确保您正确地处理如this document中指定的Resque :: TermException.您还可以查看其他人已经提出的其中一些可以解决此问题.我有一些问题,即使使用TERM_CHILD和正确的信号处理使得陈旧的工作人员浮动.我的解决方案是等待,直到没有工作被处理,注销所有工作人员,然后重新启动与heroku ps:重新启动工作.