From 8c7e156bd45108df54b2523e7a38bb2b01dfcc90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dennis=20G=C3=BCnnewig?= Date: Wed, 11 Nov 2015 22:20:37 +0100 Subject: [PATCH] Make middleman's preview server a daemon --- middleman-cli/lib/middleman-cli/server.rb | 8 +++++++- middleman-core/lib/middleman-core/preview_server.rb | 13 +++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/middleman-cli/lib/middleman-cli/server.rb b/middleman-cli/lib/middleman-cli/server.rb index f8516fc1..ab387ee6 100644 --- a/middleman-cli/lib/middleman-cli/server.rb +++ b/middleman-cli/lib/middleman-cli/server.rb @@ -49,6 +49,11 @@ module Middleman::Cli aliases: '-l', default: 0.5, desc: 'Set file watcher latency, in seconds' + class_option :daemon, + type: :boolean, + aliases: '-d', + default: false, + desc: 'Daemonize preview server' # Start the server def server @@ -73,7 +78,8 @@ module Middleman::Cli disable_watcher: options['disable_watcher'], reload_paths: options['reload_paths'], force_polling: options['force_polling'], - latency: options['latency'] + latency: options['latency'], + daemon: options['daemon'] } puts '== The Middleman is loading' diff --git a/middleman-core/lib/middleman-core/preview_server.rb b/middleman-core/lib/middleman-core/preview_server.rb index ffed7f21..25bb5276 100644 --- a/middleman-core/lib/middleman-core/preview_server.rb +++ b/middleman-core/lib/middleman-core/preview_server.rb @@ -58,6 +58,19 @@ module Middleman app.execute_callbacks(:before_server, [ServerInformationCallbackProxy.new(server_information)]) + if @options[:daemon] + # To output the child PID, let's make preview server a daemon by hand + if child_pid = fork + app.logger.info "== Middleman preview server is running in background with PID #{child_pid}" + Process.detach child_pid + exit 0 + else + $stdout.reopen('/dev/null', 'w') + $stderr.reopen('/dev/null', 'w') + $stdin.reopen('/dev/null', 'r') + end + end + loop do @webrick.start