1

誰かがフォームに記入したときに、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

ジョブ プロセスを手動で実行するとログに記録されますが、フォームを通過するときはログに記録されません。

データベースに失敗したジョブはありません。

誰かが前にこのようなことに出くわしましたか?

4

2 に答える 2

0

同様の問題がありました。良い出発点は、https://devcenter.heroku.com/articles/delayed-job#debuggingの情報、具体的Delayed::Job.last.last_errorには Heroku コンソールでの実行です。

私の場合、エラーは でした。これは、gemfileJob failed to load: uninitialized constant Syck::Syckに追加することで修正されました。psychDelayed_jobを参照してください: ジョブの読み込みに失敗しました: 初期化されていない定数 Syck::Syckおよびhttp://effectif.com/ruby-on-rails/syck-and-psych-yaml-parsers-on-heroku

于 2013-02-17T13:48:02.177 に答える