Rails không có built-in cron scheduler. Có hai hướng phổ biến:
1. Gem whenever — viết cron syntax trong Ruby, generate crontab:
ruby
# config/schedule.rb
every 1.day, at: "2:00 am" do
rake "reports:daily"
end
every :hour do
runner "CleanupJob.perform_later"
endChạy bundle exec whenever --update-crontab để apply. Yêu cầu server có cron daemon.
2. Sidekiq-cron / GoodJob — scheduler chạy bên trong process Sidekiq/GoodJob, không cần crontab:
ruby
# config/initializers/sidekiq.rb
Sidekiq::Cron::Job.create(
name: "Daily report",
cron: "0 2 * * *",
class: "DailyReportJob"
)Hướng 2 tốt hơn cho deploy trên cloud (Heroku/Railway không có cron daemon).
Hướng 1 phù hợp VPS có full control.