加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails 4.2从活动作业中获得延迟的作业ID

发布时间:2020-12-17 04:27:07 所属栏目:百科 来源:网络整理
导读:知道如何从ActiveJob入队获取Delayed :: Job id吗?当我排队一个工作时,我用@job_id返回一个ActiveJob :: Base实例,但该工作ID似乎是ActiveJob内部的.到目前为止,我最好的猜测就是走下最近创建的工作: active_job_id = GenerateReportJob.perform_later(sel
知道如何从ActiveJob入队获取Delayed :: Job id吗?当我排队一个工作时,我用@job_id返回一个ActiveJob :: Base实例,但该工作ID似乎是ActiveJob内部的.到目前为止,我最好的猜测就是走下最近创建的工作:
active_job_id = GenerateReportJob.perform_later(self.id).job_id
delayed_job = Delayed::Job.order(id: :desc).limit(5).detect do |job|
  YAML.load(job.handler).job_data['job_id'] == active_job_id
end

但这似乎是各种各样的hacky.有点惊讶的ActiveJob没有从Delayed :: Job返回ID,特别是因为这是在作业入队时显式返回的内容.

==编辑

看起来我不是唯一一个(https://github.com/rails/rails/issues/18821)

解决方法

如果有人在将来发现这个:Rails刚刚接受了一个补丁,允许你从Rails 5中的provider_job_id获取这个id.你可以使用像这样的补丁来使用它
ActiveJob::QueueAdapters::DelayedJobAdapter.singleton_class.prepend(Module.new do
  def enqueue(job)
    provider_job = super
    job.provider_job_id = provider_job.id
    provider_job
  end

  def enqueue_at(job,timestamp)
    provider_job = super
    job.provider_job_id = provider_job.id
    provider_job
  end
end)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读