25

Rails アプリケーションに CORS を実装したかったので、rack-cors gem で検索しました。そして、READMEに書かれているようにすべてを行いました.Gemfileがそれに応じて更新されapplication.rb、次のように更新されました:

module YourApp
  class Application < Rails::Application

    # ...

    config.middleware.use Rack::Cors do
      allow do
        origins '*'
        resource '*', :headers => :any, :methods => [:get, :post, :options]
      end
    end

  end
end

しかし、うまくいきませんでした。私が何をしたとしても、ブラウザのコンソールに次のメッセージが表示され続けました。
XMLHttpRequest cannot load https://somewebsite.com. Origin http://0.0.0.0:3000 is not allowed by Access-Control-Allow-Origin.

このブログ投稿とgithub の問題を読んだ後、ミドルウェア スタック内の Rack-cors ミドルウェアの位置が重要であることに気付きました。だから私はgithubの問題で言われたようにしました:

module YourApp
  class Application < Rails::Application

    # ...

    config.middleware.insert 0, Rack::Cors do
      allow do
        origins '*'
        resource '*', :headers => :any, :methods => [:get, :post, :options]
      end
    end

  end
end

その後、rake middlewarerack-cors を実行すると、実際にスタックの一番上にあります。
しかし、それでもうまくいきません。同じエラーが発生し続けます。誰でも、助けてください。

4

6 に答える 6

21

私はherokuで同じ問題に遭遇しました。同じラックコアの問題でこのブログを見つけました。

をに移動しuse Rack::Corsconfig.ruheroku に再デプロイしただけで動作します。

require ::File.expand_path('../config/environment',  __FILE__)
run Rails.application

require 'rack/cors'
use Rack::Cors do

  # allow all origins in development
  allow do
    origins '*'
    resource '*', 
        :headers => :any, 
        :methods => [:get, :post, :delete, :put, :options]
  end
end
于 2013-12-09T07:01:04.127 に答える
2

オプション リクエストを処理するために特別なルートを作成する必要がありましたが、cors gem は期待どおりにそれを実行しませんでした。routes.rb の末尾に追加したルートは次のとおりです。

  match "*path", :to => proc {|env| [200, {
  'Access-Control-Allow-Origin' => '*',
  'Access-Control-Allow-Methods' => 'GET, POST, PUT, DELETE, OPTIONS',
  'Access-Control-Allow-Credentials' => 'true',
  'Access-Control-Request-Method' => '*',
  'Access-Control-Allow-Headers' => 'Origin, X-Requested-With, Content-Type, Accept, Authorization',
'Content-Type' => 'text/plain'

 }, ["CORS Preflight"]] }, :via => [:options]
于 2016-09-17T21:47:19.007 に答える
0

結局、この gem には heroku にいくつかの問題があることが判明しましたが、ローカル マシンでは問題なく動作します。

于 2013-08-30T19:29:42.627 に答える