目次 閉じる
非同期処理でメール送信する
前回と前々回で、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
enddeliver_nowは「今すぐ送る」という意味なのでdeliver_laterにする
private
def send_email
RelationshipMailer.new_follower(following, follower).deliver_later
endsidekiqを動かしていると、この処理が有効になる
sidekiqのログには↓のように表示される
2025-01-07T12:32:57.408Z pid=23936 tid=424 class=ActionMailer::MailDeliveryJob jid=bc62c6d97f7f5f58d15d4bac elapsed=0.084 INFO: doneclass=ActionMailer::MailDeliveryJobが動いていることがわかる
これで、メール送信の処理が失敗してもフォローはできている
#DAY10
