在delayed_job中执行作业的顺序

时间:2010-12-16 05:39:54

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

我有一个带有插件https://github.com/tobi/delayed_job

的rails应用

有时,执行作业的顺序与创建作业的顺序不同。

我希望以与创建它们相同的顺序执行作业,因为在某些情况下,要执行作业,重要的是上一个作业已成功执行。

请帮忙。

此致 的Pankaj

2 个答案:

答案 0 :(得分:0)

如果没有确切地知道如何创建作业,这很难分辨,但除了created_at时间之外,影响执行顺序的唯一因素是作业的优先级设置。我不知道你使用的tobi fork和collectiveidea fork之间的区别,但这是来自collectiveidea文档:

  

默认情况下,所有作业的优先级均为0,这是最高优先级。您可以通过将Delayed :: Worker.default_priority设置为其他内容来更改此设置。较低的数字具有较高的优先级。

来自迁移:

  

table.integer:priority,:default => 0#允许某些作业跳转到队列的前面

当然,您可以在创建作业时手动指定优先级。

答案 1 :(得分:0)

据我了解,失败的工作会在以后重新安排重试。

“失败时,作业将在5秒内再次安排+ N ** 4,其中N是重试次数。”来自README.textile的设置部分。

我假设其余的工作将在同一时间处理。您可能希望监视delayed_job表,并查看是否有任何作业的last_error字段值设置为NULL以外的其他值。

它还可能取决于您拥有多少个工作进程。 delayed_job工作人员按顺序将工作从delayed_jobs表中取出,但不能保证工人将按顺序完成任务。