0

在 rails 3 应用程序中,我需要创建在指定时间内持续存在的对象。例如,假设我创建了一个(模型的)活动记录对象,但需要它只存在 12 个小时。activerecord 对象需要在 12 小时后从数据库中自动销毁。删除不需要通过控制器进行,它可以直接在数据库上进行。实现这一目标的最佳方法是什么?在任何时间都可能有数千个这样的对象被创建和销毁,每个对象都需要在指定的时间被销毁。

我环顾四周,发现了一些宝石 - 无论何时和延迟工作。无论何时,它更像是对 cron 的包装,因此不适合考虑要管理的活动记录对象的数量。我尚未调查使用后台进程的“延迟工作”,但希望获得有关可用选项的一些反馈。

提前致谢。

4

1 回答 1

0

为什么不每隔几分钟运行一次 cron/whenever 作业,查询数据库中 created_at > 12.hours.ago 的对象?因此,您设法通过查询删除所有对象,而不是一一删除。

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

如果您需要更精确,我可以想象为您的对象使用 Redis 键并将键的时间到期设置为 12 小时,但您需要弄清楚如何与 Redis 连接。

在任何情况下,都需要观察数据库才能发生这种情况,或者您有过期的密钥。

于 2013-07-19T17:44:58.160 回答