在所有已成功的工作成功回调之前挂钩以保存成功完成的工作

目的:

保存已成功完成的作业

使用的方法

看了这个答案 ,它告诉我们如何保存已完成的作业, 这个答案建议创建一个插件,该插件将在一个生命周期事件之后执行。

问题

以下生命周期事件和代码中存在的适用参数:

:enqueue => [:job], :execute => [:worker], :loop => [:worker], :perform => [:worker, :job], :error => [:worker, :job], :failure => [:worker, :job], :invoke_job => [:job] 

我曾预料会有一些事件对应成功,我不会在工作成功后得到哪一个。

一些代码

在上述两个答案的帮助下,我创建了这个插件来保存已完成的作业并输入config / initializers / save_completed_delayed_job.rb

 module Delayed module Plugins class SaveCompletedDelayedJobPlugin < Plugin callbacks do |lifecycle| # see below for list of lifecycle events lifecycle.after(:perform) do |job| p "This should be ran after success so that I can save the job in different table" CompletedDelayedJob.create({ priority: job.priority, attempts: job.attempts, handler: job.handler, last_error: job.last_error, run_at: job.run_at, failed_at: job.failed_at, completed_at: DateTime.now, queue: job.queue }) end end end end end Delayed::Worker.plugins << Delayed::Plugins::SaveCompletedDelayedJobPlugin 

为什么我需要插件

我不能使用回调方法,因为我没有专门的工作分类,我使用以下代码来排队工作。

 handle_asynchronously :deliver_delayed, :queue => 'my_q'