2011-10-18 54 views
1

我每次都使用(https://github.com/javan/whenever)ruby gem在模型X的after_create回調中插入crontab條目。此條目指示作業每45分鐘運行一次。但我想把控制權交給用戶,他可以指定時間間隔。所以過程如下:以可變間隔運行耙式任務

  1. 用戶創建一個模型X,我插入一個crontab條目以在45分鐘後執行作業。
  2. 用戶看到45分鐘不夠好,他希望能夠將UI的時間間隔從30分鐘改變爲30分鐘(請注意,這是一個HTML/UI控件,他應該能夠做到這一點)。
  3. 後來他應該可以更改任意次數的時間間隔。

任何寶石或任何想法,我們如何能夠完成此讚賞。我對任何版本的rails都開放,並且可以在任何人中開始實現,因爲此功能構成了功能的核心。

謝謝。

回答

4

我不喜歡你的解決方案。這意味着,如果將來您的應用程序將擁有2k用戶,那麼您將啓動2k crontabs?

無需爲每個用戶創建一個crontab,只需每分鐘創建一個。在User模型中存儲關於該用戶的crontab頻率以及上次執行crontab時的頻率的信息。

然後,當主crontab每分鐘開始時,檢查哪些用戶有last_crontab_at + frequency < Time.current併爲這些用戶運行腳本。

通過這種方式,無論用戶數量多少,應用程序都可以擴展。

此外,請記住crontabs是服務器本地的。如果您必須更改服務器或創建羣集,會發生什麼情況?我建議你考慮使用後臺處理服務或隊列。

+0

我當時正在暗示自己。順便說一句,你可能意思是'last_crontab_at + frequency.minutes Laas

+0

你說得對。固定。 –

+0

頻率可能在幾分鐘之內,所以我編輯了我以前的評論以反映這一點。 – Laas