モデル ID を受け取り、それを取得して、取得したアイテムのメソッドを呼び出す単純な resque ジョブがあります。
class CupcakeWorker
@queue = :cupcake_queue
def self.perform(cupcake_id)
@cupcake = Cupcake.find(cupcake_id)
p @cupcake
end
end
「enqueue」メソッドを使用して、Cupcake のモデル after_commit からキューに入れます。
def bake
Resque.enqueue(CupcakeWorker, self.id)
end
ジョブはキューに入れられ、正しく実行されます。ただし、データベースまたは UI を使用してレコードのデータを変更し、ジョブを再度キューに入れると、操作は新しい値を使用して実行されません。
resqueワーカープロセスを再起動した場合にのみ、新しい値を取得できます。resque はオブジェクトをキャッシュしていますか? ワーカーが呼び出されるたびにデータベースから再取得する方法はありますか?
編集:
クエリログも取得しました...カップケーキをフェッチする選択クエリの前にコミットが発生します..したがって、これは順序の競合状態でも、クエリがフェッチするときのキャッシュの問題でもありません...私は無知な人です. 。 どうなり得るか? ところで、Rails 2.3.8 と redis n resque コンボで after_commit gem を使用しています。