私はRails 2.1のrouting.rbコードを試していて、適切なパスが見つからない場合にスローされるRoutingError例外を使って何か役に立つことができるようにしています。Rails 2.1.xでRoutingErrorを処理する最善の方法は?
これはやや難しい問題です。いくつかのクラスのURLがあります:Bazの/azenv.phpボット攻撃、/ bar/foo/bazのURLへの入力などです。それを望んでいない。
次に、/ artists// ///など通知が必要な微妙なルーティングの問題があります。このような状況では、エラーが発生する可能性があります。そうでない場合は、Googleが有効であったが削除されたURLは送信されます。
これらの状況では、私が戻ってきたパス、あるいは通常の「フォールバックキャッチオール」URLを過ぎたルーティングを管理するためのRailsyの方法を含む、分析し、フィルタリングする方法が必要です。これは存在しますか?
EDIT:
だからここのコードは次のとおりです。
# File vendor/rails/actionpack/lib/action_controller/rescue.rb, line 141
def rescue_action_without_handler(exception)
log_error(exception) if logger
erase_results if performed?
# Let the exception alter the response if it wants.
# For example, MethodNotAllowed sets the Allow header.
if exception.respond_to?(:handle_response!)
exception.handle_response!(response)
end
if consider_all_requests_local || local_request?
rescue_action_locally(exception)
else
rescue_action_in_public(exception)
end
end
だから、私たちの最良のオプションは、我々は例外に応じて例外を絞り込むことができるようにLOG_ERROR(例外)をオーバーライドすることです。我々はなど別のコントローラロジック、ルートを、したい追加のロジックのためだから、ApplicationControllerに
def log_error(exception)
message = '...'
if should_log_exception_as_debug?(exception)
logger.debug(message)
else
logger.error(message)
end
end
def should_log_exception_as_debug?(exception)
return (ActionController::RoutingError === exception)
end
で塩
method_missingを使用すると、いくつかの問題が発生する可能性があります。 1つは、セキュリティに使用されている誤ってラベル付けされたbefore_filterがある場合、method_missingは呼び出しを静かにキャプチャし、ログにルーティングエラーが発生し、誰かが管理ページを表示できなくなったときに表示できます。 – epochwolf