[英]delayed_jobs save completed jobs
是否有一個參數我可以傳遞給delayed_job,以防止它從delayed_jobs表中刪除已完成的作業?
有點像destroy_failed_jobs
但是對於已完成的工作
有任何想法嗎?
擴展@ jefflunt的答案。
我添加了一個遷移來創建一個表來包含已完成的作業
class CreateCompletedJobs < ActiveRecord::Migration
def change
create_table :completed_jobs do |t|
t.integer "priority", :default => 0
t.integer "attempts", :default => 0
t.text "handler", :limit => 2147483647
t.datetime "run_at"
t.datetime "completed_at"
t.string "queue"
t.timestamps
end
end
end
然后一個模塊
class CompletedJob < ActiveRecord::Base
end
最后將鈎子添加到我想要存儲的作業中
def success job
save_completed_job job
end
private
def save_completed_job job
CompletedJob.create({
priority: job.priority,
attempts: job.attempts,
handler: job.handler,
run_at: job.run_at,
completed_at: DateTime.now,
queue: job.queue
})
end
由於我有一個以上的工作,我將成功方法掛鈎放在一個模塊中,並將其包含在我想要存儲的所有工作中。 (注意:有些不值得存放)
它似乎不是這樣。 來自README: https : //github.com/tobi/delayed_job
默認情況下,它將刪除失敗的作業(並且它總是刪除成功的作業)。 如果要保留失敗的作業,請設置Delayed :: Job.destroy_failed_jobs = false。 失敗的作業將標記為非null failed_at。
您可能需要掛鈎到其destroy方法,以便將作業復制到另一個單獨的表,該表為您保留已完成作業的列表,或者只是記錄已對文件執行的作業,如果日志都是您的話需要。
您不想要的是將作業留在delayed_jobs
表中,原因有兩個。 首先,因為delayed_jobs
使用該表作為TODO列表 - 您希望它只是仍然需要完成的事情。 其次,如果你攻擊它以保持所有作業在同一個表中,那么delayed_jobs
表只會增長,這將減慢delayed_jobs
隨時間的處理速度,因為查找尚未完成的作業的查詢將不得不過濾掉那些有 。
你可以使用類似acts_as_paranoid的東西。
它基本上是這樣的:
以下是介紹: http : //technicalpickles.com/posts/embracing-your-paranoia-with-acts_as_paranoid/
注意:acts_as_paranoid很老,可能有更好的解決方案,所以請查看https://www.ruby-toolbox.com/categories/Active_Record_Soft_Delete
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.