I am new to this and is little confused about how Delayed Job works ?
I know it creates a table and puts the jobs in the table and then I need to run
r
- Does DJ script checks the table every minute and when the time matches job_at time, it runs that job ?
When you run rake jobs:work
DelayedJob will poll the delayed_jobs
table, performing jobs matching the job_at
column value if it's been set. This part you're correct about.
- How it is different than cron (whenever gem) if the script is just checking the table every min ?
whenever
is a gem that helps you configure a crontab. It has nothing directly to do with performing tasks on your server on a periodic basis.
You could setup a cron to run whatever tasks exist in the queue every minute, but leaving a delayed_job
daemon running has multiple benefits.
delayed_job
's daemon will see and perform any jobs queued within that 1-minute window between cron runsIf you want to configure delayed_job
through a cron every minute you can add something like this to your crontab
* * * * * RAILS_ENV=production script/delayed_job start --exit-on-complete
Every minute, delayed_job will spin up, perform whatever jobs are ready for it or which it must retry from a previously failed run, and then quit. I don't recommend this though. Setting up a delayed_job as a daemon is the right way to go.