【Rails】deliver_laterで送信したはずのメールがletter_openerでプレビューできない
困ったこと
すでに開発されているプロジェクトで.deliver_later
を使ってメールを送信している箇所がletter_openerでプレビューされなかった。
deviseを使った招待メールはプレビューで確認できているのに。。
結論
ローカル環境でジョブの実行がされていなかったことが原因。
delayed_job
を使っているプロジェクトの場合はrake jobs:work
でジョブの実行したら、今まで送信されていなかったメールが一気に送信されました。
学び
deliver_laterメソッド
▼ Railsガイドの説明
deliver_laterを使うと、Active Jobによるメールキューにメールを登録できます。これにより、コントローラは送信完了を待たずに処理を続行できます。
つまり以下のようなアクション内のコードで.deliver_later
の処理は遅延されずに実行することができます。
class UsersController < ApplicationController def send_email user = User.find(params[:id]) UserMailer.welcome_email(user).deliver_later # この時点でメールは非同期に送信され、処理はすぐに続行される ... end end
実際にdeliver_later
後のdelayed_jobsテーブルを確認すると、キューのレコードが生成されています。
rake jobs:work
でジョブの実行していたら、このキューが実行されるというわけですね。。