我想對每個用戶的信息執行一些維護,但我希望它只在每個用戶的時區午夜左右發生。用戶的表格有一個默認爲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行)會導致問題。
什麼是更好的方式來寫這個任務?
編輯更清晰:我知道如何定期運行此任務。我在問這個任務本身是否可以寫的更好。
使用像[when](https://github.com/javan/whenever)這樣的寶石。快樂? – MarsAtomic
上面的代碼由cron作業執行。 – Preacher