如何修改运行delay_job的run_at

时间:2019-02-15 13:30:14

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

在某个时候,我有一项必须运行的工作,但它被排在工人的队列中

示例-

$ pr -2ats, file

4194369,4194376
4194383,4194377
4194389,4194394
4194399,4194395
4194402,4194403
4194407

36小时后,我想将此run_at = (Date.today + 2.days) + 4.hours Delayed::Job.enqueue(ReleaseSecurityMoneyJob.new(transaction_id), run_at: run_at) 时间延长到下一个run_at

我该如何实现?

1 个答案:

答案 0 :(得分:0)

一种选择是使用gem 'delayed_job_recurring'并将您的作业设置为定期运行

  class ReleaseSecurityMoneyJob < Struct.new(:transaction_id)
      include Delayed::RecurringJob
      run_every 4.days
      timezone 'Central Time (US & Canada)'
      queue 'slow-jobs'
      def perform
        ..
      end
  end

然后像您一样创建此作业,它将每隔4天执行一次。

Delayed::Job.enqueue(ReleaseSecurityMoneyJob.new(transaction_id))

然后在某个时候想要完成,只需致电

ReleaseSecurityMoneyJob.unschedule

但是,这将取消安排该班级的所有工作。我认为有一些选项可以基于transaction_id选择特定的工作。您将不得不尝试一下。