# File lib/vegas/runner.rb, line 24
    def initialize(app, app_name, set_options = {}, runtime_args = ARGV, &block)
      @options = set_options || {}

      self.class.logger.level = options[:debug] ? Logger::DEBUG : Logger::INFO

      @app      = app
      @app_name = app_name

      @filesystem_friendly_app_name = @app_name.gsub(/\W+/, "_")
      @quoted_app_name = "'#{app_name}'"

      @runtime_args = runtime_args
      @rack_handler = setup_rack_handler

      # load options from opt parser
      @args = define_options do |opts|
        if block_given?
          opts.separator ''
          opts.separator "#{quoted_app_name} options:"
          yield(self, opts, app)
        end
      end

      if @should_kill
        kill!
        exit!(0)
      end

      # Handle :before_run hook
      if (before_run = options.delete(:before_run)).respond_to?(:call)
        before_run.call(self)
      end

      # Set app options
      @host = options[:host] || HOST

      if app.respond_to?(:set)
        app.set(options)
        app.set(:vegas, self)
      end

      # Make sure app dir is setup
      FileUtils.mkdir_p(app_dir)

      return if options[:start] == false

      # evaluate the launch_path
      path = if options[:launch_path].respond_to?(:call)
        options[:launch_path].call(self)
      else
        options[:launch_path]
      end

      start(path)
    end