73 lines
1.4 KiB
Ruby
73 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Diversipub
|
|
module Tasks
|
|
##
|
|
# HTTP server task runner.
|
|
#
|
|
class HTTP
|
|
def initialize(main)
|
|
@main = main
|
|
end
|
|
|
|
def join_thread
|
|
thread.join
|
|
nil
|
|
end
|
|
|
|
def stop_gracefully
|
|
puma.stop
|
|
nil
|
|
end
|
|
|
|
alias stop_urgently stop_gracefully
|
|
|
|
private
|
|
|
|
def thread
|
|
@thread ||= Thread.start { puma.run }
|
|
end
|
|
|
|
def puma
|
|
@puma ||= Puma::Launcher.new(
|
|
puma_config,
|
|
log_writer: puma_log_writer,
|
|
)
|
|
end
|
|
|
|
def puma_config
|
|
@puma_config ||= Puma::Configuration.new puma_options.dup
|
|
end
|
|
|
|
def puma_options
|
|
@puma_options ||= {
|
|
app: rack_app,
|
|
binds: ['tcp://127.0.0.1:9292'].freeze,
|
|
environment: 'production',
|
|
log_requests: true,
|
|
logger: puma_logger,
|
|
rackup: nil,
|
|
tag: 'diversipub',
|
|
tcp_host: '127.0.0.1',
|
|
tcp_port: 9292,
|
|
workers: 0,
|
|
}.freeze
|
|
end
|
|
|
|
def puma_log_writer
|
|
@puma_log_writer ||= Puma::LogWriter.new @main.stderr, @main.stderr
|
|
end
|
|
|
|
def puma_logger
|
|
@puma_logger ||= Logger.new(@main.stderr).tap do |puma_logger|
|
|
puma_logger.level = Logger::DEBUG
|
|
end
|
|
end
|
|
|
|
def rack_app
|
|
@rack_app ||= RackApp.new @main
|
|
end
|
|
end
|
|
end
|
|
end
|