CorsControllerアプリケーションがリクエストを受信するたびに、クロスドメイン ajax ヘッダー (オリジンが許可されている場合) に応答する仕事がありますOPTIONS。しかし、そのリクエストがどこに到達するか正確にはわからないためOPTIONS、routes ファイルの先頭にキャッチオール ルートを設定してOPTIONS、任意のパスへのあらゆるリクエストをキャッチします。
map.cors '*path',
:controller => 'cors',
:action => 'index',
:conditions => { :method => :options }
実際のOPTIONSリクエストの場合、これはうまく機能します。アプリが を提供する必要があるときに問題が発生し404 Not Foundます。
ロードするとどうなるか/no/404/for/you(アプリケーションがルートを処理しないパス)、404 を取得しなくなりました。代わりに、このルートがアクティブになり、405 Method Not Allowed. これにより、ログが実際にはエラーではないエラーでいっぱいになり、監視 (New Relic など) がエラー率に関するパニック メールを送信しますが、実際にはすべて問題ありません。
パスが一致しているように見えますが、:conditionsそうではなく、例外が発生します。興味深いのは、ルート処理が 2 パス プロセスのように見えることです。このcorsルートは、ルートファイルの上部にあり、OPTIONSリクエストがある場合(良い)、または一致した後に他のルートが宣言されておらず、そのパスに静的ファイルがない場合(悪い)にのみトリガーされます。
質問:
このキャッチオール ルートを取得して、すべてのリクエストに対してコントローラーをヒットさせるにはどうすればよいでしょOPTIONSうか。GETPOSTPUTDELETE
悲しいことに、Rails 2.x でこれを行う必要があります。