2016-06-23 30 views
0

私は仕事をしていて、その仕事が実行されたとき、その一番下にあります。そして、同じ仕事をもう一度、同じ引数で、1時間後に実行します。私がこれまでに達成した何ジョブ内のジョブをRailsで動的にエンキューする方法は?

class SimpleJob 
    @queue = :normal 

    def self.perform(start) 
    puts "Right now, start = #{start}" 
    start += 12 
    time = some_request_external_api 
    self.set(wait: time).perform_later(start) 
    end 
end 

私はresque宝石を使用して、そしてQUEUE=* rake resque:workを通じて仕事を実行していますよ。確かに、最初にRight now, start = 12を印刷しますが、その後は何も起こりません。この機能をどのように正確に達成できますか?

答えて

1

むしろ自身の中にジョブを再びキューに入れるよりも、あなたはそのようclockworkとして、スケジューラを使用することができますどちらか。

また、達成しようとしていることが別のサービスのイベントに応答している場合は、そのドキュメントを参照して、webhookの機能を提供しているかどうかを確認してください。

これらは、いずれかの操作が発生したときにいつでも、希望の操作にpostリクエストを送信します。

+0

良い点ですが、ここには事があります:私は仕事をいつスケジュールするかを正確には知らない。私は外部APIにヒットし、その呼び出しの応答で、私は非常に次の仕事をいつ実行するかを決めました。基本的には、あらかじめ定義された値でスケジューリングするのではなく、ジョブを動的にスケジューリングできる機能が必要です。 –

+0

APIを使用していて、APIがイベントを受け取るためのWebhookアクションを設定できる場合は、アプリケーションからの呼び出しや自動的に発生したアクションが何であれ、理想的にはウェブフック。そうすれば、代わりにこの行動であなたの仕事を誘発することができます。それをスケジューリングしたり、それ自体をエンキューする必要はありません。 –

0

あなたは定期的な仕事を設定する方法を探しているようです。ケースのthats場合は、これを見てみましょう:

https://github.com/resque/resque-scheduler

+0

私はそれを見ましたが、私が望むのは何か違うものです。私は仕事をしたい、そしてその仕事は最後に実行されます。 resque-schedulerを使用して上記の機能をどのように達成するかについて少しのコードを含めることができますか? –

関連する問題