Rails의 사용자 지정 오류 페이지
Rails에서 문제가 발생하면 사용자는 다소 지루한 기본 오류 페이지를 보게 됩니다.
이 페이지는
/public
폴더에 있으므로 Rails 스택을 통해 렌더링되지 않습니다.이 페이지를 좀 더 멋지게 만들기 위해 Rails 인프라를 사용할 수 있도록 오류를 렌더링하는 컨트롤러를 만들 것입니다.
설정
공개 오류가 예외 및 스택 추적이 아닌 개발에서 렌더링되도록 구성을 변경해야 합니다.
# config/environments/development.rb
require "active_support/core_ext/integer/time"
Rails.application.configure do
# ...
config.consider_all_requests_local = false
end
컨트롤러를 만듭니다.
$ bin/rails g controller errors --no-helper --no-test-framework
이 컨트롤러에는 발생한 예외에 대한 오류 코드를 추출하고 적절한 보기를 렌더링하는 단일
show
작업이 있습니다. 오류 코드 403
, 404
및 500
에는 전용 오류 페이지가 있으며 나머지는 404
페이지로 돌아갑니다.class ErrorsController < ApplicationController
layout "error"
def show
@exception = request.env["action_dispatch.exception"]
@status_code = @exception.try(:status_code) ||
ActionDispatch::ExceptionWrapper.new(
request.env, @exception
).status_code
render view_for_code(@status_code), status: @status_code
end
private
def view_for_code(code)
supported_error_codes.fetch(code, "404")
end
def supported_error_codes
{
403 => "403",
404 => "404",
500 => "500"
}
end
end
보시다시피 맞춤형
"error"
레이아웃도 사용하고 있습니다. 이 페이지는 단순하며 애플리케이션 레이아웃의 일반적인 수하물이 필요하지 않습니다.새 오류 레이아웃을 만듭니다.
$ touch app/views/layouts/error.html.erb
<%# app/views/layouts/error.html.erb %>
<!DOCTYPE html>
<html>
<head>
<%= render "layouts/head" %>
</head>
<body>
<main>
<%= yield %>
</main>
</body>
</html>
보기를 만들고 원하는 대로 채웁니다.
$ touch app/views/errors/403.html.erb
$ touch app/views/errors/404.html.erb
$ touch app/views/errors/500.html.erb
이제 이 컨트롤러를 사용하여 오류를 렌더링하도록 Rails에 지시해야 합니다.
예외 앱
Rails는
exceptions_app
라는 구성 속성을 통해 사용자 지정 오류를 렌더링하는 후크를 제공합니다. 이 속성은 예외가 발생할 때 호출되는 Rack app을 할당해야 합니다.모든 Rails 컨트롤러 작업은 실제로 자체 랙 애플리케이션입니다! 랙 끝점은 컨트롤러 클래스의
action
메서드에 의해 반환됩니다.# ...
module MyApp
class Application < Rails::Application
config.load_defaults 7.0
config.exceptions_app = ->(env) {
ErrorsController.action(:show).call(env)
}
end
end
서버를 다시 시작한 다음 존재하지 않는 페이지를 방문하십시오. 또는 컨트롤러 작업에서 오류를 수동으로 트리거합니다. 사용자 정의 오류 페이지가 작동하는 것을 볼 수 있습니다!
이 게시물이 마음에 든다면 내 책The Rails and Hotwire Codex을 확인하여 Rails 및 Hotwire 기술을 레벨 업하십시오!
Reference
이 문제에 관하여(Rails의 사용자 지정 오류 페이지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ayushn21/custom-error-pages-in-rails-4i43텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)