Rails ActiveJob 后台作业不断重复 Ping Mailchimp
Rails ActiveJob Background Job Keeps Pinging Mailchimp Repeatedly
我有一个正在开发的 rails 应用程序 (v4.2),当用户注册该站点时,我想让他们注册到我的 Mailchimp 邮件列表。我已经使用 sucker_punch 和长臂猿 gem 将此过程作为后台作业实现。在这里阅读更多 (Rails Mailchimp Background Job Not Implemented Error)
我使用 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
MailChimp v3 的 Gibbon 界面已再次更新 API,并且有一个新功能 'upsert' in a one liner. From the RubyDoc:
If you want to upsert instead, you would do the following:
gibbon.lists(list_id).members(lower_case_md5_hashed_email_address).upsert(body: {email_address: "foo@bar.com", status: "subscribed", merge_fields: {FNAME: "First Name", LNAME: "Last Name"}})
要获取哈希,此代码应该有效:
require 'digest'
lower_case_md5_hashed_email_address = Digest::MD5.new.update(email.downcase).hexdigest
如果成员已经订阅了相关列表,这应该可以通过确保 upsert
命令是空操作来解决您的错误。
我有一个正在开发的 rails 应用程序 (v4.2),当用户注册该站点时,我想让他们注册到我的 Mailchimp 邮件列表。我已经使用 sucker_punch 和长臂猿 gem 将此过程作为后台作业实现。在这里阅读更多 (Rails Mailchimp Background Job Not Implemented Error)
我使用 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
MailChimp v3 的 Gibbon 界面已再次更新 API,并且有一个新功能 'upsert' in a one liner. From the RubyDoc:
If you want to upsert instead, you would do the following:
gibbon.lists(list_id).members(lower_case_md5_hashed_email_address).upsert(body: {email_address: "foo@bar.com", status: "subscribed", merge_fields: {FNAME: "First Name", LNAME: "Last Name"}})
要获取哈希,此代码应该有效:
require 'digest'
lower_case_md5_hashed_email_address = Digest::MD5.new.update(email.downcase).hexdigest
如果成员已经订阅了相关列表,这应该可以通过确保 upsert
命令是空操作来解决您的错误。