2013-07-19 26 views
0

在rails 3應用程序中,我需要創建持久指定時間的對象。例如,假設我創建了一個activerecord對象(模型),但只需要12小時左右。 activerecord對象需要在12小時後自動從數據庫中銷燬。不需要通過控制器進行刪除,它可以直接發生在數據庫上。達到此目的的最佳方法是什麼?可能有成千上萬個這樣的對象在任何計時器中創建和銷燬,並且每個對象都需要在特定時間銷燬。rails activerecord對象在指定時間的持久性

我環顧四周,發現一些寶石 - 每當&延遲工作。無論何時更多的是cron上的包裝,因此考慮到要管理的活動記錄對象的數量而不適合。我還沒有調查使用後臺進程的「延遲工作」,但希望獲得關於可用選項的一些反饋。

在此先感謝。

+0

延遲工作似乎是一個好方法,在你的模型上添加after_save回調,將排隊延遲的工作刪除它。使用run_at => 12.hours.from_now – house9

回答

0

爲什麼不每隔幾分鐘就運行一次cron/every作業,查詢數據庫中的created_at> 12.hours.ago對象?因此,您設法通過查詢來刪除所有對象,而不是逐個刪除。

every 5.minutes do 
    Model.where(:created_at > 12.hours.ago).delete_all 
end 

如果您需要更精確,我可以使用Redis的按鍵爲對象,12小時的設定上的按鍵時到期,但你需要弄清楚如何使用Redis的連接想象。

在任何情況下,都需要觀察數據庫中的事情,否則您的密鑰將過期。