当有人填写表格时,我正在尝试使用 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
我可以看到在手动执行时记录作业过程,但在通过表单时看不到。
数据库中没有失败的作业。
以前有人遇到过这样的事情吗?