如何在Rails中跟踪延迟的工作?

时间:2013-11-17 16:46:06

标签: ruby-on-rails ruby model amazon-ec2 delayed-job

如果我理解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 以及如何在那里写一些信息?

因为看起来与延迟作业相关的所有内容都在后台运行。

由于

1 个答案:

答案 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