したがって、バックグラウンドで実行したいと思うヘルパーに多くのデータベース操作があります。例として、私はユーザヘルパーでrecord_activityメソッドを定義します。ポストは私が投稿コントローラでメソッドを作成するには、すなわち、この活動を記録したい作成されるとき:delay_jobを使用してユーザー定義のヘルパーメソッドを遅延させます
def create
#operations to save the post
record_activity(user, post)
end
パフォーマンス上の理由から、私はこのrecord_activityと他人を遅らせるようにしたい、そしてバックに労働者とそれらを実行します終わり。私はdelayed_jobを使ってメーラーを遅らせ、それはうまく機能します。
:レールコンソールで、method.delay、すなわち素晴らしい作品私は、レールコンソールで行うことができます:コントローラに書き込まれたときに、次はまだ遅れていない、ライブ走るすなわちしかし、同じ.delayは動作しませんrecord_activity.delay
def create
#operations to save the post
record_activity(user, post).delay
end
なぜですか?私は1つのアプリでRails 3.0.9を使用していて、もう1つはRails 3.1.3を使用しています。さらに、2.1.4のdelayed_jobを持っています。
誰もこの仕事をする方法を提案できますか?
EDIT *
私はmu_is_too_shortが提供する答えが正しい道だと思います。遅延ジョブが作成されますが、record_activityメソッドは正しく実行されません。 delayed_jobワーカーが起動すると、delayed_jobを実行し、エラーはなく、動作しているかのようにレコードを削除します。しかし、活動は記録されません。
self.delay.record_activity(user, @comment)
と方法:
def record_activity(current_user, act)
activity = Activity.new
activity.user_id = current_user.id
activity.act_id = act.id
activity.act_type = act.class.name
activity.created_at = act.created_at
activity.save
end
私は、その後に、多分私はユーザー変数を通過できなかったと思ったいくつかのコンテキストを与えるために、ここでのコールと私は今、トラブルシューティング午前方法がありますこの場合、整数値などを渡すだけです。私はdelayed_job労働者を再起動し、無駄に、これらの方法を試してみました:
self.delay.record_activity(user.id, @comment.id, @comment.class.name, @comment.created_at)
、変更方法:
def record_activity(current_user_id, act_id, act_type, act_created_at)
activity = Activity.new
activity.user_id = current_user_id
activity.act_id = act_id
activity.act_type = act_type
activity.created_at = act_created_at
activity.save
end
これはかなりうまく見え、遅延ジョブを作成します。ただし、実行すると、record_activityは正常に完了しません(つまり、アクティビティレコードは作成されません)が、エラーは発生しません。そのため、ジョブはdelayed_jobsテーブルから消えます。仕事を遅らせることの限界は何ですか?ここにアドバイスはありますか?ここで問題が遅れているのですか? – jay
@jay:あなたの退職した労働者を再開しましたか?彼らは何も自動リロードしません。 'record_activity'はどのように見えますか? 'delay'コールなしで正常に動作しますか? –
がテストを再開しました。質問にrecord_activityを追加します(テストしたバリエーションも同様)。 – jay