Ich habe eine Rails-App (v4.2) Ich entwickle und wenn ein Benutzer für die Website registriert, möchte ich sie in meine Mailchimp Mailing-Liste anmelden. Ich habe diesen Prozess als Hintergrundjob mit sucker_punch und dem Gibbon-Juwel implementiert. Lesen Sie hier mehr (Rails Mailchimp Background Job Not Implemented Error)Rails ActiveJob Hintergrund Job hält Pinging Mailchimp wiederholt
Ich habe es funktioniert mit einem After_commit Aufruf in der User.RB-Datei.
Nur das Problem, in das ich jetzt renne, scheint es, dass ActiveJob diese Methode immer wieder erfolgreich ausführt, bis Mailchimp mit einem 400-Fehler antwortet, dass die E-Mail bereits hinzugefügt wurde.
Wie bekomme ich ActiveJob oder diese Methode, um nur die Mailchimp API einmal zu treffen?
Hier ist mein Hintergrund Job:
class AddUserToRegistrationListJob < ActiveJob::Base
queue_as :default
require 'gibbon'
def perform(user_id)
user = User.find(user_id)
email = user.email
first_name = user.first_name
last_name = user.last_name
mailchimp_list_id = "my list id here"
Gibbon::Request.api_key = "my api key here"
Gibbon::Request.timeout = 15
gibbon = Gibbon::Request.new
gibbon.lists("#{mailchimp_list_id}").members.create(
body:
{
email_address: email,
status: "subscribed",
merge_fields: {FNAME: first_name, LNAME: last_name
}})
end
end
Meine user.rb Datei:
after_create :add_user_to_registration_list
def add_user_to_registration_list
AddUserToRegistrationListJob.perform_later(self)
end
Besteht die Möglichkeit, dass der Job eine Ausnahme auslöst und erneut versucht wird? – pdoherty926
Es scheint keine Ausnahmen zu geben, ausgenommen eine verwarnte Warnung zur Verwendung von 'find' – JohnOHFS
Sie sollten Ihre Verwendung von Gibbon ändern, um zuerst zu prüfen, ob der betreffende Benutzer bereits zur Liste hinzugefügt wurde. –