我在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