Тайм-аут Heroku при загрузке большого файла в s3
У меня возникла проблема с моим приложением на базе RefineryCMS 1.0.8
развернутый на героку.
У Heroku есть тайм-аут запроса 30 секунд. При загрузке файлa > 4MO через администратора RefineryCMS, иногда это займет больше, чем
30 секунд для выполнения запроса (в основном из-за времени, необходимого для
загрузите файл в s3).
В этом случае dyno будет "заморожен" и
не реагирует на 30 минут (каждый запрос в течение этого времени
с помощью тайм-аута запроса H12). Это поведение именно то, что описывает christos в последнем сообщении в это обсуждение
Из этого другого обсуждения
и документация heroku
: "Прямая загрузка на S3 - предпочтительный подход, если вы
работа с загрузкой файлов размером более 4 МБ. Идея состоит в том, чтобы пропустить прыжок
на ваш dyno, сделав соединение с браузером конечного пользователя напрямую
на S3. "
Прямая загрузка на S3 должна быть решением, но это выглядит сложно
для меня это правильно реализовать с RefineryCMS/Dragonfly/Fog. Я не уверен, что это возможно без большой модификации этих инструментов, и мне интересно, есть ли альтернатива.
Спасибо за помощь
Ответы
Ответ 1
Не совсем. Тайм-аут Heroku - это набор из камня, который вам нужно обойти. Прямая загрузка на S3 является единственным вариантом, требующим какой-либо обработки после загрузки.
Есть решения, такие как CarrierWaveDirect, но я не знаю, как легко это будет использовать с НПЗ.
Ответ 2
Вы можете попробовать добавить единорога в ваше приложение.
конфиг /unicorn.rb
worker_processes Целое число (ENV [ "WEB_CONCURRENCY" ] || 3)
тайм-аут 180 # < Тайм-аут Unicorn позволит увеличить время загрузки.
preload_app true
before_fork do | сервер, рабочий |
https://devcenter.heroku.com/articles/rails-unicorn