Rails 4 アプリケーションで Rack::Cors を使用して、JSON ベースの API を実行しようとしています。
CORS は私の Gemfile に次のように含まれています。
gem 'rack-cors', :require => 'rack/cors'
次のように application.rb ファイルで構成を行っています。
config.middleware.insert_after Rails::Rack::Logger, Rack::Cors, :debug => true, :logger => Rails.logger do
allow do
origins '*'
resource '/messages*', :headers => :any, :methods => [:post, :options]
end
end
Rails::Rack::Logger
デバッグ情報を取得しようとしてafter を挿入しています。
私はそれをテストするためにCURLを使用しています。これが私が実行しているものです:
curl --verbose --request OPTIONS http://jasonbutzinfo.herokuapp.com/messages.json --header 'Origin: http://www.jasonbutz.info' --header 'Access-Control-Request-Headers: Origin, Accept, Content-Type' --header 'Access-Control-Request-Method: POST'
Rails アプリをローカル マシンで実行すると、問題なく動作します。Heroku アプリを起動すると、次のようになります。
> OPTIONS /messages.json HTTP/1.1
> User-Agent: curl/7.30.0
> Host: jasonbutzinfo.herokuapp.com
> Accept: */*
> Origin: http://www.jasonbutz.info
> Access-Control-Request-Headers: Origin, Accept, Content-Type
> Access-Control-Request-Method: POST
>
* Empty reply from server
* Connection #0 to host jasonbutzinfo.herokuapp.com left intact
curl: (52) Empty reply from server
この質問 ( Can't get rack-cors working in rails application ) を見つけましたが、役立つ回答はありませんでした。
更新 2013 年 11 月 13 日 16:40 EST
何が起こっているのかをさらにデバッグしようとしています。Rack::Cors のメソッドのいくつかにモンキー パッチを適用して、それらが Heroku で呼び出されているかどうかを確認しました。また、ラック ミドルウェア スタックの一番上になるように Cors を挿入する場所も変更しました。
私のモンキーパッチで、、、、メソッドにステートメントを入れましたputs
。メソッドとメソッドの両方が呼び出されます。メソッドが呼び出されることはありません。そのため、cors ミドルウェアに到達する前にリクエストを停止しているものがあるようです。initialize
call
allow
initialize
allow
call