我在Rails中創建了一個API,並且遇到了一種情況,我想通過向用戶傳遞一些帶有錯誤消息的JSON來提醒用戶發生了某些不良事件。但是,我還想重新提出例外情況,以便Airbrake(以前的Hoptoad)仍然會發現錯誤並通知我們,以便我們可以更多地查看問題。在Rails控制器中渲染和重新拋出異常
我目前捕捉錯誤,像這樣:
begin
if @myobject.update_attributes(:foo => "bar")
render :json => @myobject, :status => :ok
else
render :json => @myobject.errors, :status => :unprocessable_entity
end
rescue Exception => e
render :json => { :errors => { :message => "Uh oh! Something went wrong." } }
raise e
end
的問題是,我的客戶從來沒有得到的JSON消息,因爲從raise e
渲染停止它並把它發送一個通用的500錯誤。
我該如何解決這個問題?
[我的解決方案]
至於建議約旦下面,我簡單地調用notify_airbrake(ex)
在我的代碼,我捕捉到了異常的任何時間。不過,我抽象稍微加入下面的我ApplicationController
,這樣我可以很容易地從空中剎車改到別的東西在未來:
class ApplicationController < ActionController::Base
...
def notify_exception_service(ex)
notify_airbrake(ex)
end
...
end
所以,相反的notify_airbrake(ex)
我只是叫notify_exception_service(ex)
。
感謝喬丹。我希望找到一個更好的解決方案,但這正是我所做的。但是,我確實稍微抽象了一下,以便在需要的情況下可以輕鬆地將Airbrake更改爲其他內容。 – 2012-01-17 14:27:20