Почему Руфус дважды назначает первое задание?

У меня есть приложение Rails, которое использует Rufus Scheduler в сочетании с отложенными заданиями для выполнения фоновых заданий. Есть и другие задания, но то, с которым у меня возникли проблемы, запланировано в контроллере с использованием этого кода:

  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, но по какой-то причине оно запланировано дважды, затем отложенные задания выполняются дважды. Я пытался использовать параметры мьютекса, блокировки и перекрытия, но ничего не изменилось. После первой работы (запланированной дважды) все работает нормально. Следующие задания назначаются вовремя и только один раз. У меня есть только один работник с задержанными заданиями

Почему это происходит?

Я использую Rails 4.2.4, Ruby 2.2.2 и Rufus 3.3.2. Поскольку ошибка возникает как с пассажиром, так и с вебриком, я предполагаю, что это не имеет никакого отношения к проблеме.


person Sofia Bravo    schedule 20.01.2017    source источник
comment
Какая версия Ruby, какая версия rufus-scheduler?   -  person jmettraux    schedule 20.01.2017


Ответы (1)


Почему Руфус дважды назначает первое задание?

из-за обнаруженной вами ошибки: https://github.com/jmettraux/rufus-scheduler/issues/231

Большое спасибо!

person jmettraux    schedule 20.01.2017