如果我理解delayed job如何,那么我有一个方法,我可以用延迟工作来调用它。在这种情况下,将有关此“作业”的记录放入表 delayed_jobs 中,同时将自动运行一个守护程序,该守护程序将在此表中处理另一个记录。
表的结构如下所示:
create_table "delayed_jobs", :force => true do |t|
t.integer "priority", :default => 0, :null => false
t.integer "attempts", :default => 0, :null => false
t.text "handler", :null => false
t.text "last_error"
t.datetime "run_at"
t.datetime "locked_at"
t.datetime "failed_at"
t.string "locked_by"
t.string "queue"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
现在,这是我想使用延迟作业算法的任务。用户可以在我的网站上传文件。这些文件可能很大 - 例如400MB,我想为此目的使用延迟作业。
因此,用户选择他想要上传的文件,记录将被放到delayed_jobs
表中,现在,我想告诉该用户,他/她的文件已被处理。但是什么时候会同时上传几个用户,让我们说5,我怎么能识别出用户“A”的上传仍在进行中?如何将自己的列添加到 delayed_jobs 以及如何在那里写一些信息?
因为看起来与延迟作业相关的所有内容都在后台运行。
由于
答案 0 :(得分:1)
您可以编写自己的Custom job,以便存储额外的数据(例如user_id
)。当作业通过success
方法成功时,您还可以利用Hooks执行某些操作。
例如:
class FileUploadJob < Struct.new(:user_id, :filename, :file)
def perform
# upload the file
end
def success(job)
# notify user of success
end
end