Ruby on rails 3.2 如果条件不符合';我没见过?

Ruby on rails 3.2 如果条件不符合';我没见过?,ruby-on-rails-3.2,delayed-job,Ruby On Rails 3.2,Delayed Job,我只希望在确认用户后才允许运行任务。我认为应该做的事情可能是抛出一个异常,让延迟的作业堆栈重新对任务进行排序,但我不知道这是否滥用了该功能 鉴于此,如果某个条件(如用户确认)尚未满足,是否有适当的方法重新询问任务?对此没有正确的答案,这实际上取决于您试图实现的目标。批处理(延迟作业)通常是指在没有任何(或更少)人为干预的情况下处理平凡的任务。在您选择“a”战略之前,您可能需要弄清楚某些事情: 1) 处理所有实体而不发生故障对您的工作有多重要 2) 您的用户体验有多不方便 3) 这个过程完全自主有

我只希望在确认用户后才允许运行任务。我认为应该做的事情可能是抛出一个异常,让延迟的作业堆栈重新对任务进行排序,但我不知道这是否滥用了该功能


鉴于此,如果某个条件(如用户确认)尚未满足,是否有适当的方法重新询问任务?

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

1) 处理所有实体而不发生故障对您的工作有多重要

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

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

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

1) 让您的作业延迟,创建一个失败队列,将失败的对象推入其中,并在特定时间段后重试

2) 只需忽略故障,假设数据将在第二天再次运行作业之前修复


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

我认为解决方法是
强制使您要重新排队的作业失败
,直到满足条件为止


要强制失败,您可以执行类似于
Delayed::Job.find by_id(id)。last
的操作。此条件将始终失败,因为
find\u by\u id
方法将获取单个记录。您可以用任何其他内容替换
id
。不管怎样,你的目标就是不及格。

谢谢你的回答。我将使用#2,看看命中率是多少,以确定是否必须使用#1