Print better messages for detached server. Mute output on detach.

This commit is contained in:
Parker Moore 2013-09-08 15:58:57 -04:00
parent 214c851be5
commit c926596be7
2 changed files with 40 additions and 13 deletions

View File

@ -65,6 +65,7 @@ command :build do |c|
c.option '-w', '--watch', 'Watch for changes and rebuild' c.option '-w', '--watch', 'Watch for changes and rebuild'
c.option '--lsi', 'Use LSI for improved related posts' c.option '--lsi', 'Use LSI for improved related posts'
c.option '-D', '--drafts', 'Render posts in the _drafts folder' c.option '-D', '--drafts', 'Render posts in the _drafts folder'
c.option '-v', '--verbose', 'Print verbose output.'
c.action do |args, options| c.action do |args, options|
options = normalize_options(options.__hash__) options = normalize_options(options.__hash__)
@ -84,6 +85,7 @@ command :serve do |c|
c.option '--lsi', 'Use LSI for improved related posts' c.option '--lsi', 'Use LSI for improved related posts'
c.option '-B', '--detach', 'Run the server in the background (detach)' c.option '-B', '--detach', 'Run the server in the background (detach)'
c.option '-D', '--drafts', 'Render posts in the _drafts folder' c.option '-D', '--drafts', 'Render posts in the _drafts folder'
c.option '-v', '--verbose', 'Print verbose output.'
c.option '-P', '--port [PORT]', 'Port to listen on' c.option '-P', '--port [PORT]', 'Port to listen on'
c.option '-H', '--host [HOST]', 'Host to bind to' c.option '-H', '--host [HOST]', 'Host to bind to'

View File

@ -1,4 +1,4 @@
# -*- coding: utf-8 -*- # -*- encoding: utf-8 -*-
module Jekyll module Jekyll
module Commands module Commands
class Serve < Command class Serve < Command
@ -10,32 +10,57 @@ module Jekyll
FileUtils.mkdir_p(destination) FileUtils.mkdir_p(destination)
mime_types_file = File.expand_path('../mime.types', File.dirname(__FILE__))
mime_types = WEBrick::HTTPUtils::load_mime_types(mime_types_file)
# recreate NondisclosureName under utf-8 circumstance # recreate NondisclosureName under utf-8 circumstance
fh_option = WEBrick::Config::FileHandler fh_option = WEBrick::Config::FileHandler
fh_option[:NondisclosureName] = ['.ht*','~*'] fh_option[:NondisclosureName] = ['.ht*','~*']
s = HTTPServer.new( s = HTTPServer.new(webrick_options(options))
:Port => options['port'],
:BindAddress => options['host'],
:MimeTypes => mime_types,
:DoNotReverseLookup => true
)
s.mount(options['baseurl'], HTTPServlet::FileHandler, destination, fh_option) s.mount(options['baseurl'], HTTPServlet::FileHandler, destination, fh_option)
if options['detach'] # detach the server if options['detach'] # detach the server
pid = Process.fork { s.start } pid = Process.fork { s.start }
Process.detach(pid) Process.detach(pid)
pid Jekyll.logger.info "Server detatched with pid '#{pid}'.", "Run `kill -9 #{pid}' to stop the server."
else # create a new server thread, then join it with current terminal else # create a new server thread, then join it with current terminal
t = Thread.new { s.start } t = Thread.new {
s.start
}
trap("INT") { s.shutdown } trap("INT") { s.shutdown }
t.join() t.join()
end end
end end
def self.webrick_options(config)
opts = {
:Port => config['port'],
:BindAddress => config['host'],
:MimeTypes => self.mime_types,
:DoNotReverseLookup => true,
:StartCallback => start_callback(config['detach'])
}
if !config['verbose']
opts.merge!({
:AccessLog => [],
:Logger => Log::new([], Log::WARN)
})
end
opts
end
def self.start_callback(detached)
unless detached
Proc.new { Jekyll.logger.info "Server running...", "press ctrl-c to stop." }
end
end
def self.mime_types
mime_types_file = File.expand_path('../mime.types', File.dirname(__FILE__))
WEBrick::HTTPUtils::load_mime_types(mime_types_file)
end
end end
end end
end end