У меня очень странная проблема с моим приложением rails на Heroku, которую я не могу решить почти месяц.Это проблема, которая возникает только на рабочем сервере, и я не могу реплицировать ее в процессе разработки, и в которой журналы не содержат ошибок, принимают ошибки H18.
Вот что происходит.Приложение работает нормально около 12 часов, затем в определенный момент количество запросов резко возрастает, и Heroku начинает сообщать о регулярных ошибках H18
. В этот момент приложение не завершается сбоем, но все запросы, которые вызывают какие-то запросы open-uri, терпят неудачу (в основном запрос к внешнему веб-сервису), возвращают ошибку 500.Обычные запросы, которые просто отображают статическое представление, по-прежнему продолжают работать.
Журналы не особенно полезны.
Почти каждая ошибка H18 связана с запросом на /robots.txt, но по крайней мере одна ошибка связана с запросом на активы:выдержка
Oct 10 21:09:32 lombardpress-web heroku/router: sock=backend at=error code=H18 desc="Server Request Interrupted" method=GET path="/robots.txt" host=scta.lombardpress.org request_id=e0e344d1-0349-4b0a-8db0-3c6e3ad3e99f fwd="157.55.39.188" dyno=web.1 connect=0ms service=209ms status=503 bytes= protocol=http
Oct 10 21:09:41 lombardpress-web heroku/router: sock=backend at=error code=H18 desc="Server Request Interrupted" method=GET path="/assets/application-38a4580edd72e30f34ea76583ab7e1b1b5654c72a6313ece935177d23b0398d3.css" host=scta.lombardpress.org request_id=fdd88ca2-140e-4051-9011-4d81ca218f19 fwd="157.55.39.206" dyno=web.1 connect=0ms service=252ms status=503 bytes= protocol=http
Oct 10 21:33:55 lombardpress-web heroku/router: sock=backend at=error code=H18 desc="Server Request Interrupted" method=GET path="/robots.txt" host=scta.lombardpress.org request_id=5aa463f5-43ff-4b74-a2de-e944aa9d2387 fwd="46.229.168.147" dyno=web.1 connect=0ms service=254ms status=503 bytes= protocol=http
Oct 10 21:38:23 lombardpress-web heroku/router: sock=backend at=error code=H18 desc="Server Request Interrupted" method=GET path="/robots.txt" host=scta.lombardpress.org request_id=2300949d-8998-4ed0-a4ab-bf1975e93cc6 fwd="216.244.66.197" dyno=web.1 connect=0ms service=220ms status=503 bytes= protocol=http
Как только ошибки начинаются, мне просто нужно перезапустить приложение, и все снова работает нормально для еще 12 или около того ошибок.Даже запросы к robots.txt.Но примерно через 12 часов такая же проблема возникает.
Из-за веб-сканеров я бы оценил, что приложение получает запрос каждые 2-4 секунды.В противном случае это не особо интенсивный сайт.
Heroku предоставил только самые маленькие отзывы
Сокет бэкэнда, принадлежащий веб-процессу вашего приложения, был закрыт до того, как бэкэнд возвратил HTTP-ответ,Это происходит на уровне приложения или веб-сервера, поэтому мы не можем предоставить дополнительную информацию.Вы можете видеть, что запрос тратит некоторое время в службе приложения = 1118 мс, прежде чем вернуть статус 500. Интересно, происходит ли сбой промежуточного программного обеспечения (может быть, оно выполняет внешние запросы?) До того, как оно достигнет вашего фактического стека rails.Я бы предложил начать с поиска там.
Код с открытым исходным кодом и доступен здесь, если кто-то заинтересован в поиске: https://github.com/lombardpress/lombardpress-web
Буду признателен за любые мыслиили предложения.Я боролся с этим некоторое время сейчас, и я не уверен, как решить проблему.