2010-12-11 1 views
4

私は自分のレール3 + herokuアプリでdelayed_jobを使用する方法を学びたいと思っています。Rails 3 - Delayed_Job

私は現在、以下のメールをリクエストしています(遅延ジョブではありません)が動作します。

: "(実行するために応答しない項目をキューに入れることはできません)と、ArgumentError:"

Delayed::Job.enqueue UserMailer.conversation_notification(record.commentable, participant, record, @comments).deliver 

しかし、でそのerror'd:私はこれにdelayed_jobの使用を開始することを更新

UserMailer.conversation_notification(record.commentable, participant, record, @comments).deliver 

UserMailer.delay.conversation_notification(record.commentable, participant, record, @comments) 

しかし、それerror'dと::私も試してみました

NoMethodError (undefined method `delay' for UserMailer:Class): 

delay_jobの達人がいるのですか?私は実際にdelayed_jobを使用するので、それがしばらくしているおかげで

+1

将来のGooglerは、最初にそのけど – brittohalloran

答えて

6

また、あなたはsend_laterを使用することができますメソッドdelay DelayedJobをGemfileに追加しましたか?

gem "delayed_job" 

delayed_jobを含めると、すべてに「遅延」メソッドが追加されるため、

1

は、私はちょうどドキュメントを見ていた、...

ジョブズはperformと呼ばれる方法でRubyのオブジェクトされているので、あなたはありませんエンキューオブジェクトが必要だろう

UserMailer.conversation_notification(record.commentable, participant, record, @comments).deliver 

performの方法です。あなたは未定義になっている場合は

UserMailer.delay.conversation_notification(record.commentable, participant, record, @comments) 

https://github.com/collectiveidea/delayed_job

あなたの第二の方法は.deliver方法を除去する正しかったドキュメントから

UserMailer.conversation_notification(record.commentable, participant, record, @comments).send_later(:deliver) 
+0

おかげで、私は「UserMailer.conversation_notification(record.commentable、参加者、記録、@comments).delay.deliver」を試してみました – AnApprentice

+0

を動作しますが、「NoMethodErrorを取得していないサーバーを再起動してみてください(#の定義されていないメソッド 'delay '):" – AnApprentice

+0

私は上記の間違ったドキュメントを参照して、レール3については、参照してください:https://github.com/collectiveidea/delayed_job – AnApprentice

2

私は遅延を使用して結果が混ざり、デバッグするのが非常に難しいと感じました。あなたは一人ではありません!しかし、あなたがそれを稼働させると、その価値があります。

私はオブジェクトを保存することを学び、遅延を呼びます。通常、私はafter_saveコールバックから自分の仕事を引き起こします。

実験として、私はしばらくの間、別のパターンを使用していました。私は自分が持っている仕事ごとにジョブオブジェクトを作成します。たとえば、私は

Delayed::Job.enqueue(PersonJob.new(@person.id)) 

と呼ぶと思います。私のプロジェクトでは、ジョブオブジェクトを作成します。 Rails 2では、これらをlibに入れています。/ 3の場合は、application.rb configを変更する必要があります。autload_path

class PersonJob < Struct.new(:person_id) 
    def perform 
    person = Person.find(person_id) 
    #do work 
    end 
end 


config.autoload_paths += Dir["#{config.root}/lib/**/"] 
関連する問題