

次のようなバッチ処理を実装したいと思ってます。  
但し、一日一回みたいな定期的なものではなく、あくまでリクエストが行われた時のみです。  
そのため、多い日は一日5回バッチ処理が走ることがあったり、逆に一日一回実行されない日もあります。

[code]

    画面上から実行したい日時を入力し、リクエストを送信
    ↓
    その時間帯になると、バッチ処理が起動
    
[/code]

定期的なバッチ処理をRailsで実現するには  
`whenever`というgemがよさそうでした。

ただ、前述のとおり、不定期なバッチ処理を実現するためにはどのような設計をすればできるのかわからず質問させて頂きました。

また、cronに毎時実行で登録し、リクエストが来ているかどうかをチェックするためのバッチ処理と、リクエストがあった場合のバッチ処理との2つにわけるという方法も考えたのですが、あまりいい設計ではない気がしましたため、他にいい方法があればそちらをもとに設計したいなと思います。

よろしくお願いします。

※ 以下のようなイメージで実現できればなと考えております。

[code]

    # params[:batch_requests] には複数の日時が入る
    
    every params[:batch_requests] do
      rake 'my:rake:task'
    end
    
[/code]

尚、こちらにも、質問をさせていただいております。  
ご了承の程よろしくお願いします。  
<https://teratail.com/questions/42781>


CC BY-SA 3.0
2016-07-30T10:30:02.093
27967
2017-02-24T01:00:48.453
13175
question
ruby-on-rails ruby
不定期なバッチ処理（リクエストが行われた日時のみ実行）を実装したいです。(wheneverのようなgemを用いて。)


私なら、 ActiveJob を使うと思います。

イメージとしては、こんな感じでしょうか。

[code]

    class BatchController < ApplicationController
      def create(batch_at)
        BatchJob.set(wait_until: batch_at).perform_later
      end
    end
    
[/code]

whenever は cron なので、不定期に実行するものには向いていないのではないかと思うのですが、どんなものなのでしょうね。


CC BY-SA 3.0
2016-07-31T04:26:25.150
27976
2016-07-31T04:26:25.150
7471
27967
answer