2013-04-15 3 views
2

Есть ли простая библиотека, которая позволит мне выполнять расписание очень простой задачи каждые х секунд, указанных в веб-запросе?Как сделать вызов метода каждые x секунд?

Я ищу что-то вдоль линий:

Something.after(5) { call_method } 

Очень просто. Нужно ли устанавливать библиотеку, например resque, или есть библиотека, которая может справиться с этим? Я не ищу полную обработку очереди в фоновом режиме, просто вызов метода после x секунд. Я знаю о resque и sidekiq ...

Мне нужно запустить это из Rails или Sinatra.

+2

Опишите, что вы имеете в виду под «указанный веб-запрос наступающем в». Разрешение входящего веб-запроса автоматически запускать задание, которое повторяется каждые X секунд, является хорошим способом позволить кому-то DOS вашей системе, быстро сделать его недоступным и непригодным для использования. У вас есть защита от этого? Настройка потока, который выполняется с интервалами, не будет сложной. Избежать ложных/повторных запросов сложнее. –

+1

Возможно, камень [Whenever] (https://github.com/javan/whenever) - это то, что вы ищете? Не уверен, считаете ли вы это «полномасштабной обработкой фоновой очереди» или нет (возможно, так). – aceofbassgreg

+0

Помимо других комментариев, если вы размещаете приложение на службе, например, Heroku, вам нужно будет учитывать, какие ограничения у них есть для таких случаев. В конкретном случае Heroku вам придется использовать Delayed Job (DJ) для этого, AFAIK. – fmendez

ответ

3

Может переписать пример кода:

Something.after(5) { call_method } 

к:

Something 
Thread.new do 
    sleep(5) 
    call_method 
end 
0

Было бы лучше, чтобы отправить это к фоновой задачи, посмотрите на resque-scheduler & Resque. Существует также хороший Railscast, который стоит проверить. Все остальное, как использование коронки, было бы неправильным.

Я нашел этот камень (sucker_punch), который выглядит, как он будет делать то, что вам требуется

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