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
うか。GET
POST
PUT
DELETE
悲しいことに、Rails 2.x でこれを行う必要があります。