我想只允许在确认用户的情况下运行任务。我认为要做的事情可能是抛出异常并让delayed_job堆栈重新排队任务,但我不知道这是否滥用了该功能。
鉴于此,如果尚未满足用户确认等条件,是否有正确的方法来重新排队?
答案 0 :(得分:1)
对此没有正确的答案,这实际上取决于你想要实现的目标。批处理(延迟作业)通常意味着在没有任何(或较少)人为干预的情况下处理普通任务。在选择“a”策略之前,您可能想要弄清楚某些事情:
1)您的工作在没有失败的情况下处理所有实体有多重要?
2)您的用户体验有多不方便?
3)这个过程完全自治有多重要?
如果您对这三个问题中的任何一个问题的回答非常关键/重要,那么您可能希望采用下面的策略#1。如果失败是可以忍受的,那就去#2。最后,如果您可以将其留给人类处理失败的实体,请转到#3。
1)有你的延迟工作,创建一个失败队列,在那里推送失败的对象,并在一段时间后重试。
2)只是忽略了失败,假设数据将在作业再次运行之前的第二天得到修复。
3)让你的工作向你(或系统管理员)报告任何失败,这样你就可以干预并试图缓解问题。
答案 1 :(得分:-1)
我认为解决方案是forcefully fail
你要重新排队的工作,直到满足你的条件。
要强制失败,您可以执行Delayed::Job.find_by_id(id).last
之类的操作。此条件将始终失败,因为find_by_id
方法将获取单个记录。您可以用其他任何内容替换id
。无论如何,你的目标是失败。