1

私は開発中のrails app(v4.2)を持っています。ユーザがサイトに登録すると、Mailchimpメーリングリストに登録したいと思います。私はsucker_punchとgibbonの宝石を使ってこのプロセスをバックグラウンドジョブとして実装しました。もっと読む(Rails Mailchimp Background Job Not Implemented ErrorRails ActiveJobのバックグラウンドジョブはMailchimpを繰り返しpingしています

私は、user.rbファイルのafter_commit呼び出しを使って動作させています。

ActiveJobはMailchimpが電子メールが既に追加された400のエラーで応答するまで何度もこのメソッドを繰り返し実行しているようです。

MailChimp APIを1回押すだけで、ActiveJobまたはこのメソッドを取得する方法を教えてください。

は、ここに私のバックグラウンドジョブです:

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 
+0

ジョブが例外を発生して再試行される可能性はありますか? – pdoherty926

+0

問題のユーザーがすでにリストに追加されている場合は、最初のチェックにギボンの使用を変更する必要があります – JohnOHFS

+0

「検索」の使用方法について廃止の警告を除き、提起されているすべての例外があるように表示されません。 –

答えて

2

ギボンインタフェースはMailChimpのAPIのv3のために再び更新されている、との新機能があります'upsert'を1つのライナーに入れます。ハッシュを取得する

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: "[email protected]", status: "subscribed", merge_fields: {FNAME: "First Name", LNAME: "Last Name"}}) 

、このコードは動作するはずです::RubyDocから

require 'digest' 
lower_case_md5_hashed_email_address = Digest::MD5.new.update(email.downcase).hexdigest 

これはupsertコマンドを確保することによって、あなたのエラーを解決する必要があるメンバーがすでにサブスクライブされている場合は何もしません問題のリスト

+0

"lower_case_md5_hashed_email_address"の目的は何ですか?私はダイジェストの宝石が必要だと思っていますか? – JohnOHFS

+0

@ JohnOHFSおそらくMailChimpが電子メールアドレスを一意に識別するための方法です。 DigestはRuby標準ライブラリの一部です。それを参照するファイルの先頭に「ダイジェスト」を要求することができます。 –

関連する問題