Приложение Rails случайно вылетает с ошибкой «Преждевременное завершение заголовков скриптов»
-
05-07-2019 - |
Вопрос
Я размещаю приложение Ruby on Rails 2.0.2 на DreamHost.Он находится на сервере Apache 2, работающем поверх Phusion Passenger.
Приложение часто возвращает ошибку 500 «Приложение Rails не удалось запустить должным образом», но в случайное время.Похоже, это происходит, когда приложение находится под более высокой нагрузкой, хотя я не могу это подтвердить.У него всего около 2000 просмотров страниц в день, поэтому я не думаю, что загрузка должна быть проблемой.
Журналы Apache сопоставляют эти 500 ответов с ошибкой:«Преждевременное завершение заголовков скриптов».Просто просмотрев логи сегодня в 9 утра, ошибка появляется три или четыре раза в минуту.Это явно неприемлемо.
Реже приложение выкидывает страницу Phusion Passenger с трассировкой стека и ошибкой "Broken Pipe".
В журналах Rails нет ни одной из этих ошибок.
Это происходит как на промежуточных, так и на действующих сайтах, размещенных на DreamHost, но я не могу воспроизвести это на локальном сервере разработки.
Итак, я думаю, реальный вопрос: С чего начать устранение этой проблемы?
Решение
Оказывается, я просто исчерпал свой лимит памяти на общем сервере DreamHost.
Я запускал несколько приложений Rails под одной учетной записью, многие из них были предназначены только для тестирования и прототипирования.Rails использует много памяти, поэтому я быстро достиг своего распределения.Служба поддержки сказала мне: «Я проверил наши журналы и обнаружил, что за последние три дня один из ваших рубиновых процессов отключался 2325 раз». Упс.
Решение:постарайтесь не запускать Rails в общей среде, если можете.Скоро я собираюсь переключить хотя бы одно из своих приложений на хост VPS.
Другие советы
Вы используете последнюю версию пассажирской версии (2.2.2 на момент написания статьи). У меня было несколько ошибок, но большая часть (если не все) исчезла после обновления установки моего пассажира.
Если это не тот ответ, вы всегда можете попробовать обновить версию rails до 2.3 и посмотреть, сохраняется ли проблема.