Delayed Job如何在Ruby on Rails中工作?

时间:2013-02-22 13:02:39

标签: ruby-on-rails ruby-on-rails-3

我是新手,并且对于延迟工作如何运作有点困惑?

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

rake jobs:work

开始后台进程。现在我的问题是

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

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

  3. 由于

2 个答案:

答案 0 :(得分:7)

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

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

  
      
  1. 如果脚本每隔一分钟只检查一次表,它与cron(每当gem)有什么不同?
  2.   

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

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

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

如果您想每分钟通过cron配置delayed_job,可以在crontab上添加类似的内容

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

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

答案 1 :(得分:5)

  

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                        |
------------------------------|------------------------------------------