【发布时间】:2016-12-25 16:31:38
【问题描述】:
我正在开发一个 Rails 应用程序 (v4.2),当用户注册该站点时,我想将它们注册到我的 Mailchimp 邮件列表。我已经使用 Sucker_punch 和 gibbon 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
【问题讨论】:
-
作业是否有可能引发异常并被重试?
-
除了关于使用“查找”的弃用警告外,似乎没有引发任何异常
-
你应该改变你对 Gibbon 的使用,首先检查有问题的用户是否已经被添加到列表中。
-
我没有看到一个长臂猿方法来检查订阅者是否已经在@JimVanFleet 列表中
标签: ruby-on-rails mailchimp rails-activejob gibbon sucker-punch