私は仕事をしていて、その仕事が実行されたとき、その一番下にあります。そして、同じ仕事をもう一度、同じ引数で、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
を印刷しますが、その後は何も起こりません。この機能をどのように正確に達成できますか?
良い点ですが、ここには事があります:私は仕事をいつスケジュールするかを正確には知らない。私は外部APIにヒットし、その呼び出しの応答で、私は非常に次の仕事をいつ実行するかを決めました。基本的には、あらかじめ定義された値でスケジューリングするのではなく、ジョブを動的にスケジューリングできる機能が必要です。 –
APIを使用していて、APIがイベントを受け取るためのWebhookアクションを設定できる場合は、アプリケーションからの呼び出しや自動的に発生したアクションが何であれ、理想的にはウェブフック。そうすれば、代わりにこの行動であなたの仕事を誘発することができます。それをスケジューリングしたり、それ自体をエンキューする必要はありません。 –