2017-01-20 14 views
1

백그라운드 작업을 실행하기 위해 Delayed 작업과 결합 된 Rufus Scheduler를 사용하는 Rails 앱이 있습니다. 이 또 다른 작업이 있지만,이 코드를 사용하여 컨트롤러 예정이다와 내가 문제가있어 하나 작업은 수확 계획 모델에 따라 예약 할 예정이다Rufus가 첫 번째 작업을 두 번 예약하는 이유는 무엇입니까?

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로 지정된 시간에 발생하는 첫 번째 작업을 제외하고는 완벽하게 작동하지만 어떤 이유로 든 두 번 예약 된, 지연된 작업은 작업을 두 번 실행합니다. 나는 뮤텍스 (mutex)를 사용하여 차단하고 겹치는 옵션을 시도했지만 아무런 차이가 없었다. 첫 번째 작업 (두 번 예정) 후에 모든 것이 잘 작동합니다. 다음 작업은 제때에 예정되어 있습니다. 난 일자리가 한 명 밖에 없다.

왜 이런 일이 일어나는가?

저는 Rails 4.2.4, Ruby 2.2.2 및 Rufus 3.3.2를 실행 중입니다. 오류가 승객과 webrick 모두에서 발생하기 때문에이 문제와 관련이 없다고 가정합니다.

+0

루비의 버전은 rufus-scheduler의 버전은 무엇입니까? – jmettraux

답변