2011-08-10 15 views
4

handle_asynchronouslyを使用しているとき、私はエラーを取得する宝石としてレール2.3.11とdelayed_job 2.0.4を使用して:Delayed_job:NoMethodError:未定義のメソッド `my_method_without_delay '

私actionmailerのモデルでは、私がmy_methodをdelcaredて、コメントを追加' handle_asynchronously:右の宣言の後my_method」:

class MailSender < ActionMailer::Base 
    def my_method 
     ... 
    end 
    handle_asynchronously :my_method 
end 

タスクが正常にキューに追加されMailSender.deliver_my_methodを呼び出します。それを処理しようとする。しかし、それはエラーメッセージで失敗します取り組んでいる

undefined method `rappel_email_without_delay' for #<YAML::Object:0x1034b85f8> 

MailSender.delay.deliver_my_methodを遅らせると正しく処理タスク - 私はむしろ常にで送信されたメールを確実にするためにhandle_asynchronously国連私のモデルを使用したいです背景...

答えて

0

handle_asynchronouslyマクロを使用して宣言することはできますが、ActionMailerで遅延したジョブを呼び出す構文は少し異なります。

# without delayed_job 
MailSender.my_method.deliver 

# with delayed_job 
MailSerder.delay.my_method 

これは、READMEの旧バージョンから引っ張ったが、それは現在のものではない、ので、多分遅延ジョブの新しいバージョンは、このニュアンスを中心に働きました。

+0

これはRails 3メーラーのようです - 私はレール上にあります。2.3.x .delayの使用は私が今やっていることです。それでも、私は、私のメーラーモデル – LapinLove404

0

同じ問題が発生し、最終的に次のようなメッセージが表示されました。post基本的にdelayed_jobワーカーは非ActiveRecordオブジェクトをアンマーシャリングするのが難しいようです。私のために働いたクイックフィックスは、イニシャライザまたはenvironment.rbでクラスを要求することです。あなたは

rake jobs:work

6

はまた、3.2.3でこの問題がありました。

コードを変更するたびにDJプロセスを再起動するように修正しました。

+0

には、delayed_jobが単独で動作するはずなので、必要ではないと思われる 'handle_asynchronously'を使いたいと思います。これについて調べる方法は? – Ben

5

を使用してワーカープロセスを再起動する必要が

# config/environment.rb 
... 
require 'mail_sender' 
+0

Yeap、これで修正されました。 Railsコンソールで少しでも苦労します。 – rcd