Не удается получить стойку, работающую в режиме рельсов
Я хотел реализовать CORS в моем приложении rails, поэтому я искал goggog для rack-cors. И я сделал все, что было сказано в README, это обновлено Gemfile соответственно и обновлено 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
Но это не сработало. Независимо от того, что я сделал, в консоли браузера я продолжал получать сообщения:
XMLHttpRequest cannot load https://somewebsite.com. Origin http://0.0.0.0:3000 is not allowed by Access-Control-Allow-Origin.
После прочтения этого blogpost и issue на github я понял, что, возможно, промежуточное ПО cors в промежуточном стеке. Поэтому я сделал так, как было сказано в проблеме 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
, стойки-корсы действительно находятся в верхней части стека.
Но это все равно просто не сработает. Я продолжаю получать ту же ошибку. Кто-нибудь, пожалуйста, помогите.
Ответы
Ответ 1
Я столкнулся с той же проблемой с герокой. Я нашел этот блог с той же проблемой стойки.
Просто переместил use Rack::Cors
в config.ru
, перераспределился в heroku, и он работает.
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
Ответ 2
Существует новая issue нить для решения heroku
Вместо использования
config.middleware.use Rack::Cors do
попробуйте
config.middleware.insert_before ActionDispatch::Static, Rack::Cors do
Это сработало для меня.
Ответ 3
Мне пришлось создать специальный маршрут для обработки запросов опций, драгоценный камень cors не сделал это для меня, как я ожидал. Маршрут, который я добавил в конец маршрутов. 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]
Ответ 4
Вам просто нужно откомментировать гем 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 внешнего интерфейса по соображениям безопасности.
Все это
Надеюсь, это поможет.
Ответ 5
В конце концов выяснилось, что этот камень имеет некоторые проблемы с герокой, на локальном компьютере он отлично работает.
Ответ 6
Убедитесь, что вы добавили или раскомментировали gem 'rack-cors'
в Gemfile