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:
# 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:
# 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.
Rails has no built-in cron scheduler. Two common approaches:
1. whenever gem — write cron syntax in Ruby, generates a crontab:
# config/schedule.rb
every 1.day, at: "2:00 am" do
rake "reports:daily"
end
every :hour do
runner "CleanupJob.perform_later"
endRun bundle exec whenever --update-crontab to apply. Requires a server with a cron daemon.
2. sidekiq-cron / GoodJob — scheduler runs inside the Sidekiq/GoodJob process, no crontab needed:
# config/initializers/sidekiq.rb
Sidekiq::Cron::Job.create(
name: "Daily report",
cron: "0 2 * * *",
class: "DailyReportJob"
)Approach 2 is better for cloud deployments (Heroku/Railway have no cron daemon).
Approach 1 suits VPS with full OS control.