2013-08-30 9 views
20

私はレールアプリケーションに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 

しかし、それは動作しませんでした。どんなに私が何をしたか、私はメッセージ取得保管ブラウザコンソールで:githubの上でこのblogpostissueを読んだ後
XMLHttpRequest cannot load https://somewebsite.com. Origin http://0.0.0.0:3000 is not allowed by Access-Control-Allow-Origin.

を、私は、ミドルウェア・スタック事項のラックCORSミドルウェアのかもしれない位置ことに気づきません。その後

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 middlewareラックCORSを実行すると、スタックの最上部には本当にです:だから私はgithubの問題に言われたとおりにしました。
しかし、それはまだ単純に機能しません。私は同じエラーが発生し続けます。誰でも助けてください。

+0

私はそれは明らかだが、知っているあなたは、レールのサーバを再起動することを確認したのですか?これは初期化の一部なので、再起動するまで有効になりません。 – clexmond

+0

はい、サーバーを何度も再起動しました。 – Prostakov

+0

問題は、この宝石を働かせるのは超自然ではないということです。ちょうど私を狂ってしまう。 – Prostakov

答えて

15

私は英雄と同じ問題に遭遇しました。私はthis blogと同じrack-cors問題を発見しました。

ちょうどuse Rack::Corsconfig.ruに移動し、herokuに再配備します。

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 
+0

まだ開発中ではありません.. – larryzhao

+1

それは** DO **の仕事です。 2014年7月7日の時点で**これは機能させるための**唯一の方法です(または、Googleで利用可能なすべてのソリューションに2時間3時間を費やすことができます)。 thx – Ben

+0

この 'require 'rack/cors''を持っていることを確認してください –

0

結局のところ、この宝石は英雄でいくつかの問題を抱えていますが、ローカルマシンでは完璧に動作します。

+3

これ以上の手がかりやリンクは提供できますか?あなたは回避策を見つけましたか? – Jason

10

は私のために働い

config.middleware.insert_before ActionDispatch::Static, Rack::Cors do 

てみHerokuのソリューション

代わりの

config.middleware.use Rack::Cors do 

使用するための新しいissueスレッドがあります。

+0

これはRailsのバージョンのようです。私は上記の答えをRails 3.2で、最初のコードスニペットをRails 4.1で使用しなければならないことを発見しました。 –

+0

はどちらも私のために働いた、レール4.1。このスレッドは、Web上でこのトピックについて見つけられるかもしれないたくさんのくそに比べて、貴重です – Ben

1

オプションリクエストを処理するために特別なルートを作成する必要がありましたが、私が期待したように私のためにそれをしませんでした。私は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] 
0

gem 'rack-cors'追加したことを確認またはコメントを外してくださいGemfileで

関連する問題