Jas*_*son 18 heroku cors ruby-on-rails-4
我正在尝试将Rack :: Cors与我的Rails 4应用程序一起使用,以便我可以执行基于JSON的API.
CORS在我的Gemfile中是这样的:
gem 'rack-cors', :require => 'rack/cors'
Run Code Online (Sandbox Code Playgroud)
我正在我的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
Run Code Online (Sandbox Code Playgroud)
我插入后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'
Run Code Online (Sandbox Code Playgroud)
当我在本地计算机上运行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
Run Code Online (Sandbox Code Playgroud)
我确实找到了这个问题(不能让机架在rails应用程序中工作),但没有提供任何有用的答案.
更新11/13/2013 16:40 EST
我一直在尝试对正在发生的事情进行更多的调试.我有猴子修补了一些Rack :: Cors的方法,看看他们是否甚至被称为Heroku.我也改变了将Cors插入机架中间件堆栈顶部的位置.
随着我的猴子修补我已经把puts
文中陈述initialize
,call
和allow
方法.该initialize
和allow
方法都被调用.call
永远不会调用该方法.所以似乎有一些东西在它到达cors中间件之前就停止了请求.
dcu*_*001 14
我和heroku遇到了同样的问题.我发现这个博客有同样的机架问题.
刚搬进的use Rack::Cors
到config.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
Run Code Online (Sandbox Code Playgroud)
看来问题是由我的机器或我所在的网络引起的。我通过 SSH 连接到我使用的托管环境,并使用上面的curl 命令,它起作用了。
附加说明 这是刚刚发生的其他事情,我认为我应该对此进行补充。我的 AJAX 请求不是针对我的 Heroku 应用程序的 https URL,但 Heroku 正在将其翻译为 https。这导致了额外的跨域问题。切换为对 AJAX 请求使用 https 解决了这个问题。
归档时间: |
|
查看次数: |
9405 次 |
最近记录: |