1

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

鉴于此,如果尚未满足诸如用户确认之类的条件,是否有适当的方法来重新排队任务?

4

2 回答 2

1

对此没有正确答案,这实际上取决于您要实现的目标。批处理(延迟作业)通常意味着在没有任何(或较少)人工干预的情况下处理平凡的任务。在选择“a”策略之前,您可能需要弄清楚某些事情:

1) 无故障处理所有实体对您的工作有多重要?

2) 您的用户体验会有多不方便?

3) 这个过程完全自主有多重要?

如果您的答案对于这三个问题中的任何一个都非常关键/重要,那么您可能需要采用下面的策略 #1。如果失败是可以容忍的,请选择#2。最后,如果您可以让人类来处理失败的实体,请选择#3。

1)有你的延迟工作,创建一个失败队列,将失败的对象推入那里并在一段时间后重试。

2)只是简单地忽略失败,假设数据将在第二天再次运行之前修复。

3)让您的工作向您(或系统管理员)报告任何故障,以便您可以干预并尝试缓解问题。

于 2013-10-13T06:04:05.240 回答
-1

我认为解决方案是forcefully fail您想要重新排队直到满足您的条件的工作。

要强制失败,您可以执行类似Delayed::Job.find_by_id(id).last. 此条件将始终失败,因为find_by_id方法将获取单个记录。你可以id用其他任何东西代替。无论如何,你的目标是让那份工作失败。

于 2016-09-27T07:22:20.233 回答