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]