Class: Falcon::Command::Virtual

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

Constant Summary collapse

CONFIG_RU =
"config.ru"

Instance Method Summary collapse

Instance Method Details

#clientObject



61
62
63
# File 'lib/falcon/command/virtual.rb', line 61

def client
	Async::HTTP::Client.new(client_endpoint)
end

#invoke(parent) ⇒ Object



119
120
121
122
123
# File 'lib/falcon/command/virtual.rb', line 119

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

#load_app(path, verbose) ⇒ Object



53
54
55
56
57
58
59
# File 'lib/falcon/command/virtual.rb', line 53

def load_app(path, verbose)
	config = File.join(path, CONFIG_RU)
	
	rack_app, options = Rack::Builder.parse_file(config)
	
	return Server.middleware(rack_app, verbose: verbose), options
end

#run(verbose = false) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/falcon/command/virtual.rb', line 65

def run(verbose = false)
	hosts = Falcon::Hosts.new
	root = Dir.pwd
	
	sites.each do |path|
		name = File.basename(path)
		
		hosts.add(name) do |host|
			host.app_root = File.expand_path(path, root)
			
			if @options[:self_signed]
				host.self_signed!(name)
			else
				host.ssl_certificate_path = File.join(path, "ssl", "fullchain.pem")
				host.ssl_key_path = File.join(path, "ssl", "privkey.pem")
			end
		end
	end
	
	controller = Async::Container::Controller.new
	
	hosts.each do |name, host|
		if container = host.start
			controller << container
		end
	end
	
	controller << Async::Container::Forked.new do |task|
		proxy = hosts.proxy
		secure_endpoint = Async::HTTP::URLEndpoint.parse(@options[:bind_secure], ssl_context: hosts.ssl_context)
		
		Process.setproctitle("Falcon Proxy")
		
		proxy_server = Falcon::Server.new(proxy, secure_endpoint)
		
		proxy_server.run
	end
	
	controller << Async::Container::Forked.new do |task|
		redirection = hosts.redirection
		insecure_endpoint = Async::HTTP::URLEndpoint.parse(@options[:bind_insecure])
		
		Process.setproctitle("Falcon Redirector")
		
		redirection_server = Falcon::Server.new(redirection, insecure_endpoint)
		
		redirection_server.run
	end
	
	Process.setproctitle("Falcon Controller")
	
	return controller
end