运行 在特定时间延迟作业

Run Delayed Job at a specific time

我有一个电子邮件发送任务,我想 运行 在用户指定的时间发送。我有一个日期时间列 deliver_at,我应该在该列发送电子邮件。我正在使用延迟作业来执行后台作业。

延迟作业允许我指定时差而不是安排作业的确切时间。

  GiftCardMailerJob.set(wait: delay_by.minutes.from_now).perform_later(go)

有没有办法直接给deliver_at时间,然后在那个时间做延迟作业运行?

如果不是时差怎么算?

((deliver_at - Time.now) / 60).minutes.from_now

正确的做法应该是?

您可以在delayed_jobs

中使用enqueue方法
Delayed::Job.enqueue(GiftCardMailerJob.new, :run_at => deliver_at)

如果您在数据库中看到 delayed_jobs table,则 run_at 字段的类型为 datetime 并且您可以为任何 datetime 值它。