2014-02-19 5 views
2

내 포도 응용 프로그램은 마지막 포함한 여러 오류 핸들러,이 모든 오류 구출하지 :루비 포도 rescue_from : 모든

rescue_from :all, backtrace: true do |e| 
    message = { errors: { all: e.message } } 
    rack_response(format_message(message, e.backtrace), 500) 
end 

를하지만 적어도 오류를 구출되지 않도록 내부적으로

throw :error 

와 포도 프로세스 . 이러한 오류를 어떻게 구합니까? 언급 된 특정 오류는 "요청 된 형식 'txt'가 지원되지 않음 '과'찾을 수 없음 : some_path '입니다. 이러한 오류는 형식 확장자가 없거나 '.' 가 각각 공급된다.

+0

는이 질문을 레일인가 :

module CustomErrorFormatter def self.call message, backtrace, options, env { errors: { all: message.to_s } }.to_json end end 

그리고 주요 응용 프로그램에서

? –

+0

레일을 사용하지 않습니다. –

답변

1

당신은 던진 조건을 구출하지 않습니다. rescue은 오류 발생이 아닌 오류 raise d 오류이므로 오류 처리기로 바로갑니다. throwraise과 정확히 동일한 개체를 만들지 않으므로 같은 방식으로 처리 할 수 ​​없습니다.

당신은 할 수 있지만, 형식 사용하여 오류 메시지가 error_formatter :

error_formatter :json, CustomErrorFormatter 
+0

나는 포도가 던져진 오류를 잡아서 Grape :: 예외를 발생시켜 인터페이스를 통일시킬 것이라고 생각했다. –

+0

포도 포맷터는 포맷 확장자를 가정하며 포맷 확장자가 누락되어 (질문이 수정 됨) 언급 된 두 가지 오류가 있습니다. 기본 형식을 사용하면 형식 확장자가없는 첫 번째 경우를 처리하지만 '.' 커스텀 포맷터를 선택하는 포맷이 없으므로 여전히 실패하고 텍스트를 전송합니다. –

+0

@ Geroge Shaw : 나는 포도 발생에 대한 배후에 있을지도 모른다 :: 예외, 또는 지금 내부 구조의 측면에서 이런 식으로 방향을 바꾸는 좋은 이유가 있을지도 모른다. 모르겠다. 예 : 'default_error_formatter : json'? –