是否可以立即运行延迟的作业,但仍然是异步的?

时间:2014-01-28 15:16:07

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

我们正在使用DelayedJob在后台运行任务,因为它们可能需要一段时间,而且因为如果抛出错误,我们仍然希望Web请求成功。

问题是,有时候工作可能非常大(改变数百或数千个数据库行),有时它可能非常小(比如5分行)。在小型的情况下,我们仍然希望将其作为延迟工作运行,以便错误处理可以以相同的方式工作,但我们希望不必等待大约5秒钟DJ接受这份工作。

有没有办法对作业进行排队,使其在后台运行,然后立即运行,以便我们不必等待工作人员在5秒后执行?

编辑:是的,这是Ruby on Rails: - )

2 个答案:

答案 0 :(得分:1)

延迟作业以设定的间隔轮询数据库以查找新的dj记录。您可以在初始化程序中重新配置此间隔:

# config/delayed_job.rb
Delayed::Worker.sleep_delay = 2 # or 1 if you're feeling wild.

这将影响全球DJ。

答案 1 :(得分:0)

怎么样

SomeJob.set(
    wait: 0,
    queue: "queue_name",
  ).perform_later