如果不满足条件,是否有办法重新排队延迟的工作任务?

时间:2013-10-13 05:43:59

标签: ruby-on-rails-3.2 delayed-job

我想只允许在确认用户的情况下运行任务。我认为要做的事情可能是抛出异常并让delayed_job堆栈重新排队任务,但我不知道这是否滥用了该功能。

鉴于此,如果尚未满足用户确认等条件,是否有正确的方法来重新排队?

2 个答案:

答案 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。无论如何,你的目标是失败。