删除记录每60天(Erase records every 60 days)

2019-07-17 11:26发布

我需要擦除记录在我的报价模式,如果记录有一个来自created_at日期超过60天。

我只找到有关如何填充我的模型用耙子任务的信息,但我找不到任何关于如何使一个rake任务删除记录信息。 所以,我只是想知道如果我有一个任务来完成,或者如果轨道有别的事情要做到这一点。

Answer 1:

创建任务的文件:

# lib/tasks/delete_old_records.rake
namespace :delete do
  desc 'Delete records older than 60 days'
  task :old_records => :environment do
    Model.where('created_at < ?', 60.days.ago).each do |model|
      model.destroy
    end

    # or Model.delete_all('created_at < ?', 60.days.ago) if you don't need callbacks
  end
end

运行带有:

RAILS_ENV=production rake delete:old_records

将其安排为:用cron(每天上午8点在这个例子中)运行:

0 8 * * * /bin/bash -l -c 'cd /my/project/releases/current && RAILS_ENV=production rake delete:old_records 2>&1'

您也可以使用宝石就展开时创建和管理你的crontab:

every 1.day, :at => '8:00 am' do
  rake "delete:old_records"
end

了解更多关于创业板Github上 。



Answer 2:

60.days.ago产生像的时间戳

Fri, 08 Aug 2014 15:57:18 UTC +00:00

所以,你需要使用<寻找记录比日期和时间旧(少)。

Online.delete_all("created_at < '#{60.days.ago}'")

这只是由Unixmonkey轻微的监督。 我还用DELETE_ALL代替块循环迭代每一个。



Answer 3:

您可以创建一个rake任务删除过期的优惠 ,或为您提供的模型创建类的方法,并使用调用它,例如, 只要宝石。



文章来源: Erase records every 60 days