Unicorn + Rails + Большие загрузки

Я пытаюсь разрешить большие загрузки при запуске Unicorn на Heroku с Rails, но я понял, что любые большие загрузки могут занять больше времени, чем период ожидания для рабочего Unicorn. Это будет означать (я видел, как это происходит), что главный процесс Unicorn убьет рабочего, загружающего большой файл, и время запроса истечет (с ошибкой 503).

Без удаления или значительного увеличения тайм-аута для моего сервера есть ли способ разрешить зависание рабочего процесса загрузки, пока загрузка завершается? Или я совершенно неправильно понимаю, и, скорее всего, что-то еще вызывает тайм-аут загрузки?


person seadowg    schedule 06.03.2012    source источник


Ответы (2)


Если вы загружаете на S3, вы можете «просто» заставить пользователя загружать файлы напрямую на S3, а не через ваши динамометры, и получить пинг, когда загрузка будет завершена.

Для получения дополнительной информации посетите что-то вроде CarrierWaveDirect.

person Neil Middleton    schedule 06.03.2012
comment
Я использую CarrierWaveDirect, но мне все же пришлось увеличить тайм-аут рабочих-единорогов, потому что они будут падать, если загрузка файла займет слишком много времени, даже если вы используете CarrierWaveDirect. - person cantonic; 28.02.2013

Если вы используете nginx в качестве обратного прокси перед вашими единорогами, вы можете использовать Загрузить модуль. Когда настроено, nginx обрабатывает загрузку и сохраняет ее в каталоге /tmp, затем ваш единорог получает параметры запроса, сообщающие ему, где находится загруженный ресурс и его тип содержимого. Нет больше работника, связанного с получением загрузки.

Если вы на самом деле не хотите загружать на тот же сервер, что и ваш веб-сервис, а хотите хранить его в S3, вам следует последовать предложению @Neil Middleton и настроить все так, чтобы загрузка шла прямо туда.

person dbenhur    schedule 15.03.2012