

よろしくお願い致します。

Heroku環境  
Rails 5.1.5  
gem `delayed_job`/`daemons`/`capistrano`導入済み

ActiveJobを利用して非同期でメール送信を行ないたいと思っています。  
開発環境ではletter_openerを使用してメールが届くことをすでに確認済みです。

【現在の状況】  
モデルでメール送信用のメソッドを記述

[code]

    def self.notification
      NoticeMailer.notification.deliver_later
    end
    
[/code]

Capfile

[code]

    require 'capistrano/delayed_job'
    
[/code]

config/deploy.rb

[code]

    set :delayed_job_workers, 1
    set :delayed_job_roles, [:app]
    
[/code]

【問題】  
Heroku側でメール送信を試みた際、ログを見る限りジョブをキューに追加するところまではできているのに、送信ができていないと言う状況です。  
手動で`heroku run rails jobs:worker`とワーカーを起動すると、メールを送信することができます。  
また、メール送信のメソッドを`deliver_later`ではなく`deliver_now`へ変更した場合もメール送信できています。

【自分で試した方法】  
Herokuのガイドを参考に、

Procfile

[code]

    worker: rails jobs:work
    
[/code]

モデル側

[code]

    def self.notification
      NoticeMailer.delay.notification
    end
    
[/code]

へ変更してみましたが、結果変わらず手動でワーカーを立ち上げない限り、メールが届かないと言う状況です。

【懸念点】  
「daemonsを導入しているにも関わらず、ワーカーが立ち上がっていない」という点が問題なのではないかと考えています。  
関係のありそうなファイルにrequire 'daemons'してみたりなどしてみましたが、効果がなく…

何か良い方法をご存知の方はいらっしゃいませんでしょうか。  
よろしくお願い致します。


CC BY-SA 3.0
2018-03-29T06:37:21.887
42741
2018-03-29T07:43:13.707
2018-03-29T07:43:13.707
2238
27931
question
ruby-on-rails heroku
ActionMailer「deliver_later」でメールが送信できない