Ответ 1
Загрузка изображений, Heroku и Unicorn, о мой.
Проблема
Это trifecta для этой ошибки. Вероятно, существует коррелирующая ошибка H12 (https://devcenter.heroku.com/articles/error-codes#h12-request-timeout) в ваших журналах Heroku. То, что происходит, заключается в том, что запрос слишком долго заканчивается (у Heroku есть нерешенный 30-секундный тайм-аут), поэтому он отключился, и рабочий-единорог был убит. Кроме того, Unicorn не подходит для медленных/длительных запросов (см. http://rainbows.rubyforge.org)
Решение
Фокус в том, чтобы загрузить изображение на интерфейсе без попадания на сервер (CORS/AJAX/jquery.fileupload.js/etc), передав это загруженное местоположение файла вместе с отправкой формы, а затем выполнив любую обработку позже как фоновая работа и повторная загрузка, которая не подпадает под 30-секундный тайм-аут. Другие более подробно рассказали об этом. Кроме того, вы можете использовать такую услугу, как Cloudinary, для этого.
PS
YMMV, но вы должны добавить это в свою конфигурацию единорога (https://devcenter.heroku.com/articles/rails-unicorn)
before_fork do |server, worker|
Signal.trap 'TERM' do
puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
Process.kill 'QUIT', Process.pid
end
# ...
end
after_fork do |server, worker|
Signal.trap 'TERM' do
puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to sent QUIT'
end
# ...
end