Как правильно диагностировать ошибку 500 (Rails, Passenger, Nginx, Postgres) - PullRequest
5 голосов
/ 02 апреля 2012

Мне очень тяжело диагностировать ошибку 500 в моем приложении, работающем на производстве. Раньше у меня это работало, но после повторного развертывания через Capastrano я не могу запустить его.

Вот факты:

  1. Сервер настроен с nginx + passenger, и я использую PostgreSQL.
  2. Статические ресурсы работают должным образом, так как я могу легко получить к ним доступ в браузере.
  3. Я могу получить доступ к консоли rails через RAILS_ENV=production bundle exec rails console и выполнять действия Active Record (например, извлечение данных из БД).
  4. В консоли я могу запустить app.get("/"), который также возвращает ошибку 500 (после первого показа запроса, который был запущен для загрузки модель).
  5. Файл production.log никогда не записывается в. Я установил разрешения 777 только для этого. Я также установил уровень журнала : отладка, с которой нечего показать.
  6. Журнал nginx (который также использует пассажир) не показывает признаков ошибок, он просто уведомляет об ошибках кэша.

Поскольку ничего полезного не регистрируется, я понятия не имею, что здесь делать. Я попытался установить полное разрешение на весь каталог приложения без посторонней помощи. Перезагружал сервер несколько раз, ничего. База данных есть, и рельсы могут четко общаться с ней. Я не уверен, что я сделал, чтобы запустить его в первый раз. Я просто не знаю, почему рельсы не выводят что-либо в журнал.

Ответы [ 4 ]

7 голосов
/ 02 апреля 2012

Хорошо, я понял это. Приложение работало нормально в режиме разработки, поэтому я знал, что что-то специфическое для его производства мешало. Я зашел в config / environment / production.rb и изменил эти настройки:

# Full error reports are disabled and caching is turned on
config.consider_all_requests_local       = false # changed from true
config.action_controller.perform_caching = true # changed from false

А потом после перезапуска пассажира рельсы показали мне ошибку с / stacktrace. Оказывается, я забыл предварительно скомпилировать конвейер ресурсов!

3 голосов
/ 02 апреля 2012

Что нужно проверить

1) Вы уверены, что работаете в производственной среде?Проверьте, есть ли какие-либо записи в файле development.log

2) Настройте приложение для отправки вам электронных писем при возникновении ошибки 500 с полной трассировкой стека.Я использую гем Exception Notifier, но для этого есть множество других решений.

3) При проверке приложения в консоли вы уверены, что запускаете консоль в рабочем режиме?Возможно, что приложение вообще не запускается, и вы просто забыли установить производственный параметр, думая, что приложение работает нормально, когда оно не работает.

4) Вы получаете ошибку nginx 500 илиошибка Rails 500?Если nginx, то вполне вероятно, что ваше приложение вообще не запускается и очень маловероятно, что вы получите ошибку rails в вашем файле журнала.Активы представляют собой статические файлы, и переход к ним ничего не доказывает, кроме вашего существования.

5) Вы уверены, что проверяете правильную папку на сервере?Звучит очень глупо, но capistrano может развертывать приложение в папке, отличной от папки, которую ищет ninx для вашего приложения, поэтому дважды проверьте, как разворачивается папка capistrano и папка, которую ищет nginx.

Просто предложение, я бы использовал единорога, а не пассажира.Это здорово с nginx.

2 голосов
/ 06 февраля 2017

Моя проблема в том, что в файле журнала пассажира (error.log) нет ничегоТогда это проблема журнала ротации.Запуск

 passenger-config reopen-logs

решил мою проблему. Подробнее .

0 голосов
/ 02 апреля 2012

Вы пытались запустить в режиме разработки, чтобы увидеть, появляется ли сообщение об ошибке?

...