2012-08-03 69 views
1

我試圖發送電子郵件使用Resque和Resque_mailer寶石,但發送電子郵件作業排隊後失敗。我使用了Google,stackoverflow,並且測試了許多不同的代碼實現,到目前爲止還沒有任何工作。Resque_mailer undefined方法'執行'爲郵件類

我有以下實現:

版本: 軌(3.2.6) resque(1.21.0) resque_mailer(2.1.0)

控制器代碼:

def send_newsletter 
    User.find_in_batches(:batch_size => 1000) do |users| 
    users.each { |user| AdminMailer.newsletter(user.email).deliver } 
    end 
end 

郵寄編號:

class AdminMailer < ActionMailer::Base 
    include Resque::Mailer 

    def newsletter(user_email) 
    mail(:to => user_email, :subject => "New Feature", :from => "[email protected]") 
    end 

end 

作業正在排隊(我可以在郵件隊列中的Web界面中看到它們),但失敗。這是失敗的錯誤信息:

Exception: NoMethodError 
Error: undefined method `perform' for AdminMailer:Class 

這很奇怪,因爲在我的本地開發機器中,作業正在完成而沒有錯誤。有沒有什麼我想讓它在引擎工廠生產的工作?

我已經運行其他resque作業,不包括髮送電子郵件或使用resque_email就好了。

我會很感激任何形式的幫助,提前致謝!

回答

0

修正問題:

的問題是,在生產中,Resque過程並沒有當我部署我的應用程序EngineYard的重新啓動正常。

EngineYard具有部署掛鉤,您可以在部署過程中的某些點運行代碼。

after_symlink部署鉤子中,要運行的正確代碼是:sudo "monit restart all -g app_name_resque"。其中app_name是您的應用的名稱。另外,在before_restart deploy hook中,您需要運行:run "sudo monit start all -g fractalresque_resque"

這解決了我的問題!