Динамические страницы ошибок Rails (404, 422, 500) отображаются пустыми
Я внедряю динамические страницы с ошибками в приложение и чувствую, что public
папка для (теперь не существующих) шаблонов, а не следуя установленным мною маршрутам.
В config/application.rb
Я добавил строку config.exceptions_app = self.routes
для учета этого.
Затем я добавил следующее в мои маршруты:
get "/not-found", :to => "errors#not_found"
get "/unacceptable", :to => "errors#unacceptable"
get "/internal-error", :to => "errors#internal_error"
И контроллер ошибок выглядит так:
class ErrorsController < ApplicationController
layout 'errors'
def not_found
render :status => 404
end
def unacceptable
render :status => 422
end
def internal_error
render :status => 500
end
end
Собираюсь /not-found
показывает шаблон в том виде, в каком он должен быть, хотя при посещении любого несуществующего URL (т.е. /i-dont-exist) отображается пустая страница.
Единственная причина, по которой я это вижу, заключается в том, что для обработки исключений нужны, например, маршруты get "/404", :to => "errors#not_found"
хотя, по иронии судьбы, он не находит маршрут для /404 (и нет, это не просто работает:)).
Любой совет, высоко ценится. Спасибо, Стив.
2 ответа
Кажется, некоторые настройки неверны. Попробуйте это в ваших маршрутах:
match '/404', to: 'errors#not_found', via: :all
(совпадать, а не получить)
Вы упоминаете, что в application.rb
у тебя есть config.exceptions_app = self.routes
, это хорошо. Но убедитесь, что вы перезагружаете сервер перед тестированием ваших изменений.
И убедитесь, что ваши файлы представлений ошибок имеют то же имя, что и действия в вашем ErrorsController
,
Если вы получаете какую-либо ошибку (ха-ха) в консоли, не могли бы вы опубликовать ее?
Сделайте это вместо этого:
routes.rb
%w(404 422 500).each do |code|
get code, :to => "errors#show", :code => code
end
errors_controller.rb
class ErrorsController < ApplicationController
def show
render status_code.to_s, :status => status_code
end
protected
def status_code
params[:code] || 500
end
end
внутри вашего config/application.rb убедитесь, что у вас есть:
module YourWebsite
class Application < Rails::Application
config.exceptions_app = self.routes
# .. more code ..
end
end
Тогда вам, очевидно, понадобятся представления;) Не забудьте также удалить страницы ошибок в вашем публичном каталоге.