无法让rails-cors在rails应用程序中工作

我想在我的rails应用程序中实现CORS,所以我用Google搜索了rack-cors gem。 我按照README中的说法做了一切,相应地更新了Gemfile并更新了application.rb如下所示:

 module YourApp class Application  :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的博文和问题之后,我意识到中间件堆栈中机架中间件的位置可能很重要。 所以我按照github问题的说法做了:

 module YourApp class Application  :any, :methods => [:get, :post, :options] end end end end 

在那之后,当我运行rake middleware rack-cors真的处于堆栈的顶端。
但它仍然只是根本行不通。 我一直得到同样的错误。 任何人,请帮忙。

我和heroku遇到了同样的问题。 我发现这个博客有同样的机架问题。

刚刚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 

heroku解决方案有一个新的问题线程

而不是使用

 config.middleware.use Rack::Cors do 

尝试

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

这对我有用。

我不得不创建一个特殊的路线来处理选项请求,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] 

毕竟它出现了这个gem与heroku有一些问题,在本地机器上它完全正常。

确保在Gemfile中添加或取消注释gem 'rack-cors'