I've been pondering on this delayed job in the Rails app. User specify a time that they'd like the job to run. Passing that into the delayed job is straight forward.
CustomerEmail.delayed_job(queue: 'mail', run_at: params[:date])
But when I checked on the run_at
column in delayed_jobs
, I got this:
id | run_at | updated_at
-----+----------------------------+----------------------------
835 | 2016-08-19 16:27:07.003945 | 2016-08-19 16:27:07.004107
834 | 2016-08-19 16:27:02.516581 | 2016-08-19 16:27:02.517648
833 | 2016-08-19 16:25:06.81385 | 2016-08-19 16:25:06.814095
832 | 2016-08-19 16:19:20.601837 | 2016-08-19 16:19:20.602038
It seems like run_at
column was updated the same time as updated_at
, regardless what date has been called on delayed_job
.
In further investigation, I found if I ran
CustomerEmail.delayed_job(queue: 'mail', run_at: 1.day.from.now)
I got
id | run_at | updated_at
----+----------------------------+----------------------------
852| 2016-08-20 16:49:16 | 2016-08-19 16:49:16
The culprit is that run_at
has to take a date object. If a string passed in, it ignores the string and set current update time.