Ich bin derzeit ein paar Rails 3.2.x-Anwendungen laufen. Der eine, der Ruby 1.9.x verwendet und der api-Endpunkt ist, hat Rack-cors gem (1.0.1) - Alice; der andere läuft auf swagger-ui_rails gem und ist die App, die die API-Dokumentation hostet - App Bob. Die Swagger-Dokumentation wurde mit dem Swagger-Docs-Juwel erstellt, das die Formatversion 1.2 ausführt. Aus irgendeinem Grund oder einem anderen, kann ich App Alice mich nicht für Bob Informationen zu geben, weil dieser Fehler:Rack-cors zeigt keine Header in der Produktion env für swagger-ui_rails
Failed to load https://alice.example.com/api-docs/v1/api-docs.json:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://bob.example.com:3000' is therefore not allowed access.
jedoch! Wenn ich auf die Registerkarte Netzwerk schaue, ist die Antwort eine 200 und ich kann die JSON Informationen sehen. Aber die Antwort-Header haben definitiv nicht die erforderliche Access-Control-Allow-Origin
Header.
Dies geschieht sowohl durch AWS Elastic Beanstalk (Bob ist auf EBS gehostet) und lokal (mit einer gebundenen Adresse).
In meinem config/environments/production.rb
von Alice, ich habe folgendes:
config.middleware.insert_before 0, 'Rack::Cors' do
allow do
origins ->(origin, env) do
Rails.logger.warn("CORS origin: #{origin}")
origin =~ /\.example\.com(:\d+)?\z/
end
resource('*', :methods => [:get, :post, :options], :headers => :any)
end
end
Als ich in config/environments/development.rb
in Alice diesen Code haben, localhost eine Verbindung herstellt und Prahlerei-ui zeigt sich als ohne Fehler in der Konsole erwartet.
auf der Registerkarte Netzwerk von Chrome, ist das, was ich vor Ort haben (Bob und Alice in dev/localhost)
Access-Control-Allow-Methods:GET, POST, OPTIONS
Access-Control-Allow-Origin:http://apitest.bob.com:3000
Access-Control-Expose-Headers:
Access-Control-Max-Age:1728000
Content-Length:1499
Content-Type:application/json
Date:Fri, 22 Sep 2017 21:44:45 GMT
Last-Modified:Mon, 28 Aug 2017 17:37:22 GMT
Server:
Vary:Origin
Das ist, was ich bekommen, wenn Bob ist in dev und Alice ist in prod:
Accept-Ranges:bytes
Connection:keep-alive
Content-Length:1500
Content-Type:application/json
Date:Fri, 22 Sep 2017 23:10:00 GMT
ETag:"abc-559ce64fb8374"
Last-Modified:Fri, 22 Sep 2017 22:04:35 GMT
Server:
Wie Sie sehen können, prod-Alice kehrt nicht jede Art von Header den Weg dev-Alice tut, auch mit dem exakt gleichen Rack Cors Codeblock.
rake middleware
zeigt Rack :: Cors an der Spitze des Stapels und curl -i https://alice.example.com/api-docs/v1/api-docs.json
hat nie die richtigen Access-Control-Header für mich, sowohl lokal als auch auf Bobs Server zurückgegeben.
prod-Bob hat auch einige EBS-Erweiterungen, um einige Anforderungsheader und Methoden zu nginx hinzuzufügen. In einigen anderen SO-Posts sah ich Leute, die Antwort-Header direkt über Rails hinzufügen, und so hat Bob auch folgende in application_controller.rb
(und in dev, mit binding.pry, kann ich bestätigen, dass die Antwort definitiv die angegebenen Header hat)
Ich bin ein wenig ratlos und jede Hilfe oder Gedanken würde geschätzt werden.