Ruby 通过Puma从Sinatra传递收割台(或其他设置)

Ruby 通过Puma从Sinatra传递收割台(或其他设置),ruby,cors,rack,puma,response-headers,Ruby,Cors,Rack,Puma,Response Headers,我正在尝试学习如何使用纯Ruby开发一个简单的web应用程序。我有一个简单的后端服务,我创建了一个Sinatra应用程序。在开发它时,我注意到前端(一个简单的HTML/JS静态站点)由于CORS策略而无法与它通信。所以我研究了如何从西纳特拉传头球 我偶然发现。我按照指示进行了设置,我的应用程序如下(缩写): 当我用ruby app.rb运行它时,它工作得非常好。前端可以通信,并且遵守CORS策略 现在,我想为生产环境设置服务。为此,我想用彪马。对于Puma,我有一个config.ru,它看起来像

我正在尝试学习如何使用纯Ruby开发一个简单的web应用程序。我有一个简单的后端服务,我创建了一个Sinatra应用程序。在开发它时,我注意到前端(一个简单的HTML/JS静态站点)由于CORS策略而无法与它通信。所以我研究了如何从西纳特拉传头球

我偶然发现。我按照指示进行了设置,我的应用程序如下(缩写):

当我用ruby app.rb运行它时,它工作得非常好。前端可以通信,并且遵守CORS策略

现在,我想为生产环境设置服务。为此,我想用彪马。对于Puma,我有一个
config.ru
,它看起来像这样:

require File.expand_path('app', File.dirname(__FILE__))
run WebApp
我修改了我的
app.rb
如下所示(再次缩写):

这是我在最初设置标题之前遇到的错误。所以我很清楚,
set
参数被忽略了

因此,这似乎是一个简单的问题,但我一直未能找到正确的答案:我如何使彪马尊重“设置”参数?或者,我如何实现相同的预期结果?

我似乎很清楚,我错过了一件非常简单的事情,但我无法弄清楚它到底是什么


提前谢谢

看起来您的班上缺少了
register Sinatra::Cors

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

  set :allow_origin, '*'
  # etc.
class-WebApp
成功了!现在我必须去学习注册器的功能。非常感谢您的快速回复!
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
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.
class WebApp < Sinatra::Application
  register Sinatra::Cors # Add this line.

  set :allow_origin, '*'
  # etc.