微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – 如何检查Resque工作人员状态以确定它是否死亡或过时

认的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:重新启动工作.

原文地址:https://www.jb51.cc/ruby/273283.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐