Тайм-аут 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