私は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
問題はraise e
をレンダリングし、それを一般的な500エラーを送信しますから、それを停止して以来、私のクライアントは、JSONメッセージを取得することはありませんということです。
これはどのように修正する必要がありますか?
[マイソリューション]
以下ジョーダンによって示唆されるように、私は単に私のコードでは、私は例外をキャッチし、いつでもnotify_airbrake(ex)
を呼び出します。
class ApplicationController < ActionController::Base
...
def notify_exception_service(ex)
notify_airbrake(ex)
end
...
end
だから私はちょうどnotify_exception_service(ex)
を呼び出す代わりにnotify_airbrake(ex)
で、私は簡単に将来的に何か他のものにエアブレーキから変更することができるようにしかし、私は私のApplicationController
に以下を追加することで、わずかにそれを抽象化。
ありがとうジョーダン。私はもっと良い解決策を見つけることを望んでいましたが、それが私がやり遂げたことです。しかし、私はAirbrakeから必要に応じて何かに簡単に変更できるように、少し抽象化しました。 –