我有一個帶有Location
模型的rails應用程序,其中有rating
和rating_count
字段。現在,我需要在每天的特定時間將每個Location
的rating
和rating_count
屬性重置爲0,可以說UTC的UTC時間爲12:00:00。Rails:每天在特定時間重置模型屬性
我該如何做到這一點?我正在使用默認的sqlite3
數據庫。
我有一個帶有Location
模型的rails應用程序,其中有rating
和rating_count
字段。現在,我需要在每天的特定時間將每個Location
的rating
和rating_count
屬性重置爲0,可以說UTC的UTC時間爲12:00:00。Rails:每天在特定時間重置模型屬性
我該如何做到這一點?我正在使用默認的sqlite3
數據庫。
最好的選擇是使用cron。你可以找到大量的文檔!雖然如果你正在運行一個Rails應用程序,你應該檢查出whenever一個漂亮的gem用於管理你的應用程序的cron作業!
如果您在* nix框中,編寫一個腳本來執行更新(例如在PHP或Perl中),並將其簡單地添加到crontab中。檢出cron。
最簡單的事情就是編寫一個執行該任務的rake任務,然後使用主機使用的任何調度系統(cron)。
另一種方法是使用delayed_job,它允許將工作推送到後臺進程。雖然延遲工作並不完全適合這樣的事情,但它完全有能力做到這一點。如果您的導軌進程開始,您將添加一個新的作業,在12:00運行。而工作的運行會重新安排工作。
延遲工作的好處是您的代碼在rails進程的上下文中運行,因此您可以使用已有的方法。還不錯:作業存儲在數據庫中,所以你可以有一個概述。
好吧,我會去用耙子任務和cron我猜。所以'rake任務'只是一個遷移,在'rating'和'rating_count'上使用'remove_column',然後'add_column'rating'和'rating_count'正確嗎? –
只需將值設置爲零。最簡單的方法是使用'Location.update_all(「rating = 0,rating_count = 0」)'。 'update_all'的文檔是http://apidock.com/rails/ActiveRecord/Base/update_all/class – nathanvda
'when'似乎對此很好,謝謝! –