2011-11-09 5 views
0

レコードが更新されるたびに、つまり新しいレコードが作成/更新されるたびにcron rakeタスクを実行したい場合、cron rakeタスクはレコードに対して何らかの処理を行い、結果を保存します。モデルのレコードが変更されるたびにレーキタスクを実行する方法は? (ベストプラクティス)

ただし、このタスクはプロセッサに集中し、ユーザーがレコードを更新した場合にのみ実行するのが理にかなっています。

レーキタスクが既に特定のレコードを処理しているかどうかをプログラマチックに判断する最良の方法は何ですか(ユーザーはまったく変更していません)。

私は各レコードのハッシュを生成し、それが変更されているかどうかを確認するためにそれを使用することを考えています。 これを行うにはより効率的な方法が必要です。助けのための

おかげで、 アレックス

答えて

2

は、私はあなたがむしろたびクーロン/よりDelayedJobを使うべきだと思います。

とにかく、バリデーションや保存前/後にフィルタを実行する方が良いと思いませんか? before_saveフィルタとしてこの機能を実装した場合は、ダーティ属性を使用できます。ここで見つけることができる汚れた属性の詳細:http://ryandaigle.com/articles/2008/3/31/what-s-new-in-edge-rails-dirty-objects

+0

ご返信ありがとうございます。 汚れた属性がその仕事をするかどうかはわかりませんが、私は例を挙げます(下記参照): – Alex

+0

ユーザーは 'pages' -exの外観を設定できます。色を変更します。 バックグラウンドジョブは、外部APIを使用して、このページのスナップショットを作成する必要があります。各更新後にこのタスクを遅延ジョブで実行できますが、ユーザーは1つに収まる前に多数の色の組み合わせをテストできます。私がDJを使用すると、私のアプリはいくつかのバックグラウンドジョブを呼び出し、多くのことを複雑にします。最も効率的なアプローチは、3〜4時間ごとにスケジュールされたタスクを実行し、レコードの更新を確認してからタスクを実行することです。レコードが変更されていない場合は、すでに実行されているジョブ全体をスキップします。 アイデア – Alex

関連する問題