2014-02-13 2 views
8

Мое приложение построено на Rails, а мой производственный сервер находится на Heroku.Как изменить время запроса запроса по умолчанию на Heroku?

Мое приложение в основном используется для загрузки файлов и обработки файлов, и для запроса требуется более 50 секунд. В соответствии с конфигурацией Heroku мой запрос не отвечает вовремя, и он отправляет меня на страницу с ошибкой приложения из-за таймаута запроса.

Как изменить конфигурацию тайм-аута запроса на Heroku?

Пожалуйста, помогите мне, чтобы приложение работало.

+2

Лучше не позволять загрузке файлов блокировать динамику Heroku. Попробуйте, например. [Ink Filepicker] (https://www.inkfilepicker.com/), чтобы загрузить вещи на S3. –

+0

его не требуется больше времени для загрузки, требуется больше времени в файле процесса, например, чтение данных из excel. также требуется больше времени для создания файла excel из доступных данных. – jayesh

+0

Вещи, которые занимают больше времени ожидания, могут быть перемещены в фоновое задание (см. Sidekiq, Resque или Delayed Job). Затем вы можете загрузить или отправить результат по электронной почте. –

ответ

14

Это невозможно в соответствии с Heroku's documentation

Значение тайм-аута не настраивается. Если вашему серверу требуется дольше , чем 30 секунд для выполнения данного запроса, мы рекомендуем переместить на фоновое задание или на сотрудника для периодического пинга вашего сервера , чтобы узнать, завершен ли запрос обработки. Этот шаблон освобождает , ваш веб-процесс работает, чтобы сделать больше работы, и уменьшает общее время отклика приложения .

0

Вы должны загрузить свои большие файлы непосредственно на Amazon S3 или аналогичные, а затем обработать файл с помощью рабочего стола Heroku. Как правило, ваша веб-страница будет использовать какой-то опрос (обычно запрос AJAX), чтобы увидеть, когда обработка завершилась и обновить интерфейс.

0

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

Это означает, что вам нужно использовать что-то вроде, например, delayed job, и вы можете прочитать об этом на Heroku here.

Поток вещей будет что-то вроде этого:

  1. загрузить документ в жесткий лимит (тайм-аут) навязанного Heroku.
  2. запланировать фоновое задание для обработки документа и вернуть 200 ОК в браузер.
  3. браузер ждет завершения, например. фон AJAX опрос флага, чтобы увидеть, когда фоновая работа готова.
  4. отложенная работа забирает запланированную работу и по завершении устанавливает флаг для указания фонового задания.
  5. Браузер теперь может сообщить пользователю, что это сделано (до вашего приложения, чтобы узнать, что подходит).

Это идея, как это можно сделать. У вас есть несколько разных способов, которыми вы можете это сделать, и отложенная работа - это только тот, который вы можете выбрать.

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