我想从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
我可以看到手动,但不执行,当它时,它经历的形式得到记录的工作过程。
数据库中没有失败的作业。
有人遇到过这样的事情吗?