2012-06-21 28 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

沒有意識到它是一個類,所以解決方案是完美的。並且隨着閃光燈的添加和渲染正是我要去的地方。謝謝。 –