Class: PhusionPassenger::WSGI::ApplicationSpawner
- Includes:
- Utils
- Defined in:
- lib/phusion_passenger/wsgi/application_spawner.rb
Overview
Class for spawning WSGI applications.
Constant Summary collapse
- REQUEST_HANDLER =
File.(File.dirname(__FILE__) + "/request_handler.py")
Class Method Summary collapse
Instance Method Summary collapse
-
#spawn_application(options) ⇒ Object
Spawn an instance of the given WSGI application.
Methods included from Utils
Class Method Details
.spawn_application(*args) ⇒ Object
40 41 42 43 |
# File 'lib/phusion_passenger/wsgi/application_spawner.rb', line 40 def self.spawn_application(*args) @@instance ||= ApplicationSpawner.new @@instance.spawn_application(*args) end |
Instance Method Details
#spawn_application(options) ⇒ Object
Spawn an instance of the given WSGI application. When successful, an Application object will be returned, which represents the spawned application.
Raises:
-
AppInitError: The WSGI application raised an exception or called exit() during startup.
-
SystemCallError, IOError, SocketError: Something went wrong.
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/phusion_passenger/wsgi/application_spawner.rb', line 53 def spawn_application() a, b = UNIXSocket.pair pid = safe_fork(self.class.to_s, true) do a.close file_descriptors_to_leave_open = [0, 1, 2, b.fileno] NativeSupport.close_all_file_descriptors(file_descriptors_to_leave_open) close_all_io_objects_for_fds(file_descriptors_to_leave_open) run(MessageChannel.new(b), ) end b.close Process.waitpid(pid) rescue nil channel = MessageChannel.new(a) return AppProcess.read_from_channel(channel) end |