# File lib/phusion_passenger/classic_rails/application_spawner.rb, line 80
        def self.spawn_application(options)
                options = sanitize_spawn_options(options)
                
                a, b = UNIXSocket.pair
                pid = safe_fork('application', 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)
                        
                        channel = MessageChannel.new(b)
                        success = report_app_init_status(channel) do
                                prepare_app_process('config/environment.rb', options)
                                require File.expand_path('config/environment')
                                require 'dispatcher'
                                after_loading_app_code(options)
                        end
                        if success
                                start_request_handler(channel, false, options)
                        end
                end
                b.close
                Process.waitpid(pid) rescue nil
                
                channel = MessageChannel.new(a)
                unmarshal_and_raise_errors(channel, options["print_exceptions"])
                
                # No exception was raised, so spawning succeeded.
                return AppProcess.read_from_channel(channel)
        end