2016-06-27 37 views
0

我想用'rescue_from'在REST API應用程序中捕獲任何RoR異常。如何在Ruby on Rails中捕獲基本異常類?

rescue_from StandardError do |exception| 
    message = Rails.env.production? ? 'API server error' : exception.message 
    render json: {status: "Error", message: message}, status: :internal_server_error 
end 

但它捕獲了太多不相關的例外。我能僅捕獲RoR異常嗎?這是一個很好的做法嗎?如果不是,還有什麼可以推薦的?

+0

什麼意思是「僅限RoR例外」。從控制器/模型中拋出的「ZeroDivision」錯誤地試圖計算零件數量的平均值,「RoR one」? – mudasobwa

+0

@mudasobwa:例如,路由錯誤,缺少參數,未找到記錄等。 – Romiras

+0

地球上的'RecordNotFound'如何是Rails特有的?除了Rails之外,可能有一個應用程序完全使用數據庫(和「ActiveRecord」)。有關路由錯誤,請參見['ActionControllerError'](https://github.com/rails/rails/blob/52ce6ece8c8f74064bb64e0a0b1ddd83092718e1/actionpack/lib/action_controller/metal/exceptions.rb)。順便說一句,你打算如何處理拋出的其他異常?只是讓你的應用程序死亡? – mudasobwa

回答

0

嗯,你可以隨時出去獲得所有Rails例外的詳盡列表,但老實說,你的第一步應該是確定你想要從中拯救出什麼樣的情況,以及你希望允許哪些情況發生災難性的行爲。並非所有的例外都應該被捕獲。

如果您在捕獲所有Rails異常方面已經死心塌地,那麼您應該查看您正在使用的Rails版本的api文檔,並查找您關心的異常的基類。例如,如果你希望只抓住所有的ActiveRecord,你可以從基地ActiveRecord::ActiveRecordError救援。

我再次強調,你應該從另一個方向來解決這個問題 - 不是拯救所有事情,然後試圖彌補它,而是通過從最低限度的救援中恢復並根據需要添加。