2012-06-21 16 views
0

在我的Rails应用程序中,我使用ActiveResource访问另一个服务,并且我想优雅地处理该资源处于脱机状态(服务器关闭/ ip被阻止等)时发生的异常。要退回没有反应,我的应用程序生成此错误:如何检查ActiveResource资源的可用性?

Errno::ECONNREFUSED in UsersController 

我希望做一个“rescue_from”我的应用程序控制器,以便它会处理错误,每当它发生,但不知道是什么params会,或者这种例外甚至可以在这一点上被捕获。

应该/我可以测试资源的可用性吗?

我可以做到这一点,但它捕捉到每一个错误,我想赶上我得到的具体连接类型错误。

rescue_from Exception, do 
    ... 
end 

回答

1

假设一切正常,然后在出现异常时处理异常可能更容易。您可以使用您的应用程序控制器rescue_from(或者可能是你的用户控制器,如果它是一个局部误差):

class ApplicationController < ActionController::Base 
    rescue_from(Errno::ECONNREFUSED) do |e| 
     flash[:warning] = 'Hey! Bad things happened!' 
     render :template => 'my/error/page' 
    end 
end 

注:我开始这个你更新你的职位之前,但好消息是,Errno::ECONNREFUSED是一类 - 不是一个恒定的 - 所以你可以用它代替通用Exception的:

irb(main):009:0> Errno::ECONNREFUSED 
=> Errno::ECONNREFUSED 
irb(main):010:0> Errno::ECONNREFUSED.class 
=> Class 
irb(main):011:0> Errno::ECONNREFUSED.superclass 
=> SystemCallError 

希望帮助!

+0

没有意识到它是一个类,所以解决方案是完美的。并且随着闪光灯的添加和渲染正是我要去的地方。谢谢。 –