【问题标题】:How to pass Puma::Configuration to Sinatra?如何将 Puma::Configuration 传递给 Sinatra?
【发布时间】:2019-03-25 20:03:59
【问题描述】:

这是我的网络应用:

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 })

说真的,怎么办?

【问题讨论】:

  • 我不建议使用 Rack,因为你已经在使用它了。
  • 我只是尝试猜测。您已经以某种方式使用 Sinatra 运行了 Puma,并且需要配置 Puma。好的,使用-c path CLI 选项或config/puma.rb 文件github.com/puma/puma#configuration
  • @PavelMikhailyuk 我不从命令行运行 Puma/Sinatra,就是这样。我只是使用Front.start! 从另一个Ruby 上下文运行它。所以,没有命令行。我只需要将配置对象传递给 Puma。
  • 你试过config/puma.rb 吗?如果您需要动态配置,@user2795430 的答案看起来不错。
  • 还有一个很好的问题:为什么你不从 cmd 运行它?

标签: ruby sinatra puma


【解决方案1】:

你想传递一个对象还是只是一般的配置?对于最后一个选项,这是可能的,但 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!

【讨论】:

  • 是的,因为 Puma 期望 config.ru 文件是。如果我是你,我会寻找另一种方式。你一般想要什么?记录您的请求或完全由 Puma 记录请求?我认为第一个是可能的,但不确定最后一个。
  • 我想拥有配置服务器的能力。日志部分只是一个例子,还有很多其他的配置参数,我需要转一下。
  • 您已经想到了解决实际问题的方法(传递一个配置对象),但您还没有说出实际问题是什么。这不是它的工作原理。告诉我们实际问题,让我们提出解决方案。
【解决方案2】:

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

运行puma - puma CLI 命令的标准方式。为了配置puma 配置文件config/puma.rbconfig/puma/&lt;environment&gt;.rb 应该提供(见example)。

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

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 应用程序。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 2015-10-25
    • 2020-07-30
    • 2023-03-15
    相关资源
    最近更新 更多