2011-10-05 55 views
2

我使用延遲作業版本2.1.4與行動郵件程序3.0.8發送我的電子郵件在後臺。延遲作業乘客生產未定義方法錯誤

UserMailer.delay.newsletter(email) 

它精細的工作與我在開發和生產的Rails 控制檯

但是,當它從我的生活生產乘客服務器調用,它會創建DJ但這DJ運行時,它拋出

{undefined method `newsletter' for #<Class:0xc08afa0> 

我認爲這個問題

任何幫助嗎?

回答

1

問題是與軌道/生產模式類方法

所以乘客,我做了它的解決方案工作...我會嘗試調用實例方法,避免調用方法。

讓我們看一個例子;假設我需要調用後臺下面的方法..

UserMailer.deliver_newsletter(email) 

然後,我創建了一個新的類DelayClassMethod

class DelayClassMethod 
    def initialize(receiver_name, method_name, options={}) 
    @receiver_name = receiver_name 
    @method_name = method_name 
    @parameters = options[:params] || [] 
    end 

    def perform 
    eval(@receiver_name).send(@method_name, *@parameters) 
    end 
end 

,現在可供

DelayClassMethod.new("UserMailer", "deliver_newsletter", :params=>[email]).delay 

在後臺運行的方法所以,我現在在後臺運行一個實例方法,該方法將運行方法。

另一個例子..

假設我想運行

Product.list_all_by_user_and_category(user, category).delay 

然後,它可以通過

DelayClassMethod.new("Product", "list_all_by_user_and_category", :params => [user, category]).delay 
0

我的預感是你有多個版本的delayed_job正在製作中。您是否使用捆綁器來啓動延遲的工作流程?

我會在做bundle install in production時推薦,我會使用--binstubs標誌來生成delayed_job的包裝並使用該可執行文件來啓動作業。

+0

運行沒有,我只有一個版本。我嘗試了bundle exec rake作業:工作但仍然是同樣的錯誤。 –