私はRails 2.1のrouting.rbコードで遊んでいて、適切なパスが見つからない場合にスローされるRoutingError例外で何か役に立つことができるところまで到達しようとしています。
/azenv.php ボット攻撃、URL に /bar/foo/baz を入力する人など、単純に悪い URL のクラスがあるため、これはややトリッキーな問題です。それ。
次に、微妙なルーティングの問題があります。たとえば、/artists/ や /// など、通知を受け取りたい場所です。このような状況では、エラーをスローしたい場合と、スローしたくない場合があります... または、以前は有効だったが削除されたために無効になった URL を Google から送信してもらうことがあります。
これらの状況のそれぞれで、返されるパスを格納、分析、フィルタリングする方法、または少なくとも通常の「フォールバック キャッチオール」URL を通過するルーティングを管理する Railsy の方法が必要です。これは存在しますか?
編集:
したがって、ここのコードは次のとおりです。
# 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(exception) をオーバーライドすることです。だから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
別のコントローラーロジック、ルートなどが必要な追加ロジックのソルト。