誰かがフォームに記入したときに、Heroku の Rails 3.2 アプリから遅延ジョブを使用してメールを送信しようとしています。ローカル開発マシンで遅延ジョブを介して電子メールを正常に送信することができました。Heroku のコンソールから手動で実行すると、遅延ジョブを使用してメールを送信することもできます。ただし、誰かがメールをトリガーするフォームを送信すると、メールは送信されません。
これが私のメーラーです:
class ClaimMailer < ActionMailer::Base
default from: "noreply@coatchex.com"
def patron(claim)
mail(:to => claim.email, :subject => I18n.t('mailers.claims.patron.subject'))
end
def coatchex(claim)
@claim = claim
mail(:to => 'claims@coatchex.com', :subject => I18n.t('mailers.claims.coatchex.subject'))
end
end
これが私のコントローラーです:
class ClaimsController < ApplicationController
layout 'basic'
def new
@claim = CoatChex::Forms::Claim.new
end
def create
@claim = CoatChex::Forms::Claim.new(params[:claim])
if @claim.valid?
ClaimMailer.delay.coatchex(@claim)
render :thank_you
else
render :new
end
end
end
前述したように、Heroku コンソールから次のコマンドを実行すると、電子メールが遅延ジョブのキューに入れられ、正常に送信されます。
@claim = ...
ClaimMailer.delay.coatchex(@claim)
ただし、フォームから送信するたびにトリガーされません。
私が十分に迅速であれば、Heroku コンソールで Delayed::Job.count を実行し、フォームから送信するときにジョブが実行される前に値 1 を確認できます。だから私は遅れた仕事がそれを手に入れていることを知っています。を使用してワーカーログを見ると
heroku logs -p worker -t
ジョブ プロセスを手動で実行するとログに記録されますが、フォームを通過するときはログに記録されません。
データベースに失敗したジョブはありません。
誰かが前にこのようなことに出くわしましたか?