2012-10-21 46 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軌控制檯啓動工作。

相關問題