web-dev-qa-db-fra.com

Impossible de faire fonctionner les rackers dans l'application Rails

Je voulais implémenter CORS dans mon application Rails, alors j'ai cherché rack-cors gem dans Google. Et j'ai tout fait comme cela a été dit dans le fichier README, c'est-à-dire que Gemfile a été mis à jour en conséquence et mis à jour application.rb comme ceci: 

module YourApp
  class Application < Rails::Application

    # ...

    config.middleware.use Rack::Cors do
      allow do
        origins '*'
        resource '*', :headers => :any, :methods => [:get, :post, :options]
      end
    end

  end
end

Mais ça n'a pas marché. Peu importe ce que je faisais, je continuais à recevoir un message dans la console du navigateur:
XMLHttpRequest cannot load https://somewebsite.com. Origin http://0.0.0.0:3000 is not allowed by Access-Control-Allow-Origin.

Après avoir lu blogpost et issue sur github, je me suis rendu compte que la position du middleware rack-cors dans la pile de middleware importait peut-être. J'ai donc fait ce qui était dit dans le numéro de github:

module YourApp
  class Application < Rails::Application

    # ...

    config.middleware.insert 0, Rack::Cors do
      allow do
        origins '*'
        resource '*', :headers => :any, :methods => [:get, :post, :options]
      end
    end

  end
end

Après cela, quand je lance rake middleware, rack-cors est vraiment au sommet de la pile.
Mais cela ne fonctionne tout simplement toujours pas. Je continue à avoir la même erreur. N'importe qui, aidez s'il vous plaît.

22
Prostakov

J'ai rencontré le même problème avec Heroku. J'ai trouvé ce blog avec le même problème de rack-cors.

Vient de déplacer le use Rack::Cors à config.ru, redéployé sur heroku et cela fonctionne.

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
17
dcunited001

Il y a un nouveau numéro fil pour la solution heroku

À la place d'utiliser 

config.middleware.use Rack::Cors do

essayer 

config.middleware.insert_before ActionDispatch::Static, Rack::Cors do

Cela a fonctionné pour moi. 

10
farofeiro

Je devais créer un itinéraire spécial pour gérer les demandes d’options, cors gem ne l’a pas fait pour moi comme je l’attendais. L'itinéraire ajouté à la fin de routes.rb était:

  match "*path", :to => proc {|env| [200, {
  'Access-Control-Allow-Origin' => '*',
  'Access-Control-Allow-Methods' => 'GET, POST, PUT, DELETE, OPTIONS',
  'Access-Control-Allow-Credentials' => 'true',
  'Access-Control-Request-Method' => '*',
  'Access-Control-Allow-Headers' => 'Origin, X-Requested-With, Content-Type, Accept, Authorization',
'Content-Type' => 'text/plain'

 }, ["CORS Preflight"]] }, :via => [:options]
2
TomDunning

Après tout, il est apparu que ce joyau a quelques problèmes avec heroku, sur la machine locale, il fonctionne parfaitement bien.

0
Prostakov

Assurez-vous que vous avez ajouté ou non commentaire gem 'rack-cors' dans le fichier Gemfile.

0
andreofthecape