Class: Falcon::Command::Serve

Inherits:
Samovar::Command
  • Object
show all
Defined in:
lib/falcon/command/serve.rb

Instance Method Summary collapse

Instance Method Details

#container_classObject



53
54
55
56
57
58
59
60
61
62
# File 'lib/falcon/command/serve.rb', line 53

def container_class
	case @options[:container]
	when :threaded
		require 'async/container/threaded'
		return Async::Container::Threaded
	when :forked
		require 'async/container/forked'
		return Async::Container::Forked
	end
end

#invoke(parent) ⇒ Object



99
100
101
102
103
# File 'lib/falcon/command/serve.rb', line 99

def invoke(parent)
	container = run(parent.verbose?)
	
	sleep
end

#load_app(verbose) ⇒ Object



64
65
66
67
68
69
70
71
72
# File 'lib/falcon/command/serve.rb', line 64

def load_app(verbose)
	app, options = Rack::Builder.parse_file(@options[:config])
	
	if verbose
		app = Verbose.new(app)
	end
	
	return app, options
end

#run(verbose) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/falcon/command/serve.rb', line 74

def run(verbose)
	app, options = load_app(verbose)
	
	endpoint = Async::IO::Endpoint.parse(@options[:bind], reuse_port: true)
	
	Async.logger.info "Falcon taking flight! Binding to #{endpoint} [#{container_class} with concurrency: #{@options[:concurrency]}]"
	
	debug_trap = Async::IO::Trap.new(:USR1)
	
	container_class.new(concurrency: @options[:concurrency]) do |task|
		task.async do
			debug_trap.install!
			Async.logger.info "Send `kill -USR1 #{Process.pid}` for detailed status :)"
			
			debug_trap.trap do
				task.reactor.print_hierarchy($stderr)
			end
		end
		
		server = Falcon::Server.new(app, endpoint)
		
		server.run
	end
end