Пользовательские страницы ошибок Rails не будут отображаться в Nginx

#ruby-on-rails #ruby #nginx

#ruby-on-rails #ruby #nginx

Вопрос:

Я новичок в Rails и Nginx. Меня попросили добавить пользовательские страницы ошибок в наше приложение. Я нашел инструкции для этого на этом сайте, и мои пользовательские страницы ошибок отлично отображаются локально. Когда я перехожу к URL /no_such_page -адресу, я вижу соответствующую страницу. Когда я развертываю код на нашем тестовом сервере под управлением nginx и пытаюсь использовать тот же URL-адрес, вместо этого я вижу следующее:

500 Внутренняя ошибка сервера Если вы являетесь администратором этого веб-сайта, пожалуйста, прочитайте файл журнала этого веб-приложения и / или файл журнала веб-сервера, чтобы узнать, что пошло не так. `

На сервере nginx, если я перехожу по URL 404 , я вижу свою страницу, поэтому я знаю, что она отображается нормально. И мой локальный компьютер, и сервер работают в development среде.

Я добавил это в configdevelopment.rb :

 config.consider_all_requests_local = false
config.exceptions_app = self.routes
  

Вот что я добавил к routes.rb :

 %w(404 500).each do |code|
    get code, to: "errors#show", :code => code, :via => :all
end
  

и мой errors_controller выглядит так:

 class ErrorsController < ApplicationController
    def show
        status_code = params[:code] || 500
        render status_code.to_s
    end
end
  

Кто-нибудь знает, есть ли что-то особенное, что мне нужно сделать в моей конфигурации nginx, чтобы заставить это работать?

Ответ №1:

500 Внутренняя ошибка сервера Если вы являетесь администратором этого веб-сайта, пожалуйста, прочитайте файл журнала этого веб-приложения и / или файл журнала веб-сервера, чтобы узнать, что пошло не так.

Это сообщение об ошибке от самого Rails, а не от Nginx.

https://github.com/rails/rails/blob/v5.0.0.1/actionpack/lib/action_dispatch/middleware/show_exceptions.rb#L15-L22

Это означает, что ваша пользовательская страница ошибок сама вызывает исключение, что приведет к бесконечному циклу ошибка-> показать страницу ошибки-> ошибка-> показать страницу ошибки->… Rails обнаруживает это и останавливается с сообщением об ошибке, которое вы видите. Проверьте в своих журналах эту строку, чтобы узнать, в чем ошибка:

 Error during failsafe response:
  

Комментарии:

1. Спасибо, Мэтт! Я думаю, я был пойман на том факте, что он работал локально, а не на сервере, поэтому я обвинял nginx. Я нашел свои журналы ошибок var/log/nginx , которые указали мне на то, что я упускал из виду. Теперь все готово.