如何在 Rails 中动态地在作业中排队作业?

How to enqueue a job within a job dynamically in Rails?

我有一份工作,当工作是 运行 时,在它的最底部,我想 enqueue 相同的工作再次到 运行 之后 1小时,但参数不同。

到目前为止我取得的成就:

class SimpleJob
  @queue = :normal

  def self.perform(start)
    puts "Right now, start = #{start}"
    start += 12
    time = some_request_external_api
    self.set(wait: time).perform_later(start)
  end
end

我正在使用 resque gem,并且 运行 通过 QUEUE=* rake resque:work 完成作业。当然,它在开始时会打印 Right now, start = 12,但之后什么也没有发生。我究竟该如何实现此功能?

听起来您正在寻找设置重复性工作的方法。如果是这样的话,看看这个:

https://github.com/resque/resque-scheduler

您可以使用调度程序,例如 clockwork.

,而不是在其内部再次排队作业

或者,如果您要完成的是响应其他服务上的某些事件,也许您可​​以查看它的文档,看看它是否提供 webhook 功能。

只要他们这边发生任何动作,它们就会向您想要的动作发送 post 请求。