2017-01-20 17 views
1

私は、遅延ジョブと組み合わせたRufus Schedulerを使ってバックグラウンドジョブを実行するRailsアプリを持っています。そこ別の仕事がありますが、私はとのトラブルを抱えているものが、このコードを使用してコントローラに予定されている:Rufusが最初の仕事を2回スケジューリングするのはなぜですか?

def create 
    @harvest_plan = HarvestPlan.new(resource_params) 
    @harvest_plan.start_date = Time.parse(resource_params[:start_date]) 
    if @harvest_plan.save 
     ApplicationController.new.insert_in_messages_list(session, :success, 'Harvest plan created') 
     schedule_harvest 
     redirect_to farms_path 
    end 
    end 

    private 

    def schedule_harvest 
    Rufus::Scheduler.singleton.every "#{@harvest_plan.hours_between}h", 
     :times => @harvest_plan.repetitions, :first_at => @harvest_plan.start_date do 
     CreateHarvestFromPlanJob.perform_later 
    end 
    end 

ジョブがどのように多くの時間が必要があることを示しており、収穫計画モデルに従ってスケジュールされるようになっていますジョブ間の過去、スケジュールされているはずの最初のタイミング、繰り返しが何回発生する必要があるかなどです。 first_atで指定された時刻に発生する最初のジョブが何らかの理由で2回スケジュールされている場合を除き、すべてのジョブが完璧に動作します。、遅延ジョブがジョブを2回実行します。私はミューテックスを使ってみましたが、ブロックとオーバーラップのオプションはありましたが、それは何も変わりませんでした。最初の仕事(2回スケジュールされた)の後、すべて正常に動作します。次のジョブはスケジュールどおりにスケジュールされます。 私はただ1人の遅れた就労者を持っています

どうしてですか?

私はRails 4.2.4、Ruby 2.2.2、およびRufus 3.3.2を実行しています。エラーは乗客とwebrickの両方で発生するので、これは問題とは関係がないと仮定します。

+0

どのようなバージョンのRubyですか、どのバージョンのrufus-schedulerですか? – jmettraux

答えて

関連する問題