(RAILS) Повторять Пользовательские Рейки каждые 2 минуты, Плохая идея?Лучший способ реализации?

StackOverflow https://stackoverflow.com/questions/991795

Вопрос

В настоящее время я создал пользовательский файл rake, который выполняет следующее:

1.) Проверяет внешний канал на наличие "НОВЫХ" элементов

2.) Для каждого новое элемент в массиве каналов, он обновляет мою базу данных новой записью

3.) В настоящее время у меня это в цикле WHILE.Цикл while имеет переменную экземпляра (@loopcheck), для которой изначально установлено значение true, и если возникает какое-либо исключение.Сбрасывает его в false (таким образом, цикл завершается).

Вот пример:

   While(@loopcheck) do 
      begin
       ....(code here)...
      rescue
        Exception => e
        @loopcheck = false
      end
      sleep(120)
   End

Это плохое кодирование?Есть ли лучший способ сделать это?В идеале я просто хочу запустить фоновую задачу, чтобы просто проверять наличие нового канала каждые 2-3 минуты.Я заглянул в Starling / Workling, но это показалось немного излишним, и я не был уверен в запуске script / runner через CRON, поскольку он каждый раз перезагружает всю среду rails.BackgroundRb тоже немного излишен?Нет?

Просто хотел почерпнуть кое-какие идеи.

Это было полезно?

Решение

Объедините cron с режимом сна.Это гарантирует, что все не выйдет из строя полностью, если вы столкнетесь с исключением.Загрузка "полной среды rails" не так уж и плоха:3-6 секунд в худшем случае.итак, запустите свой цикл сна 5 раз.и отключите задачу rake, чтобы она выполнялась каждые 12 минут.Имеет смысл?

*/12 * * * * rake your task

## your rake task - valid for 10 mins -- 5 x 2 mins sleep worth.

@loopcheck = true

1.upto(5) do 
    begin
       ....(code here)...
    rescue
      Exception => e
      @loopcheck = false
    end
    break if not @loopcheck
    sleep(120)
end

Другие советы

Посмотрите этот недавний выпуск Railscast на "Whenever".

ссылка находится здесь, а в комментариях обсуждаются альтернативные варианты

http://railscasts.com/episodes/164-cron-in-ruby

Эта простейшая вещь, которая могла бы сработать, предполагая, что вы используете Unix box, - запускать скрипт раз в две минуты из cron без цикла / ожидания.Это позволяет вам избежать необходимости отслеживать и перезапускать ваш скрипт в случае сбоя.И если это не удастся, cron отправит вам электронное письмо.

Недостатком этого подхода, как вы заметили, является то, что каждые две минуты вы получаете удар за запуск процесса Ruby.Разве это важно?Только ты можешь сказать.У меня есть несколько подобных скриптов в слегка загруженной коробке, и я забываю, что они вообще там есть.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top