【问题标题】:Get Id of created Job in Delayed Jobs获取延迟作业中已创建作业的 ID
【发布时间】:2018-05-31 16:49:13
【问题描述】:

我正在使用延迟作业在队列中添加一些电子邮件。我创建工作的方式如下:

EventNotifications.reminder("email", "name", id).deliver_later

其中 EventNotifications 是类,提醒是其中的方法。

这会在delayed_jobs 表中创建一个作业,但我想获取创建的作业的ID,因为我在delayed_jobs 表中有一些要更新的自定义字段。

运行上述行后我目前得到的是:

#<ActionMailer::DeliveryJob:0x00000005eb22d8 @arguments=["EventNotifications", "reminder", "deliver_now", "email", "name", 12], @job_id="6a549235-e8c1-407b-ac75-be8736559eaa", @queue_name="mailers">

这没有创建的作业的 ID。我如何获得该 ID?

【问题讨论】:

  • 因为您使用的是 Rails 4.2 而还不是 Rails 5,所以您还不能使用 .provider_job_id。但是你可以查看these "hacks"
  • 你需要object id还是worker id?
  • @Jay 谢谢。我会调查你的答案
  • @NatarajaB 我需要对象 ID

标签: ruby-on-rails ruby-on-rails-4 delayed-job


【解决方案1】:

您可以绕过 ActiveJob 并直接使用 DelayedJob API。这样做的缺点是不会将您的工作系统抽象掉。你可以这样做:

job = EventNotifications.delay.reminder("email", "name", id)

此时,您可以访问job.id

【讨论】:

  • 这个方法对我有用,但你能解释一下你的意思是什么吗:“这有不抽象你的工作系统的缺点”
  • 当您使用 ActiveJob 时,它可以让您以不与任何特定作业后端绑定的方式编写代码。例如,如果您现在正在使用delayed_job,您可能希望稍后切换到resque(不同的作业后端)。使用 ActiveJob,这真的很容易。使用我给你的代码,当你切换到 resque 时,你必须返回并更改它。
猜你喜欢
  • 2015-07-03
  • 2013-05-01
  • 2016-03-29
  • 2012-03-29
  • 2016-03-29
  • 2020-10-23
  • 2011-12-14
  • 2022-11-10
  • 1970-01-01
相关资源
最近更新 更多