백그라운드 작업을 실행하기 위해 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 모두에서 발생하기 때문에이 문제와 관련이 없다고 가정합니다.
루비의 버전은 rufus-scheduler의 버전은 무엇입니까? – jmettraux