2017-12-18 152 views
1

我正在使用延遲作業在隊列中添加一些電子郵件。我創建一個工作的方式如下:獲取延遲作業中創建作業的ID

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?

+0

既然你是在Rails 4.2中,而不是Rails 5,你將不能使用'.provider_job_id'。但你可以檢查[這些「黑客」](https://stackoverflow.com/questions/29855768/rails-4-2-get-delayed-job-id-from-active-job) –

+0

無論你需要對象ID或工人ID? –

+0

@Jay謝謝。我會看看你的回答 – Yesha

回答

1

您可以繞過ActiveJob並直接使用DelayedJob API。這有不利於你的工作系統的抽象。你可以這樣做:

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

在這一點上,你可以訪問job.id

+0

這種方法適用於我,但是請你解釋一下你的意思:「這有不利於你的工作系統不被抽象的缺點」 – Yesha

+0

當你使用ActiveJob,它可以讓你編寫你的代碼,使它不受限於任何特定的作業後端。例如,如果您現在使用的是delayed_job,則可能稍後要切換到resque(不同的作業後端)。使用ActiveJob,這非常簡單。 隨着我給你的代碼,你必須回去改變它,當你切換到resque。 –