我是sidekiq的新手,我想在一年后从我的模型AdminLog
中删除数据。我有一个created_at
字段,所以我只是在想如果我使用下面的方法就足够了?我想我应该在某个地方初始化它,因为 sidekiq 怎么知道什么时候触发它?
class AdminLogRemoverWorker
include Sidekiq::Worker
def perform
expired_logs = AdminLog.where('created_at >= ?', 1.year.ago)
expired_logs.destroy_all
end
end
编辑:
我想让 sidekiq 自动执行此操作,因此它应该能够每天查找此类数据并能够每天删除这些数据。
您拥有的将删除所有比1.year.ago
更新的记录,相当确定您希望created_at < ?
不>=
。
此外,除非你有一些回调需要运行,否则你可能想使用delete_all
而不是destroy_all
- 它会快得多。
更新
抱歉,忘记了主要部分,您还需要在其中放置一些代码以将这项工作重新安排到第二天(文档在这里(。 所以:
def perform
self.class.perform_at 1.day.from_now.change hour: 1
#... rest of your stuff
end
那是明天凌晨 1 点,将时间调整到适合您的时间。