Как передать Puma :: Configuration Sinatra?

Это мое веб-приложение:

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, потому что вы уже используете его.

Pavel Mikhailyuk 21.10.2018 20:14

Я просто попробую угадать. Вы каким-то образом запускали Puma с Sinatra, и вам нужно настроить Puma. Хорошо, используйте опцию CLI -c path ИЛИ файл config/puma.rbgithub.com/puma/puma#configuration

Pavel Mikhailyuk 21.10.2018 20:16

@PavelMikhailyuk Я не запускаю Puma / Sinatra из командной строки, вот в чем дело. Я запускаю его из другого контекста Ruby, просто используя Front.start!. Итак, командной строки нет. Мне просто нужно передать объект конфигурации в Puma.

yegor256 22.10.2018 08:02

config/puma.rb пробовали? Если вам нужна динамическая конфигурация, ответ @ user2795430 подойдет.

Pavel Mikhailyuk 22.10.2018 10:35

И хороший вопрос: Почему запускается не из cmd?

Pavel Mikhailyuk 22.10.2018 10:39

@PavelMikhailyuk зацени: github.com/zold-io/zold/blob/0.15.0/lib/zold/commands/…

yegor256 23.10.2018 17:07

Омг, вы использовали какой-нибудь переводчик кода Java-> Ruby? : D

Pavel Mikhailyuk 24.10.2018 08:55

Серьезно, я считаю, что его можно переделать в cli-first. Судя по вашему коду, он выглядит как java, Slop вместо Thor и т. д., Я думаю, вы не уделили достаточно времени, чтобы посмотреть существующие исходные коды фреймворка. ИМХО конечно.

Pavel Mikhailyuk 24.10.2018 10:43
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
5
8
910
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы хотите передать именно объект или просто конфигурацию в целом? Для последнего варианта это возможно, но 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? Я думаю, что первое возможно, но не уверен насчет последнего.

Vasily Kolesnikov 23.10.2018 22:23

Я хочу иметь возможность настраивать сервер. Часть логирования - это просто пример, есть много других параметров конфигурации, которые мне нужно покрутить.

yegor256 24.10.2018 16:28

У вас уже есть решение (передать объект конфигурации) для реальной проблемы, но вы не сказали, в чем проблема. Это не так. Расскажите нам о реальной проблеме, и мы предложим решение.

Tom 31.10.2018 19:38
Ответ принят как подходящий

Конфигурация тесно связана со способом запуска сервера puma.

Стандартный способ запуска puma - команда puma CLI. Для настройки puma необходимо предоставить файл конфигурации config/puma.rb или config/puma/<environment>.rb (см. пример).

Но вы спросили, как передать объект Puma::Configuration в puma. Интересно, зачем вам это нужно, но AFAIK вам нужно программно запустить сервер puma в коде вашего приложения с помощью 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.

Надеюсь, это поможет.

Другие вопросы по теме