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(app_root, lower_privilege = true, lowest_user = "nobody", environment = "production") ⇒ Object
Spawn an instance of the given WSGI application.
Class Method Details
.spawn_application(*args) ⇒ Object
36 37 38 39 |
# File 'lib/phusion_passenger/wsgi/application_spawner.rb', line 36 def self.spawn_application(*args) @@instance ||= ApplicationSpawner.new @@instance.spawn_application(*args) end |
Instance Method Details
#spawn_application(app_root, lower_privilege = true, lowest_user = "nobody", environment = "production") ⇒ 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.
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/phusion_passenger/wsgi/application_spawner.rb', line 49 def spawn_application(app_root, lower_privilege = true, lowest_user = "nobody", environment = "production") 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), app_root, lower_privilege, lowest_user, environment) end b.close Process.waitpid(pid) rescue nil channel = MessageChannel.new(a) pid, socket_name, socket_type = channel.read if pid.nil? raise IOError, "Connection closed" end owner_pipe = channel.recv_io return Application.new(@app_root, pid, socket_name, socket_type, owner_pipe) end |