我想從Heroku上的Rails 3.2應用程序中使用延遲作業發送電子郵件,當有人填寫表單時。我已經能夠通過本地開發機器上的延遲作業成功發送電子郵件。如果我通過Heroku上的控制檯手動運行它們,我也可以使用延遲作業發送電子郵件。但是,當某人提交觸發電子郵件的表單時,它將不會發送。Heroku不通過控制器發送延遲的工作電子郵件
這裏是我的郵件:
class ClaimMailer < ActionMailer::Base
default from: "[email protected]"
def patron(claim)
mail(:to => claim.email, :subject => I18n.t('mailers.claims.patron.subject'))
end
def coatchex(claim)
@claim = claim
mail(:to => '[email protected]', :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
我可以看到手動,但不執行,當它時,它經歷的形式得到記錄的工作過程。
數據庫中沒有失敗的作業。
有人遇到過這樣的事情嗎?