2016-11-03 74 views
0

我想對每個用戶的信息執行一些維護,但我希望它只在每個用戶的時區午夜左右發生。用戶的表格有一個默認爲Eastern的time_zone列。如何在每個用戶的時區在rails中的特定時間執行rake任務?

到目前爲止,我有以下的rake任務設置爲每小時運行:

task update_user_stuff: :environment do 
    users = [] 
    User.all.each do |user| 
    b = Time.now - 29.minutes 
    e = Time.now + 30.minutes 
    if (b..e).cover?(Time.now.in_time_zone(user.time_zone).beginning_of_day) 
     users << user 
    end 
    end  
    unless users.blank? 
    users.each do |user| 
     # user maintenance here 
    end 
    end 
end 

該代碼似乎我與20個用戶的測試數據庫測試工作,以約4秒就可以完成。我擔心的是,在有成千上萬用戶的生產服務器上,效率低下,依靠手動設置時間窗口(4-5行)會導致問題。

什麼是更好的方式來寫這個任務?

編輯更清晰:我知道如何定期運行此任務。我在問這個任務本身是否可以寫的更好。

+0

使用像[when](https://github.com/javan/whenever)這樣的寶石。快樂? – MarsAtomic

+0

上面的代碼由cron作業執行。 – Preacher

回答

0

您可以使用whenever gemhttps://github.com/javan/whenever其使用cron來運行任務。

您可以設置一個whenever cron job來檢查所有用戶並檢查他們的時區。如果時間匹配,那麼你可以爲該用戶特定的東西。

示例:設置whenever cron job每小時運行一次任務。此任務調用檢查用戶時區的方法,如果時區匹配,則爲條件,然後爲該特定用戶調用另一個rake taskmethod

+0

我的問題與如何運行任務無關。我知道如何運行cron作業以及如何使用gem。 – Preacher

相關問題