89 lines
2.6 KiB
Ruby
89 lines
2.6 KiB
Ruby
# CLI Module
|
|
module Middleman::Cli
|
|
|
|
# Server thor task
|
|
class Server < Thor
|
|
check_unknown_options!
|
|
|
|
namespace :server
|
|
|
|
desc 'server [options]', 'Start the preview server'
|
|
method_option :environment,
|
|
:aliases => '-e',
|
|
:default => ENV['MM_ENV'] || ENV['RACK_ENV'] || 'development',
|
|
:desc => 'The environment Middleman will run under'
|
|
method_option :host,
|
|
:type => :string,
|
|
:aliases => '-h',
|
|
:default => '0.0.0.0',
|
|
:desc => 'Bind to HOST address'
|
|
method_option :port,
|
|
:aliases => '-p',
|
|
:default => '4567',
|
|
:desc => 'The port Middleman will listen on'
|
|
method_option :verbose,
|
|
:type => :boolean,
|
|
:default => false,
|
|
:desc => 'Print debug messages'
|
|
method_option :instrument,
|
|
:type => :string,
|
|
:default => false,
|
|
:desc => 'Print instrument messages'
|
|
method_option :disable_watcher,
|
|
:type => :boolean,
|
|
:default => false,
|
|
:desc => 'Disable the file change and delete watcher process'
|
|
method_option :profile,
|
|
:type => :boolean,
|
|
:default => false,
|
|
:desc => 'Generate profiling report for server startup'
|
|
method_option :reload_paths,
|
|
:type => :string,
|
|
:default => false,
|
|
:desc => 'Additional paths to auto-reload when files change'
|
|
method_option :force_polling,
|
|
:type => :boolean,
|
|
:default => false,
|
|
:desc => 'Force file watcher into polling mode'
|
|
method_option :latency,
|
|
:type => :numeric,
|
|
:aliases => '-l',
|
|
:default => 0.25,
|
|
:desc => 'Set file watcher latency, in seconds'
|
|
|
|
# Start the server
|
|
def server
|
|
require 'middleman-core'
|
|
require 'middleman-core/preview_server'
|
|
|
|
if !ENV['MM_ROOT']
|
|
puts '== Could not find a Middleman project config.rb'
|
|
puts '== Treating directory as a static site to be served'
|
|
ENV['MM_ROOT'] = Dir.pwd
|
|
ENV['MM_SOURCE'] = ''
|
|
end
|
|
|
|
params = {
|
|
:port => options['port'],
|
|
:host => options['host'],
|
|
:environment => options['environment'],
|
|
:debug => options['verbose'],
|
|
:instrumenting => options['instrument'],
|
|
:disable_watcher => options['disable_watcher'],
|
|
:reload_paths => options['reload_paths'],
|
|
:force_polling => options['force_polling'],
|
|
:latency => options['latency']
|
|
}
|
|
|
|
puts '== The Middleman is loading'
|
|
::Middleman::PreviewServer.start(params)
|
|
end
|
|
end
|
|
|
|
def self.exit_on_failure?
|
|
true
|
|
end
|
|
|
|
# Map "s" to "server"
|
|
Base.map({ 's' => 'server' })
|
|
end
|