【问题标题】:rails whenever delete records sqlrails每当删除记录sql
【发布时间】:2013-03-31 04:44:17
【问题描述】:

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

在我的每当调度器中:

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方面相对较新。请帮助我。

编辑:我通过运行 clean 一行命令更改了游戏:

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 中检查,它在那里但仍然无法正常工作。有什么想法吗?

【问题讨论】:

  • 确认一下,您是:a) 通过 capistrano 部署还是 b) 运行when 命令并更新您的 crontab?
  • 我在每次使用 crontab 时都在运行。

标签: ruby-on-rails whenever


【解决方案1】:

尝试将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

【讨论】:

  • 嗨,饥饿的编码员,我试过了。它也不起作用。但是,我在上面改为更清洁的方式。希望你能看看。
【解决方案2】:

根据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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2017-10-24
    • 2017-04-17
    相关资源
    最近更新 更多