uninitialized rails constant ruby-on-rails ruby rack cors

ruby on rails - rails - No se puede conseguir que los bastidores coren en la aplicación de rieles



rack cors ruby on rails (5)

Quería implementar CORS en mi aplicación de rieles, por lo que busqué en Google rack-cors gema para ello. E hice todo lo que se dijo en README, que se actualiza Gemfile en consecuencia y se actualiza application.rb así:

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

Pero no funcionó. No importa lo que hice, en la consola del navegador recibí un mensaje:
XMLHttpRequest cannot load https://somewebsite.com. Origin http://0.0.0.0:3000 is not allowed by Access-Control-Allow-Origin.

Después de leer este blogpost y issue en github, me di cuenta de que tal vez la posición del middleware de rack-cors en la pila de middleware sea importante. Así que hice lo que se dijo en el tema 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

Después de eso, cuando ejecuto rake middleware rack-cors está realmente en la parte superior de la pila.
Pero aún así simplemente no funcionará. Sigo recibiendo el mismo error. Cualquiera, por favor ayuda


Asegúrate de haber agregado o no la gem ''rack-cors'' en el Gemfile


Después de todo, se supo que esta gema tiene algunos problemas con heroku, en la máquina local funciona perfectamente bien.


Hay un nuevo issue para la solución heroku.

En lugar de usar

config.middleware.use Rack::Cors do

tratar

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

Eso funcionó para mí.


Me encontré con el mismo problema con heroku. Encontré este blog con el mismo problema de rack-cors.

Acaba de mover el use Rack::Cors a config.ru , se ha vuelto a implementar en heroku y funciona.

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


Tuve que crear una ruta especial para manejar las solicitudes de opciones, la gema de cors no lo hizo para mí como esperaba. La ruta que agregué al final de route.rb era:

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]