Module: Puma::RackHandler
Relationships & Source Files | |
Extension / Inclusion / Inheritance Descendants | |
Extended In:
| |
Defined in: | lib/rack/handler/puma.rb |
Overview
This module is used as an ‘include’ file in code at bottom of file. It loads into either ::Rackup::Handler::Puma
or ::Rack::Handler::Puma
.
Constant Summary
-
DEFAULT_OPTIONS =
# File 'lib/rack/handler/puma.rb', line 9{ :Verbose => false, :Silent => false }
Instance Method Summary
Instance Method Details
#config(app, options = {})
[ GitHub ]# File 'lib/rack/handler/puma.rb', line 14
def config(app, = {}) require_relative '../../puma' require_relative '../../puma/configuration' require_relative '../../puma/log_writer' require_relative '../../puma/launcher' = DEFAULT_OPTIONS.dup # Libraries pass in values such as :Port and there is no way to determine # if it is a default provided by the library or a special value provided # by the user. A special key `user_supplied_options` can be passed. This # contains an array of all explicitly defined user options. We then # know that all other values are defaults if = .delete(: ) ( .keys - ).each do |k| [k] = .delete(k) end end @events = [:events] || ::Puma::Events.new conf = ::Puma::Configuration.new(, .merge({events: @events})) do |user_config, file_config, default_config| if .delete(:Verbose) begin require 'rack/commonlogger' # Rack 1.x rescue LoadError require 'rack/common_logger' # Rack 2 and later end app = ::Rack::CommonLogger.new(app, STDOUT) end if [:environment] user_config.environment [:environment] end if [:Threads] min, max = .delete(:Threads).split(':', 2) user_config.threads min, max end if [:Host] || [:Port] host = [:Host] || [:Host] port = [:Port] || [:Port] self.set_host_port_to_config(host, port, user_config) end if [:Host] file_config.set_default_host( [:Host]) end self.set_host_port_to_config( [:Host], [:Port], default_config) user_config.app app end conf end
#run(app, **options) {|launcher| ... }
# File 'lib/rack/handler/puma.rb', line 70
def run(app, ** ) conf = self.config(app, ) log_writer = .delete(:Silent) ? ::Puma::LogWriter.strings : ::Puma::LogWriter.stdio launcher = ::Puma::Launcher.new(conf, :log_writer => log_writer, events: @events) yield launcher if block_given? begin launcher.run rescue Interrupt puts "* Gracefully stopping, waiting for requests to finish" launcher.stop puts "* Goodbye!" end end
#set_host_port_to_config(host, port, config)
[ GitHub ]# File 'lib/rack/handler/puma.rb', line 96
def set_host_port_to_config(host, port, config) config.clear_binds! if host || port if host&.start_with? '.', '/', '@' config.bind "unix://#{host}" elsif host&.start_with? 'ssl://' uri = URI.parse(host) uri.port ||= port || ::Puma::Configuration::DEFAULTS[:tcp_port] config.bind uri.to_s else if host port ||= ::Puma::Configuration::DEFAULTS[:tcp_port] end if port host ||= ::Puma::Configuration::DEFAULTS[:tcp_host] config.port port, host end end end
#valid_options
[ GitHub ]# File 'lib/rack/handler/puma.rb', line 87
def { "Host=HOST" => "Hostname to listen on (default: localhost)", "Port=PORT" => "Port to listen on (default: 8080)", "Threads=MIN:MAX" => "min:max threads to use (default 0:16)", "Verbose" => "Don't report each request (default: false)" } end