У меня довольно простое приложение Rails 5 для мониторинга скорости сайтов. Он отправляет задания в службу проверки скорости внешней страницы и периодически проверяет, завершены ли задания, и, если это так, он вызывает и сохраняет данные о странице.Rails activejob with Sidekiq создает множество заданий на perform_later
Каждый проект может иметь много страниц, и каждая страница может иметь много заданий, в которых хранится ответ от службы тестирования.
Существует активная сторона с боковым сервером sidekiq, которая должна запускаться каждую минуту, проверять страницы, которые должны выполняться, и если они есть, запустите задание, чтобы вставить в очередь. Он также проверяет наличие каких-либо заданий в очереди, и если они найдены, он запускает задание для проверки состояния и сохранения данных, если оно завершено.
def perform()
#Todo:- Add some way of setting the status into the view and check for active here - no way to stop jobs at the mo!
pagestorun = Page.where("runtime < ?", DateTime.now)
pagestorun.each do |page|
job = Job.new(:status => "new")
page.jobs << job
updatedatetime(page)
end
if pagestorun.count != 0
#Run the queuejob task to pick out all unqueued jobs and send them to webpagespeedtest
QueuejobsJob.perform_later
end
# Проверяем все задания в очереди, а затем планировать следующую задачу GetrunningtasksJob.perform_later FindjobstorunJob.set (ожидание: 1.minute) .perform_later() конец
Это похоже на работу, как ожидаемый на некоторое время, но через 5 минут или около двух рабочих мест, похоже, в конечном итоге появляются нерестилища. В конце концов каждый из них порождает больше своих собственных, и через несколько дней я получаю десятки тысяч попыток запуска в час. Нет никаких ошибок или неудачных заданий, насколько я могу судить, я не могу найти причин, почему это произойдет. Любая помощь была бы оценена mundo :)