Running scheduled processes using Sidekiq Cron was a breeze. The setup process involves adding the Sidekiq Cron gem to the Gemfile and configuring the schedule.yml file to define cron schedule definitions. Additionally, the Sidekiq dashboard provides a convenient page to view the registered cron jobs.
Typically, when running a scheduled process, separate Sidekiq worker classes are created for each cron job, and within these workers, another service or rake task is invoked.
daily_backup_worker:
cron: "0 0 * * *"
class: "DailyBackupWorker"
description: "Run daily backup at midnight"
weekly_backup_worker:
cron: "0 0 * * 0"
class: "WeeklyBackupWorker"
description: "Run weekly backup on Sunday at midnight"
For example, in the DailyBackupWorker
class, the existing rake task command db:backup
is called to trigger the database backup:
require 'rake'
Rails.application.load_tasks
class DailyBackupWorker
include Sidekiq::Worker
def perform
Rake::Task['db:backup'].execute
end
end
Similarly, the WeeklyBackupWorker
class would have similar code. However, it is possible to streamline the process by using a single class to handle rake task invocation within the Sidekiq cron worker.
Introducing the InvokeRakeTaskWorker
class:
require 'rake'
Rails.application.load_tasks
class InvokeRakeTaskWorker
include Sidekiq::Worker
def perform(command)
Rake::Task[command['task']].execute(command['args'])
end
end
And you can change your schedule.yml into like this.
daily_backup_worker:
cron: "0 0 * * *"
class: "InvokeRakeTaskWorker"
args:
task: "db:backup"
description: "Run daily backup at midnight"
weekly_backup_worker:
cron: "0 0 * * 0"
class: "InvokeRakeTaskWorker"
args:
task: "db:backup"
args: "--weekly"
description: "Run weekly backup on Sunday at midnight"
That it’s, now you can use single class to invoke rake command inside sidekiq cron schedule.
using a single class to handle rake task invocation within the Sidekiq cron worker brings benefits such as code reusability, simplified configuration, flexibility, easier maintenance, and improved testing capabilities. Carefully evaluate the trade-offs and consider the specific requirements of your application before deciding on the approach to use.