2017-12-18 4 views
1

Ich füge einige E-Mails in die Warteschlange ein, die verzögerte Jobs verwenden. Die Art und Weise, wie ich einen Job erstelle, ist unten angegeben:Id des erstellten Jobs in verzögerten Jobs erhalten

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

wo EventNotifications ist die Klasse und Erinnerung ist die Methode darin.

Dies erstellt einen Job in der Tabelle "delayed_jobs", aber ich möchte die ID des Jobs erstellt werden, da ich ein benutzerdefiniertes Feld in der Tabelle "delayed_jobs" habe, die ich aktualisieren möchte.

Was zur Zeit nachdem ich die obige Zeile läuft:

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

Dies ist nicht die ID des Job hat, der erstellt wurde. Wie bekomme ich diese ID?

+0

Da Sie in Rails 4.2 und noch nicht Rails 5 sind, können Sie '.provider_job_id' noch nicht verwenden. Aber Sie können [diese "Hacks"] überprüfen (https://stackoverflow.com/questions/29855768/rails-4-2-get-delayed-job-id-from-active-job) –

+0

Ob Sie Objekt-ID oder benötigen Arbeiter-ID? –

+0

@Jay Danke. Ich werde in Ihre Antwort schauen – Yesha

Antwort

1

Sie können ActiveJob umgehen und die DelayedJob API direkt verwenden. Dies hat den Nachteil, dass Sie Ihr Jobsystem nicht abstrahieren. Sie können etwas tun:

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

An diesem Punkt haben Sie Zugriff auf job.id haben.

+0

Diese Methode funktioniert für mich, aber können Sie bitte erklären, was meinst du damit: "Dies hat den Nachteil nicht abstrahieren Sie Ihr Job-System weg" – Yesha

+0

Wenn Sie verwenden Mit ActiveJob können Sie Ihren Code so schreiben, dass er nicht an ein bestimmtes Job-Backend gebunden ist. Wenn Sie beispielsweise delayed_job gerade verwenden, möchten Sie möglicherweise später zu resque (einem anderen Job-Backend) wechseln. Mit ActiveJob ist das wirklich einfach. Mit dem Code, den ich Ihnen gab, müssten Sie zurückgehen und es ändern, wenn Sie zu resque wechseln. –

Verwandte Themen