0

在我的 rails 应用程序中,我正在使用 ActiveResource 访问另一个服务,并且我想优雅地处理该资源脱机时发生的异常(服务器关闭/ip 被阻止等)。在没有返回任何响应的情况下,我的应用程序会生成此错误:

Errno::ECONNREFUSED in UsersController

我想在我的应用程序控制器中执行“rescue_from”,以便在错误发生时处理错误,但不确定参数是什么,或者这种异常此时甚至可以捕获。

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

我可以这样做,但它会捕获每个错误,并且我想捕获我遇到的特定连接类型错误。

rescue_from Exception, do
  ...
end   
4

1 回答 1

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

希望有帮助!

于 2012-06-21T18:07:52.857 回答