【rails】 非同期処理でメール送信する

※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。

非同期処理でメール送信する

前回と前々回で、Mailerの作成と、Mailerを非同期処理するための準備(redis・sidekiqのインストール)を行った

なぜMailerを非同期処理で送付したいのか?

メール送信の処理はけっこう不安定なので、メール送信に失敗してフォローも失敗してしまうことがある

  1. createafter_create :send_mailcommit
    この流れでインスタンスが作成される(同期処理
  2. send_mailが失敗するとcommitできない

そのため、同期処理ではなく非同期処理でメール送信できるようにしたい


deliver_later 非同期処理にする

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