From ad692357d433a30e9169f6f3183012c1bc8d9269 Mon Sep 17 00:00:00 2001 From: Serdar Dogruyol Date: Wed, 4 Oct 2017 19:42:41 +0300 Subject: [PATCH] Allow config.server to be lazily initiliazed. Fixes #396 --- src/kemal.cr | 17 +++++++++-------- src/kemal/config.cr | 3 +-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/kemal.cr b/src/kemal.cr index 5c93059..61e512f 100644 --- a/src/kemal.cr +++ b/src/kemal.cr @@ -14,7 +14,7 @@ module Kemal end end # Overload of self.run without port - fixex #399 - def self.run + def self.run self.run(nil) end @@ -32,11 +32,6 @@ module Kemal config.setup config.port = port if port - config.server = HTTP::Server.new(config.host_binding, config.port, config.handlers) - {% if !flag?(:without_openssl) %} - config.server.tls = config.ssl - {% end %} - unless Kemal.config.error_handlers.has_key?(404) error 404 do |env| render_404 @@ -63,15 +58,21 @@ module Kemal end end + server = HTTP::Server.new(config.host_binding, config.port, config.handlers) + {% if !flag?(:without_openssl) %} + server.tls = config.ssl + {% end %} + config.server ||= server config.running = true + yield config - config.server.listen if config.env != "test" + config.server.not_nil!.listen if config.env != "test" && config.server end def self.stop if config.running if config.server - config.server.close + config.server.not_nil!.close config.running = false else raise "Kemal.config.server is not set. Please use Kemal.run to set the server." diff --git a/src/kemal/config.cr b/src/kemal/config.cr index 9748b7a..bb2fa86 100644 --- a/src/kemal/config.cr +++ b/src/kemal/config.cr @@ -20,7 +20,7 @@ module Kemal getter custom_handler_position property host_binding, ssl, port, env, public_folder, logging, running - property always_rescue, server, extra_options, shutdown_message + property always_rescue, server : HTTP::Server?, extra_options, shutdown_message property serve_static : (Bool | Hash(String, Bool)) property static_headers : (HTTP::Server::Response, String, File::Stat -> Void)? @@ -34,7 +34,6 @@ module Kemal @logger = nil @error_handler = nil @always_rescue = true - @server = uninitialized HTTP::Server @router_included = false @default_handlers_setup = false @running = false