lib/jekyll/commands/serve.rb in jekyll-1.2.0 vs lib/jekyll/commands/serve.rb in jekyll-1.2.1

- old
+ new

@@ -1,6 +1,6 @@ -# -*- coding: utf-8 -*- +# -*- encoding: utf-8 -*- module Jekyll module Commands class Serve < Command def self.process(options) require 'webrick' @@ -8,33 +8,56 @@ destination = options['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 fh_option = WEBrick::Config::FileHandler fh_option[:NondisclosureName] = ['.ht*','~*'] - s = HTTPServer.new( - :Port => options['port'], - :BindAddress => options['host'], - :MimeTypes => mime_types - ) + s = HTTPServer.new(webrick_options(options)) s.mount(options['baseurl'], HTTPServlet::FileHandler, destination, fh_option) if options['detach'] # detach the server - pid = Process.fork {s.start} + pid = Process.fork { s.start } 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 t = Thread.new { s.start } trap("INT") { s.shutdown } t.join() 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