Я пытаюсь использовать Rack:: Cors с моим приложением Rails 4, чтобы я мог использовать API на основе JSON.
В моем Gemfile присутствует CORS:
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
Я нашел этот вопрос (Не могу получить стойку, работающую в приложении rails), но не было никакого полезного ответа.
Обновление 11/13/2013 16:40 EST
Я пытаюсь сделать еще несколько отладочных операций с тем, что происходит. У меня есть обезьяна, замаскированная несколькими методами Rack:: Cors, чтобы увидеть, даже если их зовут Heroku. Я также изменил место, где я вставляю Cors в вершину стека промежуточного программного обеспечения.
С моим исправлением обезьяны я поставил puts заявления в методах initialize, call и allow. Вызываются методы initialize и allow. Метод call никогда не вызывается. Таким образом, кажется, что есть что-то, что останавливает запрос до того, как оно попадет в промежуточное ПО cors.