Ошибка H12 означает, что обработка запроса заняла более 30 секунд.Это не обязательно является признаком проблемы с памятью.
Ваше приложение ruby может одновременно обрабатывать только конечное число запросов.Это количество потоков * количество процессов, которые запускает ваш веб-сервер (единорог или пума).
Если у вас есть длительные запросы, из-за загрузки файла, вызова базового API или медленного запроса SQLнапример, этот запрос занимает один из этих конечных слотов.Если у вас их слишком много, любой новый входящий запрос должен будет подождать, пока не освободится один слот.
Когда Heroku завершает HTTP-запрос, который занимает более 30 секунд, он не может сказать вашему приложению, может ли запрос нуженбыть отмененнымПоэтому, если у вас длинная очередь запросов, вы можете оказаться в состоянии, когда все запросы заканчиваются в H12, даже прежде чем они начнут обрабатываться приложением.
Перезапуск приложения исправляет его, поскольку он очищает запросqueue.
Лучший способ решить эту проблему - использовать гем типа rack-timeout , который уничтожит любой запрос, который займет больше времени, чем вы установили.Разумное значение может составлять около 1 или 2 секунд.
См. Эту документацию по тайм-аутам от Devokter Heroku: https://devcenter.heroku.com/articles/request-timeout
Обратите внимание, что такая же проблема может возникнуть с вашей базой данных, если у васвыполнение SQL-запросов.Поэтому установка времени ожидания оператора для SQL-запросов также полезна: https://devcenter.heroku.com/articles/heroku-postgres-database-tuning#identify-and-fix-expensive-queries