lib/middleman-core/cli/server.rb



# 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'

      unless 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