我有一个正在开发的Rails应用程序(v4.2),当用户注册该站点时,我想将它们签署到我的Mailchimp邮件列表中。我用sucker_punch和长臂猿宝石作为后台工作实施了这个过程。在这里阅读更多(Rails Mailchimp Background Job Not Implemented Error)Rails ActiveJob后台作业重复Pinging 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
工作是否有机会提出异常并重试? – pdoherty926
似乎没有任何异常提出,除了有关使用'find'的弃用警告 – JohnOHFS
您应该改变您对长臂猿的使用,以首先检查相关用户是否已被添加到列表中。 –