2012-10-21 39 views
1

我想从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 

我可以看到手动,但不执行,当它时,它经历的形式得到记录的工作过程。

数据库中没有失败的作业。

有人遇到过这样的事情吗?

回答

0

我有类似的问题。一个好的起点是在https://devcenter.heroku.com/articles/delayed-job#debugging的信息 - 特别是,在Heroku控制台上运行Delayed::Job.last.last_error

在我的情况下,我得到的错误是Job failed to load: uninitialized constant Syck::Syck,这是通过将psych添加到我的gem文件中修复的。见Delayed_job: Job failed to load: uninitialized constant Syck::Syckhttp://effectif.com/ruby-on-rails/syck-and-psych-yaml-parsers-on-heroku

0

你需要用命令

rake jobs:work

您的Heroku轨控制台启动工作。

相关问题