如何将Puma :: Configuration传递给Sinatra?

时间:2018-10-21 16:43:57

标签: ruby sinatra puma

这是我的网络应用程序:

class Front < Sinatra::Base
  configure do
    set :server, :puma
  end
  get '/' do
    'Hello, world!'
  end 
end

我是这样开始的(请不要建议使用Rack):

Front.start!

这是我的Puma配置对象,我不知道该如何传递给它:

require 'puma/configuration'
Puma::Configuration.new({ log_requests: true, debug: true })

严重,如何?

2 个答案:

答案 0 :(得分:5)

配置与您运行puma服务器的方式紧密相连。

运行puma-puma CLI命令的标准方法。为了配置puma,应提供配置文件config/puma.rbconfig/puma/<environment>.rb(请参见example)。

但是您问如何将Puma::Configuration对象传递给puma。我想知道为什么需要它,但是AFAIK需要使用puma(请参阅source code)在应用程序代码中以编程方式运行Puma::Launcher服务器

conf = Puma::Configuration.new do |user_config|
  user_config.threads 1, 10
  user_config.app do |env|
    [200, {}, ["hello world"]]
  end
 end
Puma::Launcher.new(conf, events: Puma::Events.stdio).run

user_config.app可以是任何可调用对象(与Rack接口兼容),例如Sinatra应用程序。

希望有帮助。

答案 1 :(得分:3)

您想只传递一个对象还是只传递一个配置?对于最后一种选择,这是有可能的,但是Puma仍然不会记录任何内容(我不确定,但似乎您确实担心要记录Puma的设置)。

#!/usr/bin/env ruby

# frozen_string_literal: true

require 'bundler/inline'

gemfile(true) do
  gem 'sinatra'
  gem 'puma'
  gem 'openssl'
end

require 'sinatra/base'

class Front < Sinatra::Base
  configure do
    set :server, :puma
    set :server_settings, log_requests: true, debug: true, environment: 'foo'
  end

  get '/' do
    'Hello, world!'
  end
end

Front.start!