質問: 次のようなバッチ処理を実装したいと思ってます。 但し、一日一回みたいな定期的なものではなく、あくまでリクエストが行われた時のみです。 そのため、多い日は一日5回バッチ処理が走ることがあったり、逆に一日一回実行されない日もあります。 ``` 画面上から実行したい日時を入力し、リクエストを送信 ↓ その時間帯になると、バッチ処理が起動 ``` 定期的なバッチ処理をRailsで実現するには `whenever`というgemがよさそうでした。 ただ、前述のとおり、不定期なバッチ処理を実現するためにはどのような設計をすればできるのかわからず質問させて頂きました。 また、cronに毎時実行で登録し、リクエストが来ているかどうかをチェックするためのバッチ処理と、リクエストがあった場合のバッチ処理との2つにわけるという方法も考えたのですが、あまりいい設計ではない気がしましたため、他にいい方法があればそちらをもとに設計したいなと思います。 よろしくお願いします。 ※ 以下のようなイメージで実現できればなと考えております。 ``` # params[:batch_requests] には複数の日時が入る every params[:batch_requests] do rake 'my:rake:task' end ``` 尚、こちらにも、質問をさせていただいております。 ご了承の程よろしくお願いします。
回答: 私なら、 ActiveJob を使うと思います。 イメージとしては、こんな感じでしょうか。 ``` class BatchController < ApplicationController def create(batch_at) BatchJob.set(wait_until: batch_at).perform_later end end ``` whenever は cron なので、不定期に実行するものには向いていないのではないかと思うのですが、どんなものなのでしょうね。