Heroku, Rails 4 и Rack :: Cors

Я пытаюсь использовать Rack :: Cors с моим Rails 4 приложением, чтобы я мог создавать API на основе JSON.

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

Я нашел этот вопрос (Можно't-cors работает в приложении рельсов), но не былолюбой полезный ответ предоставлен.

Обновление 13.11.2013 16:40 ESTI '

Я пытался сделать еще одну отладку с тем, что происходит. Я залатал несколько обезьян Rack :: Cors ' методы, чтобы увидеть, если они даже вызваны на Heroku. Я также изменил расположение Cors, чтобы оказаться на вершине стека промежуточного программного обеспечения стойки.

С моей обезьяной я исправляюputs заявления вinitializecall, а такжеallow методы.initialize а такжеallow оба метода вызываются.call метод никогда не вызывается. Таким образом, кажется, что-то останавливает запрос до того, как он попадет в промежуточное ПО cors.

Ответы на вопрос(5)

Ваш ответ на вопрос