【问题标题】:Rails ActiveJob Background Job Keeps Pinging Mailchimp RepeatedlyRails ActiveJob 后台作业不断 Ping Mailchimp
【发布时间】: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


【解决方案1】:

Gibbon 接口已针对 MailChimp API v3 再次更新,并且在单行中添加了“upsert”的新功能。来自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 命令是无操作来解决您的错误。

【讨论】:

  • “lower_case_md5_hashed_email_address”的目的是什么?我应该把那行代码放在哪里?我假设我也需要 Digest gem?
  • @JohnOHFS 据推测,这就是 MailChimp 可以最快地唯一识别电子邮件地址的方式。 Digest 是 Ruby 标准库的一部分;您可以在引用它的文件顶部要求“摘要”。
猜你喜欢
  • 2015-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-29
  • 2011-12-01
  • 2017-02-11
相关资源
最近更新 更多