Ran*_*Ran 8 ruby-on-rails delayed-job
是否有一个参数我可以传递给delayed_job,这将阻止它从delayed_jobs表中删除已完成的作业?
有点像destroy_failed_jobs完成的工作
有任何想法吗?
看起来不是这样。来自自述文件:https : //github.com/tobi/delayed_job
默认情况下,它会删除失败的作业(并且总是删除成功的作业)。如果要保留失败的作业,请设置 Delayed::Job.destroy_failed_jobs = false。失败的作业将被标记为非空 failed_at。
您可能需要挂钩到它的 destroy 方法,以便它将作业复制到另一个单独的表,该表为您保留已完成的作业列表,或者简单地将哪些作业已完成记录到文件中,如果您只需要一个日志需要。
delayed_jobs出于几个原因,您不想将工作留在桌面上。首先,因为delayed_jobs使用该表作为待办事项列表 - 您希望它只是仍然需要完成的事情。其次,如果您修改它以将所有作业保留在同一个表中,那么该delayed_jobs表只会增长,这会delayed_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
Run Code Online (Sandbox Code Playgroud)
然后一个模块
class CompletedJob < ActiveRecord::Base
end
Run Code Online (Sandbox Code Playgroud)
最后将钩子添加到我想要存储的作业中
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
Run Code Online (Sandbox Code Playgroud)
由于我有一个以上的工作,我将成功方法挂钩放在一个模块中,并将其包含在我想要存储的所有工作中.(注意:有些不值得存放)
| 归档时间: |
|
| 查看次数: |
3403 次 |
| 最近记录: |