rails每当删除记录sql

时间:2013-03-31 04:44:18

标签: ruby-on-rails whenever

我尝试使用gem'never'后的一段时间(6个月)进行记录清理。

在我的随时调度程序中:

every 1.month, at: '1am' do
  rake 'lib/tasks/cleanup_user.rake'
end

在lib / tasks / cleanup_user.rake

@user = User.all.where(:created_at > 'Time.6.month.ago').delete

看来是对的。但是,我得到错误'未初始化的常量用户'。我是相对较新的rails。请帮助我。

编辑:我通过运行干净的一行命令改变了游戏:

set :output, "log/cron.log"
    every 1.minutes, :environment => :development do
      command 'User.where("confirmed = 0 AND created_at <= ?", 6.months.ago).delete'
    end

我设置了特定的环境,并在命令中运行:

whenever --set environment=development --update-crontab userscleaning

检查crontab,它在那里但仍无法正常工作。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

尝试将environment依赖项添加到您的任务中。

task :cleanup_users => :environment do
  User.where(:created_at > 'Time.6.month.ago').delete_all
end

如果您希望触发回调,请使用destroy_all

task :cleanup_users => :environment do
  User.where(:created_at > 'Time.6.month.ago').destroy_all
end

以下是相关的Railscasts

答案 1 :(得分:0)

根据答案here

# lib/tasks/delete_old_records.rake
namespace :delete do
  desc 'Delete records older than 6 months'
  task old_records: :environment do
    User.where('created_at > ?', 6.month.ago).destroy_all
  end
end

使用以下命令运行:

RAILS_ENV=production rake delete:old_records

随时:

every 1.minutes do
  rake "delete:old_records"
end

或者在cron:

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