我有一个正在开发的 Rails 应用程序 (v4.2),当用户注册该站点时,我想将它们注册到我的 Mailchimp 邮件列表。我已经使用 Sucker_punch 和 gibbon gem 将此过程作为后台作业实现。在此处阅读更多信息(Rails Mailchimp 后台作业未实现错误)
我已经使用 user.rb 文件中的 after_commit 调用让它工作了。
我现在遇到的唯一问题是 ActiveJob 似乎会一遍又一遍地成功执行此方法,直到 Mailchimp 以 400 错误响应电子邮件已添加。
我怎样才能让 ActiveJob 或这种方法只点击 Mailchimp API 一次?
这是我的背景工作:
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
我的 user.rb 文件:
after_create :add_user_to_registration_list
def add_user_to_registration_list
AddUserToRegistrationListJob.perform_later(self)
end