Фоновая работа на Heroku, как веб знает, что он закончен - PullRequest
0 голосов
/ 08 февраля 2012

Итак, я создаю это приложение, которое иногда требует перетягивания канала, и оно всегда отключается на heroku, потому что анализатор xml требует времени.Итак, я переключаюсь на асинхронную загрузку через Ajax каждый раз, когда страница загружается.Я все еще получаю ошибку H12 от моего вызова Ajax.Теперь я думаю об использовании Resque для запуска работы в фоновом режиме.Я могу сделать это без проблем, но как я узнаю, что работа завершена, чтобы я мог перетащить обработанный фид на страницу html через AJAX?

Не уверен, что мой вопрос ясен, так как бы веб-слой узнал, что работа выполнена, и он должен подать сигнал, например (onComplete в javascript), чтобы заполнить контент на странице?

Ответы [ 2 ]

4 голосов
/ 08 февраля 2012

Есть несколько способов сделать это

  • JavaScript может использовать AJAX для опроса сервера, запрашивая результаты, и сервер может ответить «еще нет» или результатами. Вы продолжаете спрашивать, пока не получите результаты.

  • Вы можете взглянуть на Джаггернаута (http://juggernaut.rubyforge.org/), который позволяет вашему серверу протолкнуться к клиенту

  • Веб-сокеты - это HTML5-способ решения проблемы. Есть несколько драгоценных камней, с которых можно начать Лучший инструмент Ruby on Rails WebSocket

1 голос
/ 08 февраля 2012

У вас проблема с архитектурой.Причиной для H12 является то, что пользователь не сидит там более 30 секунд.

Перемещая долго выполняющуюся задачу в очередь Resque, вы отключаете ее от внешнего веб-процесса - тамЭто не значит, что они могут общаться друг с другом из-за изоляции процесса.

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

...