※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。
非同期処理でメール送信する
前回と前々回で、Mailerの作成と、Mailerを非同期処理するための準備(redis・sidekiqのインストール)を行った
なぜMailerを非同期処理で送付したいのか?
メール送信の処理はけっこう不安定なので、メール送信に失敗してフォローも失敗してしまうことがある
create
→after_create :send_mail
→commit
この流れでインスタンスが作成される(同期処理)send_mail
が失敗するとcommit
できない
そのため、同期処理ではなく非同期処理でメール送信できるようにしたい
app/models/relationship.rbを開く
private
def send_email
RelationshipMailer.new_follower(following, follower).deliver_now
end
deliver_now
は「今すぐ送る」という意味なのでdeliver_later
にする
private
def send_email
RelationshipMailer.new_follower(following, follower).deliver_later
end
sidekiqを動かしていると、この処理が有効になる
sidekiqのログには↓のように表示される
2025-01-07T12:32:57.408Z pid=23936 tid=424 class=ActionMailer::MailDeliveryJob jid=bc62c6d97f7f5f58d15d4bac elapsed=0.084 INFO: done
class=ActionMailer::MailDeliveryJob
が動いていることがわかる
これで、メール送信の処理が失敗してもフォローはできている
#DAY10