让我说我喜欢
arrs = Article.where(:body => nil)
我将拥有arrs.count,让我们说900 我做了
arrs.each do |ar|
ar.delay.download_via_diffbot #a method that takes some time, does some http, and writes a non-nil value to ar.body
end
现在我会看日志,并等待几分钟~5个dynos完成这些工作,并再次计算:arrs.count现在是~800
我可以确认我只发出了~100个HTTP请求,但是api报告显示了这一点,还只是看着日志告诉你900个工作没有发生。
我是否错误地创建了这么多同时工作? 什么是一次创造这么多工作的正确方法?
答案 0 :(得分:1)
Mongoid标准是延迟加载/评估的。也就是说,如果设置articles = Article.where(body: nil)
,文章就是一个标准。它不是您从db获得的文档集。因此,如果您删除一些带有正文nil
的文章或填写一些文章的正文,articles.count
将触发另一个数据库查询,并仅报告正文为零的文章数。如果您的延迟工作人员成功地完成工作并填写身体内容,则可以减少计数。
<强>更新强>
您可以Delayed::Job.count
查看延迟的作业计数,以查看任何时候待处理的作业数量。如果您没有删除失败的作业,则可以按Delayed::Job.where(:failed_at.ne => nil).count
检查失败作业的计数。要查看有关失败作业的更多详细信息,可以检查作业,它将具有处理程序和上次错误。