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 1/2] 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 From ce998cf68550cc10bd7e512afe00fef89d1b7eb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dennis=20G=C3=BCnnewig?= Date: Wed, 11 Nov 2015 22:27:43 +0100 Subject: [PATCH 2/2] Add changelog entry --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 78bc4f20..e070195c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ master * Rather than applying layouts to all files which are not .txt, .css, .js, .json: the new behavior is to only default layouts to active for .html * Switch from Ruby Sass to SassC. * `relative_assets` extension overrides local `relative: false` option to stylesheet/javascript tag helpers. +* Add `before_server`-hook to the preview server which is run before the Webrick server is started +* Add `-d` to `middleman server` to make it run as daemon # 4.0.0.rc.1