Приложение My Rails возвращает HTTP 500 для всех своих URL, но в файле журнала ничего не отображается. Как я могу диагностировать проблему? - PullRequest
10 голосов
/ 25 февраля 2010

У меня есть приложение Rails, которое работает на рабочем сервере с Apache и Phusion Passenger. Приложение прекрасно работает локально при использовании Mongrel, но всякий раз, когда я пытаюсь загрузить URL на рабочий сервер, он возвращает HTTP 500. Я знаю, что сервер работает правильно, потому что я могу получить статические элементы приложения (например, файлы JavaScript , таблицы стилей, изображения) просто отлично. Я также проверил статус Пассажира, и он загружает приложение (это должно быть, так как возвращается страница 500 Internal Server Error приложения, а не только Apache по умолчанию). Кроме того, когда я загружаю приложение через script/console production и выполняю что-то вроде app.get("/"), также возвращается 500.

Проблема в том, что в файлах журнала ничего нет, чтобы указать на проблему. production.log пусто. Журналы ошибок Apache также не показывают проблем с Apache. Я озадачен тем, что происходит, и я не уверен, как диагностировать проблему.

Я знаю, что, возможно, я был немного расплывчатым, но кто-нибудь может подсказать, в чем может быть проблема? Или, по крайней мере, я могу диагностировать это?

Ответы [ 6 ]

6 голосов
/ 28 февраля 2010

Ответом для этой конкретной ситуации была проблема с моим приложением. Один из классов модели использовал соединение с базой данных, отличное от остального приложения. Это соединение с базой данных не было настроено должным образом. Я думаю, что причина, по которой ничего не было записано в файлы журналов, заключается в том, что Rails выручили, не имея ни малейшего представления, что делать.

Поскольку другим может быть полезно увидеть, как я диагностировал эту проблему, вот мой мыслительный процесс:

  1. Проблема не может быть с Apache: в файлы журнала Apache не было записано никаких ошибок.
  2. Вероятно, проблема была не в Passenger: Passenger не записывал никаких ошибок в файл журнала Apache, и, похоже, он загружал мое приложение правильно, поскольку passenger-status показывал его как загруженное и отображало 500 моего приложения. Страница внутренней ошибки сервера (не по умолчанию Apache).

Оттуда я предположил, что в моем приложении должно быть что-то сломанное, что произошло очень рано на этапе инициализации, но это не было причиной того, что приложение полностью выполнило сброс и выдало исключение. Я покопался в Google Группе Phusion Passenger и в конце концов наткнулся на эту полезную публикацию , в которой предполагалось, что ошибка может быть связана с подключением к базе данных. Конечно же, удаление этой неверно сконфигурированной базы данных и всех ссылок на нее заставило приложение работать!

1 голос
/ 27 февраля 2010

Несколько вещей, чтобы попробовать:

Прошли ли вы из документов следующие документы:

6.3.7. Файл журнала моего приложения Rails не записывается в

Есть пара вещей, которые вы следует знать:

  By default, Phusion Passenger runs Rails applications in production

режим, поэтому обязательно проверьте production.log вместо development.log. Смотрите RailsEnv для конфигурации. *

  By default, Phusion Passenger runs Rails applications as the owner

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

  See User switching (security) for details.

Если вы используете Linux на основе RedHat дистрибутив (например, Fedora или CentOS) тогда возможно, что SELinux вмешивается. RedHat-х Политика SELinux позволяет Apache только каталоги чтения / записи, которые имеют httpd_sys_content_t контекст безопасности. Пожалуйста, выполните следующую команду, чтобы дайте вашу папку приложения Rails этот контекст:

Вы проверили свой файл vhost или httpf.conf? У вас есть какие-либо директивы по ведению журнала?

Проверьте файл журнала apache верхнего уровня

Попробуйте установить PassengerLogLevel на 1, 2 или 3, как показано здесь http://www.modrails.com/documentation/Users%20guide.html#_passengerloglevel_lt_integer_gt

У вас установлены стоечные приложения?

1 голос
/ 26 февраля 2010

Попробуйте запустить приложение локально на Mongrel в производственном режиме, чтобы убедиться, что в этой конкретной среде нет странных проблем. Если это работает, то вы знаете, что это не проблема с вашей кодовой базой. Поскольку ваши статические компоненты обслуживаются должным образом, это говорит о том, что Apache работает нормально. Единственное оставшееся устройство в системе - Пассажир. На данный момент, я бы сказал, что это неправильно настроенный Пассажир. Вы должны опубликовать свой конфигурационный файл Passenger и задать вопрос по ServerFault .

1 голос
/ 25 февраля 2010

Вы пытались запустить приложение локально, используя Passenger?

0 голосов
/ 25 февраля 2010

Возможно, это глупое предложение, но я предлагаю вам начать с увеличения уровней ведения журнала на производстве во время тестирования. Сделайте это в config/environments/production.rb и используйте:

config.log_level = :debug

Это должно, по крайней мере, дать вам какой-то след, чтобы вы могли начать обнаруживать проблему. Если вы по-прежнему ничего не получаете - вы можете обнаружить, что у вас есть проблема с чем-то таким простым, как отсутствующий гем / плагин на рабочем сервере. Подобные вещи вполне могут проявиться как ошибка «500» и просто не будут для вас слишком многословны.

Можете ли вы запустить тестовый набор на вашем производственном сервере?

0 голосов
/ 25 февраля 2010

Мое предложение было бы вернуться прямо к земле "Hello World" и создать наименьшее возможное приложение-пример Ruby и загрузить его, чтобы увидеть, есть ли проблема с Passenger или Ruby на сервере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...