최근 여러 사용자가 맞춤형 Rails 오류 처리기를 사용한 경험이 있는 이유를 알려 주었습니다.
승인됨: Fortect
Rails 오류 처리 전략을 의미합니다.
머피의 법칙:
Murphy가 법을 시행함에 따라 잘못될 가능성이 있는 모든 것은 잘못될 것이며, 이것이 가장 중요한 이유입니다. 이것은 소프트웨어 발명에서도 모든 곳에 적용됩니다. 우리가 개발 중인 애플리케이션은 이를 처리하기에 충분히 번창할 수 있습니다. 즉, 상황이 안정적이어야 합니다. 이것은 일반적으로 이 블로그 게시물의 내용입니다.
상황이 잘못될 수 있는 경우 가장 최근에 잘못된 결정이 내려질 것입니다.
– 머피의 … 법칙
Rails의 워크플로에서 레벨 문에서 오류를 처리하지 않는 이유는 무엇입니까? 예를 들어 Rails를 사용하여 API를 작성한다고 가정해 보겠습니다. 사용자 지정 JSON을 렌더링하는 대신 다음 컨트롤러를 고려하십시오.
사용자 정의 아이디어가 발견되면 Json으로 렌더링되고, 그렇지 않으면 json 오류를 반환합니다. 이것은 Rails에서 일반적으로 현재 메소드를 작성하는 전형적인 방법입니다. 그러나 여기에 노출이 있습니다. 사용자 등록이 시작되지 않으면 else 장애물로 점프하지 않고 Fallback-500.html의 내용만 표시합니다. 글쎄요, 그것은 예상치 못한 일이었습니다. 이는 검증 가능한 사실에 기인합니다. 그러나 레코드를 찾을 수 없는 경우 고유한 RecordNotFound 오류가 발생합니다. find_by와 동일합니다! 쾅하는 모든 Finder 방법이 가능합니다.
<섹션>
예외! 버그 켜기
버그를 수정하기 전에 중요한 것을 이해해야 합니다. 위의 예에서 볼 수 있듯이 전문가들은 ActiveRecord :: RecordNotFound 오류를 받고 있습니다. 루비를 잡으려고 하면 이것 저것이 보일 텐데, 괜찮습니다.
그러나 먼저 예외를 피하려면 예외가 시장에서 예외 및 Ruby 버그. 절대 배제로부터 자신을 구하지 마십시오. 모든 예외 클래스에서 발생하는 각 예외를 개별적으로 처리하고 궁극적으로 렌더링을 단축하고자 합니다.
대신에, 우리는 StandardError가 있는 우리 자신을 구출해야 합니다. 다음은 결과를 설명하는 웹사이트에 대한 훌륭한 기사입니다. http://blog.honeybadger.io/ruby-exception-vs-standarderror-whats-the-difference/입니다.
Rescue
실제 버그를 처리하기 위해 충돌 차단을 사용할 수 있습니다. 복구 블록은 Java 세계에서 온 경우 try..catch 블록과 일부 동일합니다. 여기에 여분의 장애물이 있는 지점의 관련 사본이 있습니다.
이 접근 방식을 사용하면 오류가 컨트롤러의 일종의 방법과 수단으로 기록됩니다. 이 특정 방법은 잘 작동하지만 문제 해결에 대한 주요 접근 방식은 아닙니다. 다음은 훌륭한 대안적 접근 방식 중 몇 가지 이유입니다.
- Fat 귀하의 훌륭한 Thoughtbots 기사 https://robots.oughttbot.com/skinny-controllers- 스키니 모델을 읽으십시오.
- DRY-We 원칙: DRY(Don’t Repeat Yourself) 원칙에 위배되는 다른 지점에서 자신의 오류를 중지하는 것을 반복하는 것으로 충분합니다.
- 유지보수성: 코드를 관리하기가 점점 더 어려워집니다. 오류를 변경하고 일반적으로 형식에는 주요 변경 사항이 수반됩니다.
재개 가능한 접근 방식은 ApplicationController에 대한 회전 오류 처리 블록입니다. 더 깨끗한 방법은 좋은 오류 모듈 트레이너를 작성하는 것입니다.
섹션>
오류 처리 – 모듈식 접근 방식
레이아웃 오류를 제때 수정하기 위한 첫 번째 기본 옵션은 ApplicationController에서 플래그를 지정하는 것입니다. 그러나 전체 비즈니스 로직에서 분리하는 것이 좋습니다.
전역적으로 오류를 처리하는 부분을 만들어 보겠습니다. 올바른 ErrorHandler 모듈(error_handler.rb)을 생성하고 lib 및 오류 동안(또는 다운로드할 어딘가에) 배치하고 마지막으로 ApplicationController.Load를 용이하게 합니다.
중요: 응용 프로그램의 명시적 오류 모듈은 config/application.rb에서 확장으로 여는 것입니다.
참고: json에서 렌더링을 사용하는 다양한 유형을 돕기 위해 몇 가지를 연습합니다. 여기에서 확인할 수 있습니까?
error_handler 모듈을 시작하기 전에 완전히 공부해야 하는 세그먼트에 대한 흥미로운 기사가 있습니다. 모듈에서 “observe self.included” 메서드로 시작하면 현재 연결된 메서드가 마치 원래 클래스에 배치된 것처럼 작동합니다. 따라서 ApplicationController를 사용하여 표시되는 ErrorHandler 모듈이 있습니다.
실행하자 ErrorModule을 오류 처리 블록에 추가해 봅시다. 예를 들면 이렇게 보입니다.
ActiveRecord: RecordNotFound 오류가 발생하면 StandardError도 상속됩니다. 우리는 지금 이것을 위한 특별한 대체 메커니즘을 가지고 있기 때문에 완전한 기록을 얻습니다: record_not_found. StandardError 막힘은 모든 오류를 제공하는 단일 대체 메커니즘으로 작동합니다.
섹션>
자신의 예외를 정의하십시오.
StandardError에서 상속된 우리 고유의 오류 클래스라는 단어도 생각할 수 있습니다. 일을 단순하게 유지하기 위해 오류에 정의된 모든 클래스에 공통적인 기능과 리소스를 포함하는 특정 새 CustomError 클래스를 만들 수 있습니다. 우리의 사용자 정의 오류는 이제 이 CustomError를 확장합니다.
모든 다른 오류에 대해 시스템 설정을 덮어쓸 수 있습니다. NotVisibleError 예제는 CustomError를 확장합니다. 개인이 볼 수 있듯이 일부 사람들은 error_message를 재정의합니다.
사용자 지정 오류를 수정하기 위해 오류 클라이언트 복구를 수행할 수 있습니다. 우리는 또한 우리가 그것을 다르게 처리하기를 원한다면 명시적 오류를 저장할 수 있습니다.
섹션>
404 And Can 500
404 및 500과 같은 일반 예외를 처리하지만 이는 순전히 개발자를 위해 도용함으로써 수행됩니다. 오류를 살펴보기 위해 별도의 컨트롤러 클래스를 구성해야 합니다.
예외를 해결하기 위해 경로를 사용하는 Rails를 설명합니다. 종종 application.rb에 해당하는 라인.
config.Exceptions_app은 경로를 의미합니다.
는 이제 번호 not_found 오류 및 #에 대해 500을 롤백합니다. internal_server_error 슬립.
섹션>
결론
승인됨: Fortect
Fortect은 세계에서 가장 인기 있고 효과적인 PC 수리 도구입니다. 수백만 명의 사람들이 시스템을 빠르고 원활하며 오류 없이 실행하도록 신뢰합니다. 간단한 사용자 인터페이스와 강력한 검색 엔진을 갖춘 Fortect은 시스템 불안정 및 보안 문제부터 메모리 관리 및 성능 병목 현상에 이르기까지 광범위한 Windows 문제를 빠르게 찾아 수정합니다.
Modular Approach는 오류 처리에 대한 Rails 과정입니다. 특정 오류 마케팅 메시지/형식을 변경하고자 할 때마다 당사는 결정에서 이를 이동할 권리를 보유합니다. 이 접근 방식을 통해 제 파트너와 저는 또한 오류 처리를 통해 가장 중요한 애플리케이션 로직을 분리하여 컨트롤러를 건방진 것에 비해 부드럽게 만듭니다. 얇은 컨트롤러 및 모델에서 최고의
기차 레일.
이것은 모듈식 옵션으로 오류를 처리하기 위한 완전한 소프트웨어 소스 코드입니다. 누군가가 도움이 되었다면 “추천” 버튼을 클릭하십시오. 그리고 실질적인 의문점이 생기면 언제든지 대답할 수 있습니다. 모듈러 브라보!
섹션>
트랙의 장애물 제거 방법.
지금 이 간단한 다운로드로 컴퓨터 성능을 높이십시오. 년
년