Can't get rack-cors working in rails application
I wanted to implement CORS in my rails application, so I googled rack-cors gem for it. And I did everything as was said in README, that is updated Gemfile accordingly and updated application.rb
как это:
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
Но это не сработало. No matter what I did, in the browser console I kept getting message:XMLHttpRequest cannot load https://somewebsite.com. Origin http://0.0.0.0:3000 is not allowed by Access-Control-Allow-Origin.
Прочитав этот пост и выпуски на github, я понял, что, возможно, положение промежуточного программного обеспечения для установки в стойку в стеке промежуточного программного обеспечения имеет значение. Поэтому я сделал, как было сказано в выпуске 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
После этого, когда я бегу rake middleware
Rack-Cors действительно находится на вершине стека.
Но все равно просто не получится. Я продолжаю получать ту же ошибку. Кто-нибудь, пожалуйста, помогите.
5 ответов
Я столкнулся с той же проблемой с герокой. Я нашел этот блог с той же проблемой стеллажей.
Просто переместил use Rack::Cors
в config.ru
Передислоцировали к героку и все работает.
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
Существует новая тема для решения проблемы с герою
Вместо того, чтобы использовать
config.middleware.use Rack::Cors do
пытаться
config.middleware.insert_before ActionDispatch::Static, Rack::Cors do
Это сработало для меня.
Вам просто нужно откомментировать гем Rack CORS в вашем Gemfile (gemfile.rb)
# gemfile.rb
gem 'rack-cors'
А затем запустите код ниже, чтобы установить гем
bundle install
А также убедитесь, что ваш инициализатор cors (cors.rb) установлен следующим образом# config / initializers / cors.rb
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins '*'
resource '*',
headers: :any,
methods: [:get, :post, :put, :patch, :delete, :options, :head]
end
end
Установка исходных текстов на "*" должна быть приемлемой для разработки, но имейте в виду, что при развертывании в рабочей среде вы захотите изменить это значение, чтобы оно соответствовало URI вашего внешнего интерфейса по соображениям безопасности.
Надеюсь, это поможет.
Подчеркните этот ответ как полезный, если он поможет, или прокомментируйте ответ ниже для получения дополнительных разъяснений.
Я должен был создать специальный маршрут для обработки запросов опций, гем Cors не сделал это для меня, как я ожидал. Маршрут, который я добавил в конец route.rb, был:
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]
Ведь выяснилось, что у этого драгоценного камня есть некоторые проблемы с герокой, на локальной машине он работает отлично.
Убедитесь, что вы добавили или не комментировали gem 'rack-cors'
в Gemfile