In most of our apps, we probably need to execute few background tasks more often, like every 10 minutes, once a week, etc. For scheduling these jobs, we need a scheduler that can re-run these tasks on specified intervals.
There are few schedulers like whenever, resque-scheduler, rufus-scheduler, etc that can do the job. However, these gems are not compatible Sidekiq and with apps deployed on Heroku.
There are 2 ways to make it work on Heroku.
1/ Using Heroku Scheduler addon.
Steps:
i) Create sidekiq job.
ii) Create a rake task that will triggers that worker.
iii) In Heroku Scheduler addon, specify the rake task and the interval after which you want to run this job.
2/ Using sidetiq gem(I'll recommend this).
Sidetiq uses ice_cube gem which is used to create recurring events. Steps:
i) Include sidetiq gem in gemfile and run bundle install.
ii) In the sidekiq job, mention following line of code:
include Sidetiq::Schedulable
recurrence { weekly } # for weekly execution of this job.
and you are set to go.
For complex schedules and other configuration options, refer wiki page: https://github.com/tobiassvn/sidetiq/wiki