Мне нужно найти заданные и/или рабочие задания и/или неудачные задания для объекта модели, например, например, когда объект модели разрушен, мы хотим найти все и либо решить не удалять, либо уничтожать задания (условно).Как найти связанные задания Resque для объекта модели ActiveRecord?
Есть ли рекомендуемый способ сделать это, прежде чем изобретать велосипед?
Пример:
Если вы хотите создать before_destroy
функцию обратного вызова, которая уничтожает все задания, когда объект будет уничтожен (в очереди и неудачные работы), и только уничтожить, если нет рабочих заданий
Некоторые псевдо код что я имею в виду, чтобы сделать для этого примера случая использования:
Отчет модели работы обработка
class Report < ActiveRecord::Base
before_destroy :check_if_working_jobs, :destroy_queued_and_failed_jobs
def check_if_working_jobs
# find all working jobs related to this report object
working_jobs = ProcessReportWorker.find_working_jobs_by_report_id(self.id)
return false unless working_jobs.empty?
end
def destroy_queued_and_failed_jobs
# find all jobs related to this report object
queued_jobs = ProcessReportWorker.find_queued_jobs_by_report_id(self.id)
failed_jobs = ProcessReportWorker.find_failed_jobs_by_report_id(self.id)
# destroy/remove all jobs found
(queued_jobs + failed_jobs).each do |job|
# destroy the job here ... commands?
end
end
end
Report er для рабочих мест resque/redis
class ProcessReportWorker
# find the jobs by report id which is one of the arguments for the job?
# envisioned as separate methods so they can be used independently as needed
def self.find_queued_jobs_by_report_id(id)
# parse all jobs in all queues to find based on the report id argument?
end
def self.find_working_jobs_by_report_id(id)
# parse all jobs in working queues to find based on the report id argument?
end
def self.find_failed_jobs_by_report_id(id)
# parse all jobs in failed queue to find based on the report id argument?
end
end
Этот подход подходит к тому, что должно произойти?
Каковы недостающие части выше, чтобы найти очереди или рабочие задания по идентификатору объекта модели, а затем уничтожить его?
Есть ли уже существующие методы для поиска и/или уничтожения связанного идентификатора объекта модели, который я пропустил в документации или моем поиске?
Обновление: Пересмотрено с использованием примера использования, чтобы использовать только рабочие_jobs, чтобы проверить, следует ли нам удалять или нет, или предлагая нам также попытаться удалить work_jobs. (потому что удаление рабочих заданий более сложное, чем просто удаление записей ключа redis)