Refactor 'jekyll serve' command.
This commit is contained in:
parent
619772b5c8
commit
513e77635b
|
@ -29,33 +29,22 @@ module Jekyll
|
||||||
# Boot up a WEBrick server which points to the compiled site's root.
|
# Boot up a WEBrick server which points to the compiled site's root.
|
||||||
def process(options)
|
def process(options)
|
||||||
options = configuration_from_options(options)
|
options = configuration_from_options(options)
|
||||||
|
|
||||||
require 'webrick'
|
|
||||||
|
|
||||||
destination = options['destination']
|
destination = options['destination']
|
||||||
|
setup(destination)
|
||||||
FileUtils.mkdir_p(destination)
|
|
||||||
|
|
||||||
# monkey patch WEBrick using custom 404 page (/404.html)
|
|
||||||
if File.exist?(File.join(destination, '404.html'))
|
|
||||||
WEBrick::HTTPResponse.class_eval do
|
|
||||||
def create_error_page
|
|
||||||
@body = IO.read(File.join(@config[:DocumentRoot], '404.html'))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# recreate NondisclosureName under utf-8 circumstance
|
|
||||||
fh_option = WEBrick::Config::FileHandler
|
|
||||||
fh_option[:NondisclosureName] = ['.ht*','~*']
|
|
||||||
|
|
||||||
s = WEBrick::HTTPServer.new(webrick_options(options))
|
s = WEBrick::HTTPServer.new(webrick_options(options))
|
||||||
|
s.unmount("")
|
||||||
|
|
||||||
s.config.store(:DirectoryIndex, s.config[:DirectoryIndex] << "index.xml")
|
s.mount(
|
||||||
|
options['baseurl'],
|
||||||
|
WEBrick::HTTPServlet::FileHandler,
|
||||||
|
destination,
|
||||||
|
file_handler_options
|
||||||
|
)
|
||||||
|
|
||||||
s.mount(options['baseurl'], WEBrick::HTTPServlet::FileHandler, destination, fh_option)
|
Jekyll.logger.info "Server address:", server_address(s, options)
|
||||||
|
|
||||||
Jekyll.logger.info "Server address:", "http://#{s.config[:BindAddress]}:#{s.config[:Port]}"
|
p s
|
||||||
|
|
||||||
if options['detach'] # detach the server
|
if options['detach'] # detach the server
|
||||||
pid = Process.fork { s.start }
|
pid = Process.fork { s.start }
|
||||||
|
@ -68,6 +57,21 @@ module Jekyll
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def setup(destination)
|
||||||
|
require 'webrick'
|
||||||
|
|
||||||
|
FileUtils.mkdir_p(destination)
|
||||||
|
|
||||||
|
# monkey patch WEBrick using custom 404 page (/404.html)
|
||||||
|
if File.exist?(File.join(destination, '404.html'))
|
||||||
|
WEBrick::HTTPResponse.class_eval do
|
||||||
|
def create_error_page
|
||||||
|
@body = IO.read(File.join(@config[:DocumentRoot], '404.html'))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def webrick_options(config)
|
def webrick_options(config)
|
||||||
opts = {
|
opts = {
|
||||||
:DocumentRoot => config['destination'],
|
:DocumentRoot => config['destination'],
|
||||||
|
@ -75,7 +79,8 @@ module Jekyll
|
||||||
:BindAddress => config['host'],
|
:BindAddress => config['host'],
|
||||||
:MimeTypes => mime_types,
|
:MimeTypes => mime_types,
|
||||||
:DoNotReverseLookup => true,
|
:DoNotReverseLookup => true,
|
||||||
:StartCallback => start_callback(config['detach'])
|
:StartCallback => start_callback(config['detach']),
|
||||||
|
:DirectoryIndex => %w(index.html index.htm index.cgi index.rhtml index.xml)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !config['verbose']
|
if !config['verbose']
|
||||||
|
@ -99,6 +104,24 @@ module Jekyll
|
||||||
WEBrick::HTTPUtils::load_mime_types(mime_types_file)
|
WEBrick::HTTPUtils::load_mime_types(mime_types_file)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def server_address(server, options)
|
||||||
|
baseurl = "#{options['baseurl']}/" if options['baseurl']
|
||||||
|
[
|
||||||
|
"http://",
|
||||||
|
server.config[:BindAddress],
|
||||||
|
":",
|
||||||
|
server.config[:Port],
|
||||||
|
baseurl || ""
|
||||||
|
].map(&:to_s).join("")
|
||||||
|
end
|
||||||
|
|
||||||
|
# recreate NondisclosureName under utf-8 circumstance
|
||||||
|
def file_handler_options
|
||||||
|
fh_option = WEBrick::Config::FileHandler
|
||||||
|
fh_option[:NondisclosureName] = ['.ht*','~*']
|
||||||
|
fh_option
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue