2013-02-22 190 views
5

我對此很陌生,對於Delayed Job的工作原理有點困惑。延遲作業在Ruby on Rails中如何工作?

我知道它創建一個表,並把作業在表中,然後我需要運行

rake jobs:work 

啓動後臺進程。現在我的問題是

  1. DJ腳本是否每分鐘檢查一次表格,當時間與job_at匹配時,它會運行那個工作?

  2. 如果腳本每分鐘檢查一次表格,它與cron(每當寶石)有什麼不同?

感謝

+0

!/我猜是2 /它處理的優先級,重試政策等... – apneadiving 2013-02-22 13:07:48

回答

6
  1. 不DJ腳本檢查表中的每一分鐘,到時job_at時間相匹配,它運行的工作嗎?

當你運行rake jobs:work DelayedJob將輪詢delayed_jobs表,執行工作,如果它被設置匹配job_at列值。這部分你是正確的。

  1. 如果腳本只是每分鐘檢查一次,它與cron(每當gem)有什麼不同?

whenever是寶石,可幫助您配置一個crontab。它沒有任何東西直接與定期執行您的服務器上的任務。

可能設置一個cron運行在每分鐘隊列中所有任務存在的,但留下一個delayed_job daemon在運行,有多方面的好處。

  • 即使cron的跑每一分鐘,delayed_job的守護進程會看到並執行任何任務隊列中的cron之間的1分鐘的窗口中運行
  • 每次的cron將運行,它會重建一個新的Rails執行工作的環境。當守護進程可以立即坐在那裏準備執行新排隊的作業時,這是浪費時間和資源。

如果你想通過cron配置delayed_job每一分鐘,你可以添加這樣的事情你的crontab

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

每一分鐘,delayed_job的就會旋轉起來,執行任何工作都已經準備好了或它必須從先前失敗的運行重試,然後退出。 我不推薦這個。將late_job設置爲守護進程是正確的選擇。

+0

驚人的答案Deefour,謝謝 – iCyborg 2013-02-22 16:45:09

+0

你應該接受的答案,幹掉你的問題。 – deefour 2013-02-22 19:24:37

4

不DJ腳本檢查表中的每一分鐘,到時 job_at時間相匹配,它運行的工作嗎?

是的。它每5秒檢查一次數據庫。

它如何不同於cron(每當寶石)如果腳本只是 每分鐘檢查一次表格?

在背景工作的背景下,他們沒有那麼不同。他們的主要區別是他們通常如何經營這些工作。

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

令人驚歎的答案jvnill,謝謝 – iCyborg 2013-02-22 16:44:45