開発中の Rails アプリ (v4.2) があり、ユーザーがサイトに登録したら、Mailchimp メーリング リストにサインアップしたいと思います。このプロセスは、sucker_punch と gibbon gem を使用してバックグラウンド ジョブとして実装しました。詳細はこちら ( Rails Mailchimp Background Job Not Implemented Error )
user.rb ファイルで after_commit 呼び出しを使用して動作させました。
私が今直面している唯一の問題は、メールが既に追加されているという 400 エラーで Mailchimp が応答するまで、ActiveJob がこのメソッドを何度も正常に実行するように見えることです。
ActiveJob またはこのメソッドを取得して、Mailchimp API を 1 回だけヒットさせるにはどうすればよいですか?
これが私のバックグラウンドジョブです:
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