Extends delayed_job to support recurring jobs.
Add it to your Gemfile:
gem 'delayed_job_recurring'
Then define a task class. We like the concept of
interactors,
so we put our task classes in app/interactors
. You could also put them in lib
or even app/models
.
class MyTask
include Delayed::RecurringJob
run_every 1.day
run_at '11:00am'
timezone 'US/Pacific'
queue 'slow-jobs'
def perform
# Do some work here!
end
end
And schedule it. In a rails app, you might put this in an initializer:
MyTask.schedule! # run every day at 11am Pacific time (accounting for daylight savings)
MyTask.schedule(run_at: '12:00')
MyTask.schedule(run_every: 1.day, run_at: ['11:00', '6:00pm']
MyTask.schedule(run_every: 1.week, run_at: ['sunday 8:00am', 'wednesday 8:00am'])
Many thanks to @ginjo and @kares for their work! This code was derived from https://gist.github.com/ginjo/3688965.