1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ApplicationJobからメールを飛ばす時はdeliver_nowを使う

Posted at

タイトルどおりですが、ちょっとハマったのでメモ

ジョブ実行完了したらメールを飛ばしたくて、以下のように実装しました

XxxxJob.rb
Mailer.send_mail(user).deliver_later

で、軽く動作確認…
ログでキューに入ってるの確認、
rails consoleで上記実行してletter_openerで見れた

ヨシっと思っていざ検証環境に上げたらメールが飛ばない、、、

色々デバッグしたりしてもわからず、ネット検索でも特に引っかからず、参ったなぁとrailsのドキュメントを開くと……

一般に、非同期キュー(.deliver_laterでメールを送信するなど)はRakeタスクに書いても動きません。Rakeが終了すると、.deliver_laterがメールの処理を完了する前にインプロセスのスレッドプールを削除する可能性があるためです。この問題を回避するには、.deliver_nowを用いるか、development環境で永続的キューを実行してください。

思いっきり書いてありましたorz
deliver_nowにしたら何事もなくメール飛んできました

XxxxJob.rb
Mailer.send_mail(user).deliver_now

ちなみにdeliver_laterにしたのは、既存処理がそうなってて、まあ非同期の方がいいよね〜となんとなく引っ張ってきたからでした
というわけで、jobからメール飛ばす時はdeliver_nowを使いましょう

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?