【问题标题】:How to track delayed jobs in Rails?如何在 Rails 中跟踪延迟的作业?
【发布时间】:2013-11-18 01:05:57
【问题描述】:

如果我理解delayed job 的方法,那么我有一个方法,我可以用延迟作业调用它。在这种情况下,将把关于这个“作业”的这条记录放入表 delayed_jobs 中,同时将自动运行一个守护进程,该守护进程将处理该表中的一条记录。 p>

表格结构如下:

  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以及如何在其中写入一些信息?

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

谢谢

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2019-05-12
      • 2013-11-26
      • 1970-01-01
      • 2012-04-20
      • 1970-01-01
      • 2011-03-04
      • 2016-07-23
      • 2023-04-03
      • 1970-01-01
      相关资源
      最近更新 更多