Рубиновый длительный процесс, реагирующий на события очереди - PullRequest
5 голосов
/ 03 февраля 2011

У меня есть приложение rails 3, которое записывает определенные события в очередь.

Теперь на сервере я хочу создать службу, которая опрашивает очередь каждые x секунд и выполняет другие задачи по расписанию.

Кроме создания сценария ruby ​​и запуска его через задание cron, существуют ли другие альтернативы, которые стабильны?

Ответы [ 5 ]

5 голосов
/ 04 февраля 2011

Несмотря на то, что вариант постоянной задачи на основе Rails является опцией, вы можете рассмотреть более упорядоченные системы, такие как delayed_job или Starling для управления рабочей нагрузкой.1006 * Я бы посоветовал не запускать что-либо в cron, поскольку затраты на раскрутку целого стека Rails могут быть значительными.Запускать его каждые несколько секунд нецелесообразно, так как время разгона на Rails обычно составляет 5-15 секунд в зависимости от вашего оборудования.Делать это несколько раз в день, как правило, нет ничего сложного.

Простая альтернатива - создать рабочий цикл в скрипте, который вы можете использовать с runner:

interval = 15.minutes
next_time = Time.now + interval

while (true)
  if (stuff_to_do?)
    do_stuff
  end

  # Figure out how much time is left before the next iteration
  delay = next_time.to_i - Time.now.to_i

  if (delay > 0)
     # If ahead of schedule, take a break
    sleep(delay)
  end
end

Недостатком этого является то, что стек Rails будет оставаться в памяти до тех пор, пока выполняется этот фоновый процесс, но это компромисс между огромными обращениями к процессору и обращением к памяти.

3 голосов
/ 04 февраля 2011

У вас есть несколько вариантов для этого, включая DelayedJob и Resque .

Resque использует Redis и является решением, которым я пользуюсь все время (и я очень доволен).

2 голосов
/ 03 февраля 2011

Я бы порекомендовал Railscast Райана Бейтса на эту тему, в которой говорится о бобовом стебле и обертке сталкера:

http://railscasts.com/episodes/243-beanstalkd-and-stalker

1 голос
/ 07 февраля 2011

@ Blankman, вы должны проверить http://www.simpleworker.com, это сделано для таких вещей и снимает с вас бремя запуска / планирования / мониторинга ваших процессов.И это очень стабильно.

1 голос
/ 04 февраля 2011

Чтобы добавить сюда новые возможности, использование более сложной системы очередей, такой как AMQP (RabbitMQ), стало проще благодаря жемчужине minion. Похож на beanstalkd:

https://github.com/orionz/minion

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...