2011-08-13 3 views
1

레일스에서 ​​예외 처리를 어떻게 사용할 수 있습니까? 현재 나는 다음과 같이했습니다. 내가레일에서 로우 레벨 예외 처리

begin 
    <myCode> 
rescue 
    <exception handler> 

을 추가 한하지만 각각의 방법에서 그들을 처리하지 않고, 내가 응용 프로그램 컨트롤러에서 예외 핸들러 메소드를 정의하고 거기에서 모든 예외를 잡을 수 있어야 레일이 생각하는 각 컨트롤러 방법에

.

내 응용 프로그램 컨트롤러에 'rescue_action_in_public'을 사용했지만 config/database.yml에 잘못된 데이터베이스 이름을 지정하고 응용 프로그램을로드하면 해당 예외를 catch하지 않습니다.

내 질문

일이다 -이 응용 프로그램 컨트롤러에 하나의 예외 핸들러를 가지고 있고 예외를 잡을 수있는 재 컴파일 연습인가? 그렇지 않다면 표준 방법은 무엇입니까?

2 - 찾을 수 없음 어떻게, 데이타베이스와 같은 예외를 처리 할 수있는, 테이블 필드 등 낮은 수준의 예외

내가 레일 3 타고있어의 종류를 볼 수있는 권한을 가지고 있고 나는 어떤 프로젝트가 없습니다 Rails 2.3.8도 마찬가지입니다

답변

1

PragProg의 Advanced Rails Recipes 책에 따르면 일반적인 예외 처리가 좋은 접근 방법입니다. rescue_action (모든 환경) 및 rescue_action_in_public (프로덕션)은 추상 컨트롤러 클래스에서 예외를 포착하는 데 사용하고 있습니다. 그래서 당신은 그것을 올바르게합니다.

컨트롤러가로드되기 전에 부팅 응용 프로그램이 발생하므로 database.yml을 처리 할 수 ​​없습니다. 그래도 초기화가 필요하면 초기화 파일 루비 파일을 넣어 파일이 존재하는지 확인한 다음 AR :: Base 연결을 초기화하여 DESC 테이블을 수행합니다.

0

레일즈 3의 경우 ApplicationController에서 rescue_from을 사용할 수 있습니다. 붙잡고 자하는 예외가 낮은 레벨에 있다면 랙 미들웨어 레이어를 구성하여 컨트롤러가 액세스 할 수없는 예외를 잡을 수 있습니다. 이것은 Hoptoad가 작동하는 방식입니다. 나는 최근에 rescue_from을 사용하여 일반적인 예외를 잡아 내고 잘 정의 된 http 상태 코드와 html, json 및 xml에 대한 오류 응답을 제공하는 레일 3 보석을 출시했습니다. 이것은 귀하의 필요에 부응 할 수도 있고 그렇지 않을 수도 있습니다. https://github.com/voomify/egregious