【发布时间】:2013-11-25 04:39:24
【问题描述】:
我正在尝试将 Rack::Cors 与我的 Rails 4 应用程序一起使用,以便我可以执行基于 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 之后插入以尝试获取调试信息。
我正在使用 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 语句放入initialize、call 和allow 方法中。 initialize 和 allow 方法都被调用。 call 方法永远不会被调用。所以似乎有什么东西在请求到达 cors 中间件之前阻止了它。
【问题讨论】:
-
你有没有想过这个问题?我一直在间歇性地工作....虽然根本不知道如何在heroku上调试它。 :(
-
@Mark37 我还没弄明白。
-
我发誓我昨天刚刚让它工作了。有趣的是,heroku 日志甚至没有记录我的 OPTIONS 请求,所以我提交了一份支持票,并查看 heroku 路由器是否发生了问题。如果我听到任何消息,我会回复。
-
另外一个奇怪的事实是,如果我的服务由于空闲而停止,并且我尝试发出该 curl OPTIONS 请求,则测功机将不会再次启动。只有当我发出 GET、POST、PUT、DELETE 时,测功机才会开始旋转。
标签: heroku ruby-on-rails-4 cors