2013-07-19 27 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的连接想象。

在任何情况下,都需要观察数据库中的事情,否则您的密钥将过期。