Используй Act_as_paranoid с DelayedJob?

Может кто-нибудь сказать мне, как именно интегрировать acts_as_paranoid с DelayedJob? Я пытался создать класс Delayed::Backend::ActiveRecord::Job и добавление acts_as_paranoid к нему, но даже если я использую инициализатор и require новый класс act_as_paranoid, похоже, ничего не делает.

Я не получаю никаких ошибок, так paranoia Похоже, что он установлен правильно, и задание удаляется после успешного завершения, что, конечно, я и пытаюсь предотвратить.

Рад попробовать любые предложения по отладке, если никто не читает это и сразу же знает, как я облажался.

2 ответа

Оказывается, я попал на проблему "область видимости по умолчанию". acts_as_paranoid изменяет область действия по умолчанию, чтобы find Возвращает только те записи, которые не были удалены. Если вы хотите увидеть ВСЕ записи, включая удаленные, вам нужно либо добавить with_deleted как область для вашего запроса или, при добавлении acts_as_paranoid к вашему классу добавьте согласно примеру:

class Client < ActiveRecord::Base
  acts_as_paranoid without_default_scope: true

  ...
end

С любым из этих изменений все работает.

Я знаю, что вы ответили на свой вопрос, вроде как, но ваш ответ не помогает людям, приземляющимся здесь, стремящимся интегрироваться DelayedJob с acts_as_paranoid поэтому я решил объяснить это другим.

  1. Создать миграцию для добавления deleted_at в delayed_jobs:

    rails generate migration add_deleted_at_to_delayed_jobs deleted_at:datetime
    
  2. Запустите миграции:

    rake db:migrate
    
  3. Расширить Delayed::Job класс для добавления acts_as_paranoid:

    config/initializers/delayed_job.rb

    class Delayed::Job
    
      acts_as_paranoid
    
    end
    

Это оно!

Теперь, когда работа завершена, вы увидите, что она не удаляется из delayed_jobs таблицы, он просто получает метку времени в deleted_at колонна, чтобы рабочие не подняли ее.

ProTip: The deleted_at столбец указывает, когда работа была завершена.

Другие вопросы по тегам