Время ожидания Heroku при загрузке большого файла в s3 - PullRequest
11 голосов
/ 21 октября 2011

У меня возникла проблема с моим приложением на основе RefineryCMS 1.0.8, развернутым на heroku.

У Heroku время ожидания запроса составляет 30 секунд.При загрузке файла> 4MO через администратора RefineryCMS для выполнения запроса иногда требуется более 30 секунд (в основном из-за времени, необходимого для загрузки файла в s3).

В этом случае динамометрический модуль будет «заморожен» и не будет реагировать примерно на 30 минут (каждый запрос в течение этого времени заканчивается тайм-аутом ошибки H12).Именно это поведение и описывает Кристос в последнем сообщении в этом обсуждении

Из этого другого обсуждения и документации heroku : "Прямая загрузкаS3 является предпочтительным подходом, если вы работаете с загрузкой файлов размером более 4 МБ. Идея состоит в том, чтобы пропустить переход к вашему dyno, установив соединение непосредственно с браузером конечного пользователя на S3. "

Прямая загрузка в S3 должна быть решением, но мне сложно реализовать ее правильно с RefineryCMS / Dragonfly / Fog.Я не уверен, возможно ли это без больших изменений в этих инструментах, и мне интересно, есть ли альтернатива.

Спасибо за вашу помощь

Ответы [ 2 ]

4 голосов
/ 25 ноября 2011

Не совсем.Тайм-аут Heroku - это набор из камня, который нужно обойти.Прямая загрузка на S3 - единственный вариант, требующий некоторой обработки после загрузки.

Существуют такие решения, как CarrierWaveDirect , но я не знаю, насколько это легкоиспользовать с НПЗ.

0 голосов
/ 03 июня 2013

Вы можете попробовать добавить единорога в ваше приложение.

конфиг / unicorn.rb

worker_processes Integer (ENV ["WEB_CONCURRENCY"] || 3)

timeout 180 # << Timeout Unicorn позволит увеличить время загрузки. </p>

preload_app true

before_fork do | сервер, работник |

https://devcenter.heroku.com/articles/rails-unicorn

...