在特定日期时间延迟作业

我想通过delayed_job发送一些电子邮件

但是,我想在活动前后发送它们。

我担心的是,这实际上是否有效:

 def one_week_before_run AtendeeMailer.delay(run_at: '8th October 2016'.to_datetime).mudrun_about_to_start(self) end def thank_you_note AtendeeMailer.delay(run_at: '18th October 2016'.to_datetime.end_of_day).thank_you(self) end 

或者我应该选择另一种方法?

仅当run_at <=当前时间时,延迟作业才会选择要执行的作业。 请参考DJ的查询来挑选工作

 SELECT `delayed_jobs`.* FROM `delayed_jobs` WHERE ((run_at <= '2016-09-27 00:49:59' AND (locked_at IS NULL OR locked_at < '2016-09-27 00:24:59') OR locked_by = 'host:Madhubalans-Air pid:74314') AND failed_at IS NULL) ORDER BY priority ASC, run_at ASC LIMIT 1 

您的代码将run_at设置为2016-10-18 00:00:00和2016-10-18 23:59:59。 所以你的代码将按照你的期望工作:)