0

sidekiq で何が起こっているのかわかりません。昨日はこれがうまくいったと断言できたけど、夢見ていたに違いない。

ここに私のワーカークラスがあります:

class TagPostWorker
  include Sidekiq::Worker
  sidekiq_options queue: "tag"
  sidekiq_options retry: false

  def perform(options = {})
      current_user = User.find(options[:user_id])
  end

end

投稿の show メソッドでこのコマンドを実行してみました:

TagPostWorker.perform_async({:user_id => current_user.id})

しかし、私はこのエラーが発生します:

2013-08-17T22:45:45Z 4029 TID-ors6jfr54 TagPostWorker JID-ae203958bb3bcee01c8f83ef INFO: start
2013-08-17T22:45:45Z 4029 TID-ors6jfr54 TagPostWorker JID-ae203958bb3bcee01c8f83ef INFO: fail: 0.003 sec
2013-08-17T22:45:45Z 4029 TID-ors6jfr54 WARN: {"retry"=>false, "queue"=>"tag", "class"=>"TagPostWorker", "args"=>[{"user_id"=>7}], "jid"=>"ae203958bb3bcee01c8f83ef", "enqueued_at"=>1376779545.9099338}
2013-08-17T22:45:45Z 4029 TID-ors6jfr54 WARN: Couldn't find Post without an ID

sidekiq がどのように Post を試みているのか理解できません。なぜなら、私はそれを perform メソッドで呼び出していないからです。何が起こっているのでしょうか?

どんな助けでも大歓迎です。

4

2 に答える 2

1

このブログ記事をご覧になることをお勧めします。

ばかげているように聞こえますが、Sidekiq は非常に高速であるため、モデルの保存が完了する前にワーカーを実行できます。

于 2013-08-18T09:37:29.803 に答える
0

また奇妙なことに、Rails/sidekiq を再起動したと断言できたはずです。

しかし、ワーカーの名前を TagWorker に変更し、Rails/sidekiq を再起動すると、再び機能するようになりました!

于 2013-08-17T23:04:38.547 に答える