Я пытаюсь научиться разрабатывать простое веб-приложение, используя чистый Ruby. У меня есть простой бэкэнд-сервис, который я создал как приложение Sinatra. При разработке я заметил, что интерфейс (простой сайт HTML / JS stati c) не будет взаимодействовать с ним из-за политик CORS. Поэтому я изучил, как передавать заголовки из Синатры.
Я наткнулся на sinatra-cors . Я настроил его в соответствии с инструкциями, и мое приложение выглядит так (сокращенно):
require 'sinatra'
require 'sinatra/cors'
set :allow_origin, '*'
set :allow_methods, 'GET,HEAD,POST'
set :allow_headers, 'content-type,if-modified-since,access-control-allow-methods,access-control-allow-origin'
set :expose_headers, 'content-disposition'
set :allow_credentials, true
post '/' do
[...]
end
Когда я запускаю его с ruby app.rb
, оно работает отлично. Frontend может общаться, и соблюдены политики CORS.
Теперь я хочу настроить службу для производственной среды. Для этого я хочу использовать Puma. Так что с Puma у меня есть config.ru
, который выглядит так:
require File.expand_path('app', File.dirname(__FILE__))
run WebApp
, и я изменил свой app.rb
, чтобы он выглядел так (снова сокращенно):
require 'sinatra'
require 'sinatra/cors'
class WebApp < Sinatra::Application
set :allow_origin, '*'
set :allow_methods, 'GET,HEAD,POST'
set :allow_headers, 'content-type,if-modified-since,access-control-allow-methods,access-control-allow-origin'
set :expose_headers, 'content-disposition'
set :allow_credentials, true
post '/' do
[...]
end
end
в основном , завернул приложение в класс и вызвал его из config.ru
. Когда я запускаю это, запустив puma
в каталоге, служба запускается, но заголовки больше не передаются обратно. Всякий раз, когда я пытаюсь поразить бэкэнд, я получаю:
Access to XMLHttpRequest at 'http://localhost:4567/' from origin 'null' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Это была ошибка, которую я получал до того, как первоначально установил заголовки. Так что мне кажется совершенно ясным, что параметры set
игнорируются.
Итак, это кажется простым делом, но я не смог найти правильный ответ: Как мне заставить Puma соблюдать «установленные» параметры? Или, альтернативно, как мне достичь того же желаемого результата?
Мне кажется, что мне не хватает очень простой вещи, но я не могу понять, что именно.
Заранее спасибо!