0

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 でこれを行う必要があります。

4

1 に答える 1

2

だからあなたは言う

このcorsルートは、ルートファイルの上部にあり、OPTIONSリクエストがある場合(良い)、または一致した後に他のルート宣言がなく、そのパスに静的ファイルがない場合(悪い)にのみトリガーされます。

routes.rb他のすべてに一致するルートを最後に追加して、404 を返すことができます。

あなたが言ったように、それは一種のハッキーですが、トップでキャッチオールルートを完了する他の方法は見当たりません. 多分誰かが何か他のものを思い付くでしょう。

于 2013-02-26T00:08:06.167 に答える