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 に答える