rails всякий раз, когда удаляются записи sql

Я попытался очистить записи через определенный период времени (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

Кажется, это правильно. Однако я получил ошибку «неинициализированный постоянный пользователь». Я относительно новичок в рельсах. Пожалуйста, помогите мне.

РЕДАКТИРОВАТЬ: я изменил игру, выполнив чистую однострочную команду:

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, он есть, но все равно не работает. Любая мысль?


person Firdaus Adib    schedule 31.03.2013    source источник
comment
Чтобы подтвердить, вы: а) развертываете через capistrano или б) запускаете команду всякий раз и обновляете свой crontab?   -  person Jesse Wolgamott    schedule 31.03.2013
comment
Я запускаю каждый раз, когда использую crontab.   -  person Firdaus Adib    schedule 16.04.2013


Ответы (2)


Попробуйте добавить зависимость 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.

person HungryCoder    schedule 31.03.2013
comment
Привет Голодный кодер, я попробовал это. Это тоже не работа. Тем не менее, я изменился на более чистый способ выше. Надеюсь, вы сможете взглянуть. - person Firdaus Adib; 31.03.2013

Согласно ответам здесь:

# 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

Или в кроне:

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