Я постоянно получаю ошибки H13 в Heroku, когда дино отключается из-за автомасштабирования. Ошибка H13 означает, что соединение было закрыто до получения ответа.
Из журналов вы можете видеть, что Heroku отправляет SIGTERM, когда он масштабирует динамометрические станции, и пассажир немедленно отключает любые запросы, которые еще не завершили обработку:
May 03 08:38:24 myapp app/web.4: App 175 stdout: Started POST "/exams/3167060/tick?elapsed_time=1" for 108.162.237.61 at 2018-05-03 12:38:23 +0000
May 03 08:38:24 myapp app/web.4: App 175 stdout: Processing by ExamsController#tick as HTML
May 03 08:38:24 myapp app/web.4: App 175 stdout: Parameters: {"elapsed_time"=>"1", "id"=>"3167060"}
May 03 08:38:24 myapp app/web.4: Stopping web server... done
May 03 08:38:24 myapp heroku/router: at=info method=POST path="/exams/3167120/tick?elapsed_time=1" host=www.myapp.com request_id=d81b4dc5-2a5a-44a4-96c6-61b7ea6d28f3 fwd="206.221.128.1,162.158.63.225" dyno=web.4 connect=1ms service=37ms status=200 bytes=954 protocol=https
May 03 08:38:24 myapp heroku/web.4: Stopping all processes with SIGTERM
May 03 08:38:24 myapp heroku/router: at=error code=H13 desc="Connection closed without response" method=POST path="/exams/3167060/tick?elapsed_time=1" host=www.myapp.com request_id=28c2f413-847c-4d11-bce9-5be7186cfbd8 fwd="152.27.48.186,108.162.237.61" dyno=web.4 connect=1ms service=53ms status=503 bytes=0 protocol=https
May 03 08:38:24 myapp heroku/web.4: Process exited with status 2
Конфигурация моего Procfile
пассажира выглядит следующим образом, и я не установил ничего, связанного с таймаутом:
web: bundle exec passenger start -p $PORT --max-pool-size $MAX_POOL_SIZE --min-instances $MIN_INSTANCES --nginx-config-template config/nginx.conf.erb
В течение 24 часов я вижу около 16 ошибок H13 из-за SIGTERM от события уменьшения масштаба на динамометрическом стенде. Я могу подтвердить масштабирование дино до H13 на моей панели показателей Heroku. Служба поддержки Heroku сообщает мне, что пассажир разрешает 30 секунд по умолчанию (хотя я не уверен, говорят ли они о своей собственной ошибке H12, которая будет выдана через 30 секунд, но я не вижу здесь H12).
Разве Passenger не должен давать время по умолчанию для завершения процессов после SIGTERM и корректного завершения работы? Может быть, что-то в моей конфигурации мне не хватает?