9

我是新手,对延迟作业的工作原理有点困惑?

我知道它会创建一个表并将作业放入表中,然后我需要运行

rake jobs:work

启动后台进程。现在我的问题是

  1. DJ 脚本是否每分钟检查一次表格,并且当时间与 job_at 时间匹配时,它会运行该作业?

  2. 如果脚本只是每分钟检查一次表,它与 cron (无论何时 gem)有什么不同?

谢谢

4

2 回答 2

10
  1. DJ 脚本是否每分钟检查一次表格,并且当时间与 job_at 时间匹配时,它会运行该作业?

当您运行rake jobs:workDelayedJob 时,将轮询delayed_jobs表,执行与job_at列值匹配的作业(如果已设置)。这部分你是正确的。

  1. 如果脚本只是每分钟检查一次表,它与 cron (无论何时 gem)有什么不同?

whenever是一个可以帮助您配置 crontab 的 gem。它与定期在服务器上执行任务没有直接关系。

可以设置一个 cron 来每分钟运行队列中存在的任何任务,但是让delayed_job守护程序运行有很多好处。

  • 即使 cron 每分钟运行一次,delayed_job的守护进程也会看到并执行在 cron 运行之间的 1 分钟窗口内排队的任何作业
  • 每次 cron 运行时,它都会重建一个新的 Rails 环境来执行这些作业。当守护程序可以坐在那里立即准备执行新排队的作业时,这是浪费时间和资源。

如果您想delayed_job每分钟通过一个 cron 进行配置,您可以将类似的内容添加到您的 crontab

* * * * * RAILS_ENV=production script/delayed_job start --exit-on-complete

每分钟,delayed_job 都会启动,执行任何为它准备好的作业,或者它必须从先前失败的运行中重试,然后退出。不过我不推荐这个。将delayed_job 设置为守护进程是正确的方法。

于 2013-02-22T13:09:42.183 回答
10

DJ 脚本是否每分钟检查一次表格,并且当时间与 job_at 时间匹配时,它会运行该作业?

是的。它每 5 秒检查一次数据库。

如果脚本只是每分钟检查一次表,它与 cron (无论何时 gem)有什么不同?

在后台作业的上下文中,它们并没有那么不同。他们的主要区别在于他们通常如何运行工作。

          DJ                  |            Crontab
 uses additional database     | you should either set up a rake task
 table but that's it. easier  | or a runner which can be called on the
 to code compared to crontab  | crontab
------------------------------|------------------------------------------
 requires you to run a worker | requires you to setup your cron which
 that will poll the database  | you can easily do using the whenever gem
------------------------------|------------------------------------------
 since this uses a table, it  | you have to setup some sort of logging so
 is easier to debug errors    | that you have an idea what caused the error
 when they happen             |
------------------------------|------------------------------------------
 the worker should always be  | as long as your crontab is set up properly,
 running to perform the job   | you should have no issues
------------------------------|------------------------------------------
 harder to setup recurring    | easy to setup recurring tasks
 tasks                        |
------------------------------|------------------------------------------
于 2013-02-22T13:22:34.493 回答