2016-09-26 4 views
0

우리는 응용 프로그램에서 raven-sentry를 사용하고 있으며 모든 오류에 적용되는 기본 옵션 'catch all'세트를 갖고 싶습니다. 레일 예외 - 컨트롤러에서 인스턴스 변수를 가져옵니다.

class StandardError 
    def raven_context 
    extra = {} 

    #add conditional key/values to the hash if they exist 
    extra[:account_id] = @account.id if @account 

    extra.empty? ? {} : { extra: extra } 
    end 
end 

예외가 모델 또는 컨트롤러 중 하나의 인스턴스화 클래스에서 제기되기 때문에

, 난 그 변수에 접근 할 수있을 거라고 생각했다. accounts # show에서 예외가 발생하면 @account에 액세스 할 수 있기를 원합니다. Account.create()에서 예외가 발생하면 오류와 같이 해당 계정에 대한 정보를 얻을 수 있기를 바랍니다.

이것이 가능합니까? 그렇다면 어떻게?

답변

0

당신은/잡기 등 ActiveRecord::RecordInvalid

그래서 기본적으로 같은 일반 오류 디자인 할 수있는 예외를 인상하는 방법의 Rails idea 따를 수 있습니다 : 그냥 당신이 오류가 발생하면 이제

class MyGenericError < StandardError 
    attr_reader :account, :others 

    def initialize(message = nil, account = nil, others={}) 
    @account = account 
    @others = others 
    super(message) 
    end 
end 

class MySpecificError < MyGenericError; end 

을 필요한 PARAMS 같은 패스 : 오류를 잡는 경우 마지막으로

raise MySpecificError.new('doing something wrong', @account) if doing_something_wrong 

, 당신은 단지 account attribu를 얻을 수 테와 그것을 자유롭게 사용하십시오.

+0

여기서 유일한 문제는 내가 특별히 제기 한 오류 일 것입니다. Sentry를 사용하면 모든 정보를 Raven.capture_exception (e, extra : {원하는 것은 무엇이든})을 통해 전달할 수 있습니다. 센트리는 또한 처리되지 않은 예외를 캡처합니다. 이것들은 특히 관심이 있습니다. – TIMBERings