1

У меня две модели: Расписание и Задача. Задача принадлежит_описанию и расписанию has_many задач. У меня есть вложенная форма для задачи, которая использует javascript для динамического создания дополнительных форм задач, нажав кнопку «добавить задачу». Я пытаюсь использовать rufus_scheduler, чтобы сделать это так, чтобы задача имела конечную дату и время окончания ввода пользователем. Когда задача завершена, она должна просто напечатать «yo yo yo» на сервере.Не могу понять, как сделать планировщик rufus работать с .at вместо .in

Я был успешно в состоянии иметь первую задачу полностью в интервале секунд со следующим кодом:

def set_schedule 
    scheduler = Rufus::Scheduler.new 
    scheduler.in self.tasks.first.timeframe do 
     puts 'yo yo yo' 
    end 
end 

В приведенном выше коде, временные рамки представляет собой целое поле, которое пользователь вводит с заданным числом секунд, перед которыми должно выполняться задание.

Проблема в том, что в приведенном выше коде используется интервал, и я хочу использовать точную дату и время. Поэтому я изменил таймфрейм на строку и дал пользователю ввести дату в этом формате: '12/18/2013 '. Вот что я пробовал:

def set_schedule 
    scheduler = Rufus::Scheduler.new 
    scheduler.at (self.tasks.first.timeframe + " " + self.tasks.first.complete_time.to_s + " EST")do 
     puts 'yo yo yo' 
    end 
end 

Просто чтобы быть ясно, таймфрейм строки, которая состоит из даты и complete_time этого поля времени, которое состоит из времени задача должна закончиться.

Этот код не работает. «yo yo yo» по-прежнему печатается, но сразу же печатается.

Я бегу рельсы на webrick с базы данных postgres. Я использую Ruby on Rails 4 и Ruby 2. Буду признателен за любую помощь. Благодаря!

UPDATE:

я понял две ошибки в своем коде. complete_time автоматически конвертировался в нечитаемый формат. Я исправил это, изменив complete_time в строку. Кроме того, я понял, что мой аргумент для метода .at не был в кавычках. Я исправил это. Тем не менее, я все еще испытываю такую ​​же проблему. Вместо того, чтобы ждать, пока наступит время, чтобы положить «yo yo yo», он сразу же устанавливает его. Вот новый код:

def set_schedule 
    scheduler = Rufus::Scheduler.new 
    scheduler.at ("#{self.tasks.first.timeframe} #{self.tasks.first.complete_time} EST")do 
     puts 'yo yo yo' 
    end 
end 

Метод scheduler.at идет к серверу, как это:

scheduler.at("12/03/2013 12:33:00 EST") 

Ofcourse времени и даты изменения углубляющегося на входе пользователей, приведенный выше код только в последний раз я запустил его.

+0

Здравствуйте, проблема решена сейчас? Если нет, то в чем проблема? – jmettraux

+0

Одна вещь: вы понимаете, что вы создаете планировщик каждый раз, когда вызывается #set_schedule? Это один новый поток, созданный для каждого вызова #set_schedule, через некоторое время ваше приложение будет раздавлено под нагрузкой. Лучше инициализировать один Планировщик и использовать его каждый раз. См. Https: //gist.github.com/jmettraux/f298b092fa8c79b6c3c7 – jmettraux

ответ

1

Когда rufus-scheduler #at или #in немедленно запускает свой блок, это означает, что время графика было в прошлом.

Возможно, это проблема с часовым поясом.

Вы можете проверить, как Руфус-планировщик видит вашу строку, выполнив:

require 'rufus-scheduler' 
p Rufus::Scheduler.parse('12/03/2013 12:33:00 EST') 

В моей системе (Debian GNU Linux, Ruby 1.9.3p392 или рубин 2.0.0p195) получаем:

2013-03-12 17:03:00 UTC 
+0

Спасибо, очень ценю это. – Philip7899

 Смежные вопросы

  • Нет связанных вопросов^_^