2013-03-31 50 views
0

我試圖在一段時間(6個月)後使用gem'whatever'來記錄清理。rails每當刪除記錄sql

在我每當調度:

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

在lib /任務/ cleanup_user.rake

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

這似乎是正確的。但是,我得到錯誤'未初始化的常量用戶'。我在軌道上比較新。請幫助我。

編輯:我用潤潔一行命令改變了遊戲規則:

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的檢查,它的存在,但仍然沒有工作。任何想法?

+0

要確認,您是:a)通過capistrano部署或b)運行every命令並更新您的crontab? –

+0

我每次使用crontab都會運行。 –

回答

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

+0

嗨餓了的編碼器,我試過了。它不工作了。但是,我改變了上面的一個更清潔的方式。希望你能看看。 –

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'