Передача заголовков (или других настроек) из Синатры через Puma - PullRequest
1 голос
/ 17 апреля 2020

Я пытаюсь научиться разрабатывать простое веб-приложение, используя чистый 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 соблюдать «установленные» параметры? Или, альтернативно, как мне достичь того же желаемого результата?

Мне кажется, что мне не хватает очень простой вещи, но я не могу понять, что именно.

Заранее спасибо!

1 Ответ

1 голос
/ 17 апреля 2020

Похоже, вам просто не хватает register Sinatra::Cors в вашем классе.

class WebApp < Sinatra::Application
  register Sinatra::Cors # Add this line.

  set :allow_origin, '*'
  # etc.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...