passenger 2.2.15 → 3.0.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of passenger might be problematic. Click here for more details.
- data/DEVELOPERS.TXT +21 -12
- data/LICENSE +1 -1
- data/NEWS +8 -1
- data/PACKAGING.TXT +25 -0
- data/Rakefile +28 -891
- data/bin/passenger +32 -0
- data/bin/passenger-config +5 -5
- data/bin/passenger-install-apache2-module +37 -24
- data/bin/passenger-install-nginx-module +48 -46
- data/bin/passenger-make-enterprisey +8 -9
- data/bin/passenger-memory-stats +20 -150
- data/bin/passenger-status +130 -44
- data/bin/passenger-stress-test +5 -4
- data/build/agents.rb +73 -0
- data/build/apache2.rb +165 -0
- data/build/basics.rb +81 -0
- data/build/common_library.rb +198 -0
- data/build/config.rb +35 -0
- data/{misc/rake/cplusplus.rb → build/cplusplus_support.rb} +1 -1
- data/build/cxx_tests.rb +205 -0
- data/build/documentation.rb +77 -0
- data/{misc/rake → build}/gempackagetask.rb +1 -1
- data/build/integration_tests.rb +57 -0
- data/build/misc.rb +146 -0
- data/build/nginx.rb +64 -0
- data/build/oxt_tests.rb +52 -0
- data/{misc/rake → build}/packagetask.rb +0 -0
- data/build/packaging.rb +189 -0
- data/{misc/rake/extensions.rb → build/rake_extensions.rb} +1 -1
- data/{misc/rake → build}/rdoctask.rb +0 -0
- data/build/ruby_extension.rb +46 -0
- data/build/ruby_tests.rb +42 -0
- data/build/test_basics.rb +31 -0
- data/doc/ApplicationPool algorithm.txt +447 -234
- data/doc/Architectural overview.html +47 -56
- data/doc/Doxyfile +1 -1
- data/doc/Security of user switching support.html +46 -57
- data/doc/Users guide Apache.html +1033 -306
- data/doc/Users guide Apache.txt +419 -99
- data/doc/Users guide Nginx.html +1252 -253
- data/doc/Users guide Nginx.txt +711 -87
- data/doc/Users guide Standalone.html +603 -0
- data/doc/Users guide Standalone.txt +40 -0
- data/doc/cxxapi/AbstractSpawnManager_8h_source.html +141 -0
- data/doc/cxxapi/Account_8h_source.html +206 -0
- data/doc/cxxapi/AccountsDatabase_8h_source.html +161 -0
- data/doc/cxxapi/AgentBase_8h_source.html +70 -0
- data/doc/cxxapi/AgentsStarter_8h_source.html +112 -0
- data/doc/cxxapi/BCrypt_8h_source.html +104 -0
- data/doc/cxxapi/Blowfish_8h_source.html +134 -0
- data/doc/cxxapi/Bucket_8h_source.html +4 -3
- data/doc/cxxapi/Constants_8h_source.html +79 -0
- data/doc/cxxapi/ContentHandler_8h_source.html +95 -0
- data/doc/cxxapi/DirectoryMapper_8h_source.html +9 -8
- data/doc/cxxapi/EventedClient_8h_source.html +629 -0
- data/doc/cxxapi/EventedMessageServer_8h_source.html +358 -0
- data/doc/cxxapi/EventedServer_8h_source.html +326 -0
- data/doc/cxxapi/Exceptions_8h_source.html +366 -0
- data/doc/cxxapi/FileDescriptor_8h_source.html +260 -0
- data/doc/cxxapi/Hooks_8h_source.html +2 -1
- data/doc/cxxapi/HttpStatusExtractor_8h_source.html +382 -0
- data/doc/cxxapi/Logging_8h_source.html +726 -0
- data/doc/cxxapi/MessageChannel_8h_source.html +852 -0
- data/doc/cxxapi/MessageClient_8h_source.html +328 -0
- data/doc/cxxapi/MessageReadersWriters_8h_source.html +539 -0
- data/doc/cxxapi/MessageServer_8h_source.html +606 -0
- data/doc/cxxapi/PoolOptions_8h_source.html +548 -0
- data/doc/cxxapi/Process_8h_source.html +286 -0
- data/doc/cxxapi/RandomGenerator_8h_source.html +191 -0
- data/doc/cxxapi/ResourceLocator_8h_source.html +115 -0
- data/doc/cxxapi/ScgiRequestParser_8h_source.html +406 -0
- data/doc/cxxapi/ServerInstanceDir_8h_source.html +374 -0
- data/doc/cxxapi/Session_8h_source.html +501 -0
- data/doc/cxxapi/SpawnManager_8h_source.html +647 -0
- data/doc/cxxapi/StaticContentHandler_8h_source.html +68 -0
- data/doc/cxxapi/StaticString_8h_source.html +254 -0
- data/doc/cxxapi/StringListCreator_8h_source.html +114 -0
- data/doc/cxxapi/Utils_8h_source.html +442 -0
- data/doc/cxxapi/annotated.html +46 -0
- data/doc/cxxapi/apache2_2Configuration_8h_source.html +82 -0
- data/doc/cxxapi/classAgentWatcher-members.html +30 -26
- data/doc/cxxapi/classAgentWatcher.html +168 -194
- data/doc/cxxapi/classClient-members.html +14 -11
- data/doc/cxxapi/classClient.html +35 -35
- data/doc/cxxapi/classHooks-members.html +2 -0
- data/doc/cxxapi/classHooks.html +2 -0
- data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager-members.html +16 -13
- data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager.html +78 -82
- data/doc/cxxapi/classPassenger_1_1ArgumentException-members.html +12 -9
- data/doc/cxxapi/classPassenger_1_1ArgumentException.html +26 -22
- data/doc/cxxapi/classPassenger_1_1ArrayMessage-members.html +37 -0
- data/doc/cxxapi/classPassenger_1_1ArrayMessage.html +113 -0
- data/doc/cxxapi/classPassenger_1_1BufferedUpload-members.html +14 -11
- data/doc/cxxapi/classPassenger_1_1BufferedUpload.html +41 -42
- data/doc/cxxapi/classPassenger_1_1BusyException-members.html +12 -9
- data/doc/cxxapi/classPassenger_1_1BusyException.html +24 -20
- data/doc/cxxapi/classPassenger_1_1ConfigurationException-members.html +12 -9
- data/doc/cxxapi/classPassenger_1_1ConfigurationException.html +23 -19
- data/doc/cxxapi/classPassenger_1_1DirectoryMapper-members.html +2 -0
- data/doc/cxxapi/classPassenger_1_1DirectoryMapper.html +8 -6
- data/doc/cxxapi/classPassenger_1_1EOFException-members.html +12 -9
- data/doc/cxxapi/classPassenger_1_1EOFException.html +27 -23
- data/doc/cxxapi/classPassenger_1_1EventFd-members.html +12 -9
- data/doc/cxxapi/classPassenger_1_1EventFd.html +24 -21
- data/doc/cxxapi/classPassenger_1_1EventedClient-members.html +54 -0
- data/doc/cxxapi/classPassenger_1_1EventedClient.html +436 -0
- data/doc/cxxapi/classPassenger_1_1EventedMessageServer-members.html +37 -0
- data/doc/cxxapi/classPassenger_1_1EventedMessageServer.html +59 -0
- data/doc/cxxapi/classPassenger_1_1EventedMessageServer__inherit__graph.map +3 -0
- data/doc/cxxapi/classPassenger_1_1EventedMessageServer__inherit__graph.md5 +1 -0
- data/doc/cxxapi/classPassenger_1_1EventedMessageServer__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1EventedServer-members.html +37 -0
- data/doc/cxxapi/classPassenger_1_1EventedServer.html +93 -0
- data/doc/cxxapi/classPassenger_1_1EventedServer__inherit__graph.map +3 -0
- data/doc/cxxapi/classPassenger_1_1EventedServer__inherit__graph.md5 +1 -0
- data/doc/cxxapi/classPassenger_1_1EventedServer__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1FileDescriptor-members.html +16 -13
- data/doc/cxxapi/classPassenger_1_1FileDescriptor.html +63 -70
- data/doc/cxxapi/classPassenger_1_1FileNotFoundException-members.html +12 -9
- data/doc/cxxapi/classPassenger_1_1FileNotFoundException.html +26 -22
- data/doc/cxxapi/classPassenger_1_1FileSystemException-members.html +17 -14
- data/doc/cxxapi/classPassenger_1_1FileSystemException.html +32 -30
- data/doc/cxxapi/classPassenger_1_1HttpStatusExtractor-members.html +15 -12
- data/doc/cxxapi/classPassenger_1_1HttpStatusExtractor.html +59 -59
- data/doc/cxxapi/classPassenger_1_1IOException-members.html +12 -9
- data/doc/cxxapi/classPassenger_1_1IOException.html +27 -23
- data/doc/cxxapi/classPassenger_1_1MessageChannel-members.html +36 -33
- data/doc/cxxapi/classPassenger_1_1MessageChannel.html +326 -344
- data/doc/cxxapi/classPassenger_1_1MessageServer-members.html +25 -22
- data/doc/cxxapi/classPassenger_1_1MessageServer.html +160 -191
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext-members.html +12 -9
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext.html +29 -27
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext__inherit__graph.map +3 -1
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext__inherit__graph.md5 +1 -1
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext-members.html +17 -14
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext.html +69 -79
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext__inherit__graph.map +3 -1
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext__inherit__graph.md5 +1 -1
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1Handler-members.html +15 -12
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1Handler.html +60 -63
- data/doc/cxxapi/classPassenger_1_1Process-members.html +20 -17
- data/doc/cxxapi/classPassenger_1_1Process.html +88 -95
- data/doc/cxxapi/classPassenger_1_1RandomGenerator-members.html +13 -10
- data/doc/cxxapi/classPassenger_1_1RandomGenerator.html +36 -35
- data/doc/cxxapi/classPassenger_1_1RuntimeException-members.html +12 -9
- data/doc/cxxapi/classPassenger_1_1RuntimeException.html +24 -20
- data/doc/cxxapi/classPassenger_1_1ScalarMessage-members.html +37 -0
- data/doc/cxxapi/classPassenger_1_1ScalarMessage.html +76 -0
- data/doc/cxxapi/classPassenger_1_1ScgiRequestParser-members.html +26 -23
- data/doc/cxxapi/classPassenger_1_1ScgiRequestParser.html +121 -138
- data/doc/cxxapi/classPassenger_1_1SecurityException-members.html +12 -9
- data/doc/cxxapi/classPassenger_1_1SecurityException.html +26 -22
- data/doc/cxxapi/classPassenger_1_1Session-members.html +29 -26
- data/doc/cxxapi/classPassenger_1_1Session.html +219 -240
- data/doc/cxxapi/classPassenger_1_1SpawnException-members.html +14 -11
- data/doc/cxxapi/classPassenger_1_1SpawnException.html +36 -37
- data/doc/cxxapi/classPassenger_1_1SpawnManager-members.html +18 -15
- data/doc/cxxapi/classPassenger_1_1SpawnManager.html +115 -110
- data/doc/cxxapi/classPassenger_1_1StandardSession-members.html +30 -27
- data/doc/cxxapi/classPassenger_1_1StandardSession.html +163 -184
- data/doc/cxxapi/classPassenger_1_1StaticString-members.html +12 -9
- data/doc/cxxapi/classPassenger_1_1StaticString.html +27 -25
- data/doc/cxxapi/classPassenger_1_1SystemException-members.html +16 -13
- data/doc/cxxapi/classPassenger_1_1SystemException.html +65 -67
- data/doc/cxxapi/classPassenger_1_1TimeRetrievalException-members.html +16 -13
- data/doc/cxxapi/classPassenger_1_1TimeRetrievalException.html +27 -23
- data/doc/cxxapi/classPassenger_1_1TimeoutException-members.html +12 -9
- data/doc/cxxapi/classPassenger_1_1TimeoutException.html +24 -20
- data/doc/cxxapi/classPassenger_1_1Uint16Message-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1Uint16Message.html +51 -0
- data/doc/cxxapi/classPassenger_1_1Uint32Message-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1Uint32Message.html +51 -0
- data/doc/cxxapi/classServer-members.html +12 -9
- data/doc/cxxapi/classServer.html +23 -20
- data/doc/cxxapi/classServerInstanceDirToucher-members.html +12 -9
- data/doc/cxxapi/classServerInstanceDirToucher.html +21 -17
- data/doc/cxxapi/classes.html +18 -4
- data/doc/cxxapi/definitions_8h_source.html +1 -0
- data/doc/cxxapi/files.html +36 -1
- data/doc/cxxapi/functions.html +53 -21
- data/doc/cxxapi/functions_0x62.html +82 -0
- data/doc/cxxapi/functions_0x63.html +99 -0
- data/doc/cxxapi/functions_0x64.html +95 -0
- data/doc/cxxapi/functions_0x65.html +88 -0
- data/doc/cxxapi/functions_0x66.html +100 -0
- data/doc/cxxapi/functions_0x67.html +170 -0
- data/doc/cxxapi/functions_0x68.html +88 -0
- data/doc/cxxapi/functions_0x69.html +93 -0
- data/doc/cxxapi/functions_0x6b.html +80 -0
- data/doc/cxxapi/functions_0x6c.html +88 -0
- data/doc/cxxapi/functions_0x6d.html +88 -0
- data/doc/cxxapi/functions_0x6e.html +86 -0
- data/doc/cxxapi/functions_0x6f.html +94 -0
- data/doc/cxxapi/functions_0x70.html +94 -0
- data/doc/cxxapi/functions_0x72.html +110 -0
- data/doc/cxxapi/functions_0x73.html +171 -0
- data/doc/cxxapi/functions_0x74.html +85 -0
- data/doc/cxxapi/functions_0x75.html +85 -0
- data/doc/cxxapi/functions_0x77.html +92 -0
- data/doc/cxxapi/functions_0x7e.html +79 -0
- data/doc/cxxapi/functions_enum.html +14 -12
- data/doc/cxxapi/functions_eval.html +22 -16
- data/doc/cxxapi/functions_func.html +460 -1
- data/doc/cxxapi/functions_vars.html +163 -63
- data/doc/cxxapi/graph_legend.html +1 -0
- data/doc/cxxapi/graph_legend.png +0 -0
- data/doc/cxxapi/group__Core.html +2 -2
- data/doc/cxxapi/group__Core.map +1 -2
- data/doc/cxxapi/group__Core.png +0 -0
- data/doc/cxxapi/group__Exceptions.html +32 -40
- data/doc/cxxapi/group__Hooks.html +2 -1
- data/doc/cxxapi/group__Hooks.map +1 -1
- data/doc/cxxapi/group__Hooks.png +0 -0
- data/doc/cxxapi/group__Support.html +509 -0
- data/doc/cxxapi/hierarchy.html +66 -62
- data/doc/cxxapi/inherit__graph__10.map +3 -1
- data/doc/cxxapi/inherit__graph__10.md5 +1 -1
- data/doc/cxxapi/inherit__graph__10.png +0 -0
- data/doc/cxxapi/inherit__graph__11.map +4 -1
- data/doc/cxxapi/inherit__graph__11.md5 +1 -1
- data/doc/cxxapi/inherit__graph__11.png +0 -0
- data/doc/cxxapi/inherit__graph__12.map +3 -1
- data/doc/cxxapi/inherit__graph__12.md5 +1 -1
- data/doc/cxxapi/inherit__graph__12.png +0 -0
- data/doc/cxxapi/inherit__graph__13.map +3 -1
- data/doc/cxxapi/inherit__graph__13.md5 +1 -1
- data/doc/cxxapi/inherit__graph__13.png +0 -0
- data/doc/cxxapi/inherit__graph__14.map +3 -1
- data/doc/cxxapi/inherit__graph__14.md5 +1 -1
- data/doc/cxxapi/inherit__graph__14.png +0 -0
- data/doc/cxxapi/inherit__graph__15.map +5 -1
- data/doc/cxxapi/inherit__graph__15.md5 +1 -1
- data/doc/cxxapi/inherit__graph__15.png +0 -0
- data/doc/cxxapi/inherit__graph__16.map +3 -3
- data/doc/cxxapi/inherit__graph__16.md5 +1 -1
- data/doc/cxxapi/inherit__graph__16.png +0 -0
- data/doc/cxxapi/inherit__graph__17.map +3 -1
- data/doc/cxxapi/inherit__graph__17.md5 +1 -1
- data/doc/cxxapi/inherit__graph__17.png +0 -0
- data/doc/cxxapi/inherit__graph__18.map +4 -1
- data/doc/cxxapi/inherit__graph__18.md5 +1 -1
- data/doc/cxxapi/inherit__graph__18.png +0 -0
- data/doc/cxxapi/inherit__graph__19.map +3 -1
- data/doc/cxxapi/inherit__graph__19.md5 +1 -1
- data/doc/cxxapi/inherit__graph__19.png +0 -0
- data/doc/cxxapi/inherit__graph__20.map +3 -2
- data/doc/cxxapi/inherit__graph__20.md5 +1 -1
- data/doc/cxxapi/inherit__graph__20.png +0 -0
- data/doc/cxxapi/inherit__graph__21.map +3 -1
- data/doc/cxxapi/inherit__graph__21.md5 +1 -1
- data/doc/cxxapi/inherit__graph__21.png +0 -0
- data/doc/cxxapi/inherit__graph__22.map +3 -1
- data/doc/cxxapi/inherit__graph__22.md5 +1 -1
- data/doc/cxxapi/inherit__graph__22.png +0 -0
- data/doc/cxxapi/inherit__graph__23.map +3 -1
- data/doc/cxxapi/inherit__graph__23.md5 +1 -1
- data/doc/cxxapi/inherit__graph__23.png +0 -0
- data/doc/cxxapi/inherit__graph__24.map +3 -1
- data/doc/cxxapi/inherit__graph__24.md5 +1 -1
- data/doc/cxxapi/inherit__graph__24.png +0 -0
- data/doc/cxxapi/inherit__graph__25.map +3 -1
- data/doc/cxxapi/inherit__graph__25.md5 +1 -1
- data/doc/cxxapi/inherit__graph__25.png +0 -0
- data/doc/cxxapi/inherit__graph__26.map +3 -1
- data/doc/cxxapi/inherit__graph__26.md5 +1 -1
- data/doc/cxxapi/inherit__graph__26.png +0 -0
- data/doc/cxxapi/inherit__graph__27.map +3 -1
- data/doc/cxxapi/inherit__graph__27.md5 +1 -1
- data/doc/cxxapi/inherit__graph__27.png +0 -0
- data/doc/cxxapi/inherit__graph__28.map +4 -1
- data/doc/cxxapi/inherit__graph__28.md5 +1 -1
- data/doc/cxxapi/inherit__graph__28.png +0 -0
- data/doc/cxxapi/inherit__graph__29.map +3 -1
- data/doc/cxxapi/inherit__graph__29.md5 +1 -1
- data/doc/cxxapi/inherit__graph__29.png +0 -0
- data/doc/cxxapi/inherit__graph__30.map +3 -2
- data/doc/cxxapi/inherit__graph__30.md5 +1 -1
- data/doc/cxxapi/inherit__graph__30.png +0 -0
- data/doc/cxxapi/inherit__graph__31.map +3 -1
- data/doc/cxxapi/inherit__graph__31.md5 +1 -1
- data/doc/cxxapi/inherit__graph__31.png +0 -0
- data/doc/cxxapi/inherit__graph__32.map +5 -1
- data/doc/cxxapi/inherit__graph__32.md5 +1 -1
- data/doc/cxxapi/inherit__graph__32.png +0 -0
- data/doc/cxxapi/inherit__graph__33.map +3 -1
- data/doc/cxxapi/inherit__graph__33.md5 +1 -1
- data/doc/cxxapi/inherit__graph__33.png +0 -0
- data/doc/cxxapi/inherit__graph__34.map +3 -3
- data/doc/cxxapi/inherit__graph__34.md5 +1 -1
- data/doc/cxxapi/inherit__graph__34.png +0 -0
- data/doc/cxxapi/inherit__graph__35.map +3 -1
- data/doc/cxxapi/inherit__graph__35.md5 +1 -1
- data/doc/cxxapi/inherit__graph__35.png +0 -0
- data/doc/cxxapi/inherit__graph__36.map +3 -1
- data/doc/cxxapi/inherit__graph__36.md5 +1 -1
- data/doc/cxxapi/inherit__graph__36.png +0 -0
- data/doc/cxxapi/inherit__graph__37.map +3 -1
- data/doc/cxxapi/inherit__graph__37.md5 +1 -1
- data/doc/cxxapi/inherit__graph__37.png +0 -0
- data/doc/cxxapi/inherit__graph__4.map +3 -1
- data/doc/cxxapi/inherit__graph__4.md5 +1 -1
- data/doc/cxxapi/inherit__graph__4.png +0 -0
- data/doc/cxxapi/inherit__graph__5.map +3 -1
- data/doc/cxxapi/inherit__graph__5.md5 +1 -1
- data/doc/cxxapi/inherit__graph__5.png +0 -0
- data/doc/cxxapi/inherit__graph__6.map +3 -1
- data/doc/cxxapi/inherit__graph__6.md5 +1 -1
- data/doc/cxxapi/inherit__graph__6.png +0 -0
- data/doc/cxxapi/inherit__graph__7.map +3 -1
- data/doc/cxxapi/inherit__graph__7.md5 +1 -1
- data/doc/cxxapi/inherit__graph__7.png +0 -0
- data/doc/cxxapi/inherit__graph__8.map +3 -1
- data/doc/cxxapi/inherit__graph__8.md5 +1 -1
- data/doc/cxxapi/inherit__graph__8.png +0 -0
- data/doc/cxxapi/inherit__graph__9.map +3 -1
- data/doc/cxxapi/inherit__graph__9.md5 +1 -1
- data/doc/cxxapi/inherit__graph__9.png +0 -0
- data/doc/cxxapi/inherits.html +123 -126
- data/doc/cxxapi/main.html +1 -0
- data/doc/cxxapi/modules.html +2 -1
- data/doc/cxxapi/namespacePassenger.html +263 -492
- data/doc/cxxapi/namespacemembers.html +68 -96
- data/doc/cxxapi/namespacemembers_enum.html +14 -12
- data/doc/cxxapi/namespacemembers_eval.html +20 -15
- data/doc/cxxapi/namespacemembers_func.html +52 -88
- data/doc/cxxapi/namespacemembers_type.html +18 -14
- data/doc/cxxapi/namespaces.html +12 -9
- data/doc/cxxapi/nginx_2Configuration_8h_source.html +125 -0
- data/doc/cxxapi/ngx__http__passenger__module_8h_source.html +94 -0
- data/doc/cxxapi/structPassenger_1_1MessageServer_1_1DisconnectEventBroadcastGuard-members.html +12 -9
- data/doc/cxxapi/structPassenger_1_1MessageServer_1_1DisconnectEventBroadcastGuard.html +24 -22
- data/doc/cxxapi/structPassenger_1_1PoolOptions-members.html +43 -38
- data/doc/cxxapi/structPassenger_1_1PoolOptions.html +275 -325
- data/doc/cxxapi/structPassenger_1_1StaticString_1_1Hash-members.html +12 -9
- data/doc/cxxapi/structPassenger_1_1StaticString_1_1Hash.html +24 -22
- data/doc/cxxapi/tree.html +152 -7
- data/doc/users_guide_snippets/{analysis_and_system_maintenance_tools.txt → analysis_and_system_maintenance.txt} +58 -1
- data/doc/users_guide_snippets/appendix_c_spawning_methods.txt +1 -2
- data/doc/users_guide_snippets/global_queueing_explained.txt +1 -5
- data/doc/users_guide_snippets/{rails_spawn_method.txt → passenger_spawn_method.txt} +9 -8
- data/doc/users_guide_snippets/tips.txt +12 -6
- data/doc/users_guide_snippets/under_the_hood/page_caching_support.txt +22 -0
- data/ext/apache2/Bucket.cpp +4 -4
- data/ext/apache2/Bucket.h +3 -3
- data/ext/apache2/Configuration.cpp +278 -381
- data/ext/apache2/Configuration.h +3 -357
- data/ext/apache2/Configuration.hpp +461 -0
- data/ext/apache2/DirectoryMapper.h +3 -3
- data/ext/apache2/HelperAgent.cpp +359 -0
- data/ext/apache2/Hooks.cpp +339 -226
- data/ext/apache2/Hooks.h +1 -1
- data/ext/apache2/mod_passenger.c +10 -4
- data/ext/boost/algorithm/string/case_conv.hpp +4 -4
- data/ext/boost/algorithm/string/concept.hpp +2 -2
- data/ext/boost/algorithm/string/detail/case_conv.hpp +18 -9
- data/ext/boost/algorithm/string/detail/find_format.hpp +44 -43
- data/ext/boost/algorithm/string/detail/find_format_all.hpp +56 -56
- data/ext/boost/algorithm/string/detail/find_format_store.hpp +7 -0
- data/ext/boost/algorithm/string/detail/finder.hpp +14 -14
- data/ext/boost/algorithm/string/detail/formatter.hpp +2 -2
- data/ext/boost/algorithm/string/detail/replace_storage.hpp +3 -3
- data/ext/boost/algorithm/string/detail/sequence.hpp +3 -3
- data/ext/boost/algorithm/string/erase.hpp +98 -98
- data/ext/boost/algorithm/string/find_format.hpp +56 -38
- data/ext/boost/algorithm/string/finder.hpp +6 -6
- data/ext/boost/algorithm/string/formatter.hpp +1 -1
- data/ext/boost/algorithm/string/replace.hpp +99 -99
- data/ext/boost/bind.hpp +5 -1670
- data/ext/boost/bind/bind.hpp +1751 -0
- data/ext/boost/bind/bind_mf2_cc.hpp +228 -0
- data/ext/boost/bind/mem_fn.hpp +389 -0
- data/ext/boost/bind/mem_fn_template.hpp +54 -27
- data/ext/boost/bind/placeholders.hpp +3 -2
- data/ext/boost/concept_check.hpp +10 -0
- data/ext/boost/config/abi/msvc_prefix.hpp +15 -1
- data/ext/boost/config/abi_prefix.hpp +1 -1
- data/ext/boost/config/abi_suffix.hpp +3 -2
- data/ext/boost/config/auto_link.hpp +6 -1
- data/ext/boost/config/compiler/borland.hpp +75 -17
- data/ext/boost/config/compiler/codegear.hpp +163 -0
- data/ext/boost/config/compiler/common_edg.hpp +35 -0
- data/ext/boost/config/compiler/digitalmars.hpp +26 -0
- data/ext/boost/config/compiler/gcc.hpp +69 -14
- data/ext/boost/config/compiler/hp_acc.hpp +32 -0
- data/ext/boost/config/compiler/intel.hpp +13 -2
- data/ext/boost/config/compiler/kai.hpp +0 -2
- data/ext/boost/config/compiler/metrowerks.hpp +29 -1
- data/ext/boost/config/compiler/mpw.hpp +30 -0
- data/ext/boost/config/compiler/pgi.hpp +37 -0
- data/ext/boost/config/compiler/sgi_mipspro.hpp +1 -0
- data/ext/boost/config/compiler/sunpro_cc.hpp +39 -7
- data/ext/boost/config/compiler/vacpp.hpp +31 -3
- data/ext/boost/config/compiler/visualc.hpp +72 -5
- data/ext/boost/config/no_tr1/cmath.hpp +28 -0
- data/ext/boost/config/platform/bsd.hpp +16 -3
- data/ext/boost/config/platform/hpux.hpp +3 -0
- data/ext/boost/config/platform/macos.hpp +8 -0
- data/ext/boost/config/platform/solaris.hpp +7 -0
- data/ext/boost/config/platform/vxworks.hpp +31 -0
- data/ext/boost/config/select_compiler_config.hpp +4 -0
- data/ext/boost/config/select_platform_config.hpp +6 -2
- data/ext/boost/config/select_stdlib_config.hpp +17 -8
- data/ext/boost/config/stdlib/dinkumware.hpp +34 -2
- data/ext/boost/config/stdlib/libcomo.hpp +25 -0
- data/ext/boost/config/stdlib/libstdcpp3.hpp +56 -2
- data/ext/boost/config/stdlib/modena.hpp +25 -0
- data/ext/boost/config/stdlib/msl.hpp +24 -0
- data/ext/boost/config/stdlib/roguewave.hpp +26 -0
- data/ext/boost/config/stdlib/sgi.hpp +25 -0
- data/ext/boost/config/stdlib/stlport.hpp +36 -1
- data/ext/boost/config/stdlib/vacpp.hpp +25 -0
- data/ext/boost/config/suffix.hpp +67 -32
- data/ext/boost/config/warning_disable.hpp +47 -0
- data/ext/boost/cstdint.hpp +62 -36
- data/ext/boost/date_time/c_time.hpp +28 -12
- data/ext/boost/date_time/compiler_config.hpp +27 -5
- data/ext/boost/date_time/constrained_value.hpp +36 -13
- data/ext/boost/date_time/date.hpp +44 -33
- data/ext/boost/date_time/date_duration.hpp +13 -14
- data/ext/boost/date_time/date_facet.hpp +215 -226
- data/ext/boost/date_time/date_generator_formatter.hpp +22 -20
- data/ext/boost/date_time/date_generator_parser.hpp +52 -51
- data/ext/boost/date_time/date_generators.hpp +16 -16
- data/ext/boost/date_time/date_parsing.hpp +115 -98
- data/ext/boost/date_time/filetime_functions.hpp +133 -41
- data/ext/boost/date_time/format_date_parser.hpp +22 -10
- data/ext/boost/date_time/gregorian/conversion.hpp +32 -39
- data/ext/boost/date_time/gregorian/greg_calendar.hpp +15 -14
- data/ext/boost/date_time/gregorian/greg_date.hpp +19 -18
- data/ext/boost/date_time/gregorian/greg_duration.hpp +106 -10
- data/ext/boost/date_time/gregorian/greg_duration_types.hpp +16 -7
- data/ext/boost/date_time/gregorian/greg_weekday.hpp +2 -2
- data/ext/boost/date_time/gregorian/gregorian_io.hpp +11 -4
- data/ext/boost/date_time/gregorian_calendar.hpp +8 -8
- data/ext/boost/date_time/gregorian_calendar.ipp +30 -30
- data/ext/boost/date_time/int_adapter.hpp +4 -2
- data/ext/boost/date_time/microsec_time_clock.hpp +39 -117
- data/ext/boost/date_time/period_parser.hpp +17 -15
- data/ext/boost/date_time/posix_time/conversion.hpp +28 -29
- data/ext/boost/date_time/posix_time/posix_time_config.hpp +19 -19
- data/ext/boost/date_time/posix_time/posix_time_io.hpp +31 -38
- data/ext/boost/date_time/posix_time/time_formatters.hpp +32 -32
- data/ext/boost/date_time/string_parse_tree.hpp +46 -46
- data/ext/boost/date_time/strings_from_facet.hpp +7 -5
- data/ext/boost/date_time/time.hpp +7 -6
- data/ext/boost/date_time/time_defs.hpp +12 -2
- data/ext/boost/date_time/time_duration.hpp +27 -26
- data/ext/boost/date_time/time_facet.hpp +386 -321
- data/ext/boost/date_time/time_formatting_streams.hpp +8 -5
- data/ext/boost/date_time/time_resolution_traits.hpp +29 -25
- data/ext/boost/date_time/time_system_split.hpp +7 -13
- data/ext/boost/date_time/wrapping_int.hpp +21 -15
- data/ext/boost/detail/call_traits.hpp +1 -1
- data/ext/boost/detail/endian.hpp +4 -4
- data/ext/boost/detail/no_exceptions_support.hpp +87 -0
- data/ext/boost/detail/sp_typeinfo.hpp +50 -4
- data/ext/boost/detail/workaround.hpp +63 -3
- data/ext/boost/enable_shared_from_this.hpp +4 -59
- data/ext/boost/exception/current_exception_cast.hpp +43 -0
- data/ext/boost/exception/detail/attribute_noreturn.hpp +17 -0
- data/ext/boost/exception/detail/error_info_impl.hpp +75 -0
- data/ext/boost/exception/detail/exception_ptr.hpp +490 -0
- data/ext/boost/exception/detail/is_output_streamable.hpp +47 -0
- data/ext/boost/exception/detail/object_hex_dump.hpp +50 -0
- data/ext/boost/exception/detail/type_info.hpp +79 -0
- data/ext/boost/exception/diagnostic_information.hpp +182 -0
- data/ext/boost/exception/exception.hpp +422 -0
- data/ext/boost/exception/get_error_info.hpp +130 -0
- data/ext/boost/exception/info.hpp +167 -0
- data/ext/boost/exception/to_string.hpp +83 -0
- data/ext/boost/exception/to_string_stub.hpp +109 -0
- data/ext/boost/exception_ptr.hpp +11 -0
- data/ext/boost/function/detail/prologue.hpp +2 -1
- data/ext/boost/function/function_base.hpp +270 -128
- data/ext/boost/function/function_fwd.hpp +70 -0
- data/ext/boost/function/function_template.hpp +319 -130
- data/ext/boost/get_pointer.hpp +5 -1
- data/ext/boost/integer.hpp +253 -0
- data/ext/boost/integer_fwd.hpp +174 -0
- data/ext/boost/integer_traits.hpp +26 -1
- data/ext/boost/io/ios_state.hpp +8 -0
- data/ext/boost/iterator/detail/config_def.hpp +4 -2
- data/ext/boost/iterator/iterator_adaptor.hpp +7 -2
- data/ext/boost/iterator/iterator_facade.hpp +1 -2
- data/ext/boost/lexical_cast.hpp +113 -105
- data/ext/boost/limits.hpp +1 -1
- data/ext/boost/mem_fn.hpp +5 -370
- data/ext/boost/memory_order.hpp +53 -0
- data/ext/boost/mpl/always.hpp +3 -3
- data/ext/boost/mpl/and.hpp +3 -3
- data/ext/boost/mpl/apply.hpp +3 -3
- data/ext/boost/mpl/apply_fwd.hpp +3 -3
- data/ext/boost/mpl/apply_wrap.hpp +37 -6
- data/ext/boost/mpl/arg.hpp +3 -3
- data/ext/boost/mpl/arg_fwd.hpp +3 -3
- data/ext/boost/mpl/assert.hpp +6 -6
- data/ext/boost/mpl/aux_/adl_barrier.hpp +3 -3
- data/ext/boost/mpl/aux_/arg_typedef.hpp +3 -3
- data/ext/boost/mpl/aux_/arity.hpp +3 -3
- data/ext/boost/mpl/aux_/arity_spec.hpp +3 -3
- data/ext/boost/mpl/aux_/common_name_wknd.hpp +3 -3
- data/ext/boost/mpl/aux_/config/adl.hpp +4 -4
- data/ext/boost/mpl/aux_/config/arrays.hpp +4 -4
- data/ext/boost/mpl/aux_/config/bcc.hpp +28 -0
- data/ext/boost/mpl/aux_/config/bind.hpp +4 -4
- data/ext/boost/mpl/aux_/config/compiler.hpp +8 -6
- data/ext/boost/mpl/aux_/config/ctps.hpp +3 -3
- data/ext/boost/mpl/aux_/config/dtp.hpp +5 -5
- data/ext/boost/mpl/aux_/config/eti.hpp +3 -3
- data/ext/boost/mpl/aux_/config/gcc.hpp +3 -3
- data/ext/boost/mpl/aux_/config/has_apply.hpp +3 -3
- data/ext/boost/mpl/aux_/config/has_xxx.hpp +3 -3
- data/ext/boost/mpl/aux_/config/integral.hpp +4 -4
- data/ext/boost/mpl/aux_/config/intel.hpp +3 -3
- data/ext/boost/mpl/aux_/config/lambda.hpp +3 -3
- data/ext/boost/mpl/aux_/config/msvc.hpp +3 -3
- data/ext/boost/mpl/aux_/config/msvc_typename.hpp +3 -3
- data/ext/boost/mpl/aux_/config/nttp.hpp +3 -3
- data/ext/boost/mpl/aux_/config/overload_resolution.hpp +3 -3
- data/ext/boost/mpl/aux_/config/pp_counter.hpp +3 -3
- data/ext/boost/mpl/aux_/config/preprocessor.hpp +4 -4
- data/ext/boost/mpl/aux_/config/static_constant.hpp +3 -3
- data/ext/boost/mpl/aux_/config/ttp.hpp +4 -4
- data/ext/boost/mpl/aux_/config/use_preprocessed.hpp +3 -3
- data/ext/boost/mpl/aux_/config/workaround.hpp +3 -3
- data/ext/boost/mpl/aux_/full_lambda.hpp +3 -3
- data/ext/boost/mpl/aux_/has_apply.hpp +3 -3
- data/ext/boost/mpl/aux_/has_type.hpp +3 -3
- data/ext/boost/mpl/aux_/include_preprocessed.hpp +3 -3
- data/ext/boost/mpl/aux_/integral_wrapper.hpp +3 -3
- data/ext/boost/mpl/aux_/lambda_arity_param.hpp +3 -3
- data/ext/boost/mpl/aux_/lambda_support.hpp +4 -4
- data/ext/boost/mpl/aux_/msvc_never_true.hpp +3 -3
- data/ext/boost/mpl/aux_/na.hpp +3 -3
- data/ext/boost/mpl/aux_/na_assert.hpp +3 -3
- data/ext/boost/mpl/aux_/na_fwd.hpp +3 -3
- data/ext/boost/mpl/aux_/na_spec.hpp +3 -3
- data/ext/boost/mpl/aux_/nested_type_wknd.hpp +3 -3
- data/ext/boost/mpl/aux_/nttp_decl.hpp +3 -3
- data/ext/boost/mpl/aux_/preprocessor/def_params_tail.hpp +3 -3
- data/ext/boost/mpl/aux_/preprocessor/enum.hpp +3 -3
- data/ext/boost/mpl/aux_/preprocessor/filter_params.hpp +3 -3
- data/ext/boost/mpl/aux_/preprocessor/params.hpp +3 -3
- data/ext/boost/mpl/aux_/preprocessor/sub.hpp +3 -3
- data/ext/boost/mpl/aux_/static_cast.hpp +3 -3
- data/ext/boost/mpl/aux_/template_arity.hpp +3 -3
- data/ext/boost/mpl/aux_/template_arity_fwd.hpp +3 -3
- data/ext/boost/mpl/aux_/type_wrapper.hpp +3 -3
- data/ext/boost/mpl/aux_/value_wknd.hpp +3 -3
- data/ext/boost/mpl/aux_/yes_no.hpp +3 -3
- data/ext/boost/mpl/bind.hpp +3 -3
- data/ext/boost/mpl/bind_fwd.hpp +3 -3
- data/ext/boost/mpl/bool.hpp +3 -3
- data/ext/boost/mpl/bool_fwd.hpp +3 -3
- data/ext/boost/mpl/eval_if.hpp +3 -3
- data/ext/boost/mpl/has_xxx.hpp +10 -8
- data/ext/boost/mpl/identity.hpp +3 -3
- data/ext/boost/mpl/if.hpp +3 -3
- data/ext/boost/mpl/int.hpp +3 -3
- data/ext/boost/mpl/int_fwd.hpp +3 -3
- data/ext/boost/mpl/integral_c.hpp +3 -3
- data/ext/boost/mpl/integral_c_fwd.hpp +3 -3
- data/ext/boost/mpl/integral_c_tag.hpp +3 -3
- data/ext/boost/mpl/lambda.hpp +3 -3
- data/ext/boost/mpl/lambda_fwd.hpp +3 -3
- data/ext/boost/mpl/limits/arity.hpp +3 -3
- data/ext/boost/mpl/logical.hpp +3 -3
- data/ext/boost/mpl/next.hpp +3 -3
- data/ext/boost/mpl/next_prior.hpp +3 -3
- data/ext/boost/mpl/not.hpp +3 -3
- data/ext/boost/mpl/or.hpp +3 -3
- data/ext/boost/mpl/placeholders.hpp +3 -3
- data/ext/boost/mpl/protect.hpp +3 -3
- data/ext/boost/mpl/quote.hpp +18 -7
- data/ext/boost/mpl/size_t.hpp +3 -3
- data/ext/boost/mpl/size_t_fwd.hpp +3 -3
- data/ext/boost/mpl/void.hpp +3 -3
- data/ext/boost/mpl/void_fwd.hpp +3 -3
- data/ext/boost/non_type.hpp +27 -27
- data/ext/boost/operators.hpp +51 -18
- data/ext/boost/preprocessor/arithmetic/detail/div_base.hpp +61 -0
- data/ext/boost/preprocessor/arithmetic/mod.hpp +39 -0
- data/ext/boost/preprocessor/comparison/less_equal.hpp +39 -0
- data/ext/boost/preprocessor/control/deduce_d.hpp +22 -0
- data/ext/boost/preprocessor/logical/not.hpp +30 -0
- data/ext/boost/preprocessor/seq/cat.hpp +48 -0
- data/ext/boost/preprocessor/seq/fold_left.hpp +1070 -0
- data/ext/boost/preprocessor/seq/transform.hpp +48 -0
- data/ext/boost/range/as_literal.hpp +10 -14
- data/ext/boost/range/begin.hpp +4 -4
- data/ext/boost/range/detail/implementation_help.hpp +4 -0
- data/ext/boost/range/end.hpp +4 -4
- data/ext/boost/range/iterator_range.hpp +31 -15
- data/ext/boost/ref.hpp +12 -1
- data/ext/boost/scoped_array.hpp +16 -0
- data/ext/boost/scoped_ptr.hpp +16 -0
- data/ext/boost/shared_ptr.hpp +2 -602
- data/ext/boost/{detail → smart_ptr}/bad_weak_ptr.hpp +4 -4
- data/ext/boost/{detail → smart_ptr/detail}/atomic_count.hpp +14 -19
- data/ext/boost/{detail → smart_ptr/detail}/atomic_count_gcc.hpp +13 -9
- data/ext/boost/{detail → smart_ptr/detail}/atomic_count_gcc_x86.hpp +5 -12
- data/ext/boost/{detail → smart_ptr/detail}/atomic_count_pthreads.hpp +5 -5
- data/ext/boost/{detail → smart_ptr/detail}/atomic_count_solaris.hpp +3 -3
- data/ext/boost/{detail → smart_ptr/detail}/atomic_count_sync.hpp +9 -5
- data/ext/boost/{detail → smart_ptr/detail}/atomic_count_win32.hpp +3 -3
- data/ext/boost/smart_ptr/detail/operator_bool.hpp +56 -0
- data/ext/boost/{detail → smart_ptr/detail}/shared_count.hpp +86 -17
- data/ext/boost/smart_ptr/detail/sp_convertible.hpp +76 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base.hpp +70 -0
- data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_acc_ia64.hpp +4 -4
- data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_cw_ppc.hpp +4 -4
- data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_cw_x86.hpp +4 -4
- data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_gcc_ia64.hpp +4 -4
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +172 -0
- data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_gcc_ppc.hpp +4 -4
- data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_gcc_sparc.hpp +7 -7
- data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_gcc_x86.hpp +4 -4
- data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_nt.hpp +4 -4
- data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_pt.hpp +4 -4
- data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_solaris.hpp +4 -4
- data/ext/boost/smart_ptr/detail/sp_counted_base_spin.hpp +131 -0
- data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_sync.hpp +8 -4
- data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_w32.hpp +4 -4
- data/ext/boost/{detail → smart_ptr/detail}/sp_counted_impl.hpp +5 -5
- data/ext/boost/smart_ptr/detail/sp_has_sync.hpp +49 -0
- data/ext/boost/smart_ptr/detail/spinlock.hpp +53 -0
- data/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +85 -0
- data/ext/boost/smart_ptr/detail/spinlock_nt.hpp +89 -0
- data/ext/boost/smart_ptr/detail/spinlock_pool.hpp +87 -0
- data/ext/boost/smart_ptr/detail/spinlock_pt.hpp +79 -0
- data/ext/boost/smart_ptr/detail/spinlock_sync.hpp +87 -0
- data/ext/boost/smart_ptr/detail/yield_k.hpp +149 -0
- data/ext/boost/smart_ptr/enable_shared_from_this.hpp +79 -0
- data/ext/boost/smart_ptr/scoped_array.hpp +107 -0
- data/ext/boost/smart_ptr/scoped_ptr.hpp +131 -0
- data/ext/boost/smart_ptr/shared_ptr.hpp +701 -0
- data/ext/boost/smart_ptr/weak_ptr.hpp +230 -0
- data/ext/boost/src/pthread/thread.cpp +115 -203
- data/ext/boost/src/tss_null.cpp +1 -1
- data/ext/boost/static_assert.hpp +14 -4
- data/ext/boost/thread.hpp +7 -2
- data/ext/boost/thread/barrier.hpp +63 -0
- data/ext/boost/thread/detail/force_cast.hpp +39 -0
- data/ext/boost/thread/detail/move.hpp +29 -2
- data/ext/boost/thread/detail/platform.hpp +3 -3
- data/ext/boost/thread/detail/singleton.hpp +59 -0
- data/ext/boost/thread/detail/thread.hpp +496 -0
- data/ext/boost/thread/detail/thread_group.hpp +105 -0
- data/ext/boost/thread/detail/thread_heap_alloc.hpp +23 -0
- data/ext/boost/thread/detail/thread_interruption.hpp +35 -0
- data/ext/boost/thread/detail/tss_hooks.hpp +82 -0
- data/ext/boost/thread/exceptions.hpp +174 -60
- data/ext/boost/thread/future.hpp +1364 -0
- data/ext/boost/thread/locks.hpp +899 -32
- data/ext/boost/thread/once.hpp +4 -0
- data/ext/boost/thread/pthread/condition_variable.hpp +16 -21
- data/ext/boost/thread/pthread/condition_variable_fwd.hpp +37 -3
- data/ext/boost/thread/pthread/mutex.hpp +20 -7
- data/ext/boost/thread/pthread/once.hpp +7 -2
- data/ext/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +5 -1
- data/ext/boost/thread/pthread/recursive_mutex.hpp +22 -5
- data/ext/boost/thread/pthread/shared_mutex.hpp +303 -0
- data/ext/boost/thread/pthread/thread_data.hpp +37 -10
- data/ext/boost/thread/pthread/thread_heap_alloc.hpp +242 -0
- data/ext/boost/thread/pthread/timespec.hpp +11 -3
- data/ext/boost/thread/shared_mutex.hpp +21 -0
- data/ext/boost/thread/thread.hpp +8 -3
- data/ext/boost/thread/thread_time.hpp +4 -0
- data/ext/boost/thread/tss.hpp +106 -13
- data/ext/boost/thread/xtime.hpp +6 -2
- data/ext/boost/throw_exception.hpp +36 -7
- data/ext/boost/token_functions.hpp +1 -1
- data/ext/boost/tokenizer.hpp +1 -1
- data/ext/boost/type_traits/add_pointer.hpp +1 -1
- data/ext/boost/type_traits/add_volatile.hpp +47 -0
- data/ext/boost/type_traits/alignment_of.hpp +29 -1
- data/ext/boost/type_traits/config.hpp +1 -1
- data/ext/boost/type_traits/conversion_traits.hpp +1 -1
- data/ext/boost/type_traits/has_trivial_destructor.hpp +42 -0
- data/ext/boost/type_traits/intrinsics.hpp +88 -1
- data/ext/boost/type_traits/is_abstract.hpp +14 -5
- data/ext/boost/type_traits/is_arithmetic.hpp +8 -0
- data/ext/boost/type_traits/is_array.hpp +3 -2
- data/ext/boost/type_traits/is_base_and_derived.hpp +254 -0
- data/ext/boost/type_traits/is_base_of.hpp +51 -0
- data/ext/boost/type_traits/is_class.hpp +12 -0
- data/ext/boost/type_traits/is_const.hpp +6 -2
- data/ext/boost/type_traits/is_convertible.hpp +14 -2
- data/ext/boost/type_traits/is_enum.hpp +10 -1
- data/ext/boost/type_traits/is_function.hpp +11 -3
- data/ext/boost/type_traits/is_fundamental.hpp +45 -0
- data/ext/boost/type_traits/is_integral.hpp +5 -0
- data/ext/boost/type_traits/is_member_function_pointer.hpp +5 -3
- data/ext/boost/type_traits/is_member_pointer.hpp +4 -2
- data/ext/boost/type_traits/is_pointer.hpp +3 -1
- data/ext/boost/type_traits/is_reference.hpp +4 -2
- data/ext/boost/type_traits/is_signed.hpp +135 -0
- data/ext/boost/type_traits/is_unsigned.hpp +130 -0
- data/ext/boost/type_traits/is_void.hpp +5 -0
- data/ext/boost/type_traits/is_volatile.hpp +4 -2
- data/ext/boost/type_traits/make_unsigned.hpp +137 -0
- data/ext/boost/type_traits/remove_reference.hpp +1 -1
- data/ext/boost/type_traits/type_with_alignment.hpp +106 -1
- data/ext/boost/utility.hpp +2 -1
- data/ext/boost/utility/addressof.hpp +61 -17
- data/ext/boost/utility/binary.hpp +708 -0
- data/ext/boost/utility/enable_if.hpp +2 -2
- data/ext/boost/weak_ptr.hpp +4 -174
- data/ext/common/AbstractSpawnManager.h +110 -0
- data/ext/common/Account.h +175 -0
- data/ext/common/AccountsDatabase.cpp +81 -0
- data/ext/common/AccountsDatabase.h +130 -0
- data/ext/common/AgentBase.cpp +323 -0
- data/ext/common/{Version.h → AgentBase.h} +14 -6
- data/ext/common/AgentsStarter.cpp +154 -0
- data/ext/common/AgentsStarter.h +81 -0
- data/ext/common/AgentsStarter.hpp +619 -0
- data/ext/common/ApplicationPool/Client.h +796 -0
- data/ext/common/{ApplicationPool.h → ApplicationPool/Interface.h} +108 -18
- data/ext/common/ApplicationPool/Pool.h +1315 -0
- data/ext/common/ApplicationPool/Server.h +475 -0
- data/ext/common/BCrypt.cpp +343 -0
- data/ext/common/BCrypt.h +73 -0
- data/ext/common/Blowfish.c +685 -0
- data/ext/common/Blowfish.h +103 -0
- data/ext/common/Constants.h +48 -0
- data/ext/common/EventedClient.h +598 -0
- data/ext/common/EventedMessageServer.h +327 -0
- data/ext/common/EventedServer.h +295 -0
- data/ext/common/Exceptions.h +78 -1
- data/ext/common/FileDescriptor.h +229 -0
- data/ext/common/HelperAgent/BacktracesServer.h +59 -0
- data/ext/common/Logging.cpp +8 -9
- data/ext/common/Logging.h +593 -21
- data/ext/common/LoggingAgent/ChangeNotifier.h +63 -0
- data/ext/common/LoggingAgent/DataStoreId.h +177 -0
- data/ext/common/LoggingAgent/LoggingServer.h +1343 -0
- data/ext/common/LoggingAgent/Main.cpp +278 -0
- data/ext/common/LoggingAgent/RemoteSender.h +457 -0
- data/ext/common/MessageChannel.h +196 -34
- data/ext/common/MessageClient.h +297 -0
- data/ext/common/MessageReadersWriters.h +508 -0
- data/ext/common/MessageServer.h +575 -0
- data/ext/common/PoolOptions.h +279 -117
- data/ext/common/Process.h +255 -0
- data/ext/common/RandomGenerator.h +160 -0
- data/ext/common/ResourceLocator.h +84 -0
- data/ext/common/ServerInstanceDir.h +343 -0
- data/ext/common/Session.h +470 -0
- data/ext/common/SpawnManager.h +256 -201
- data/ext/common/StaticString.h +79 -4
- data/ext/common/StringListCreator.h +2 -2
- data/ext/common/Utils.cpp +385 -397
- data/ext/common/Utils.h +79 -165
- data/ext/common/{Base64.cpp → Utils/Base64.cpp} +0 -0
- data/ext/common/{Base64.h → Utils/Base64.h} +27 -1
- data/ext/common/Utils/BlockingQueue.h +136 -0
- data/ext/common/Utils/BlockingScalar.h +50 -0
- data/ext/common/{CachedFileStat.cpp → Utils/CachedFileStat.cpp} +1 -1
- data/ext/common/{CachedFileStat.h → Utils/CachedFileStat.h} +1 -1
- data/ext/common/{CachedFileStat.hpp → Utils/CachedFileStat.hpp} +1 -1
- data/ext/common/{FileChangeChecker.h → Utils/FileChangeChecker.h} +1 -1
- data/ext/common/Utils/FileHandleGuard.h +81 -0
- data/ext/common/Utils/IOUtils.cpp +754 -0
- data/ext/common/Utils/IOUtils.h +253 -0
- data/ext/common/Utils/MD5.cpp +406 -0
- data/ext/common/Utils/MD5.h +98 -0
- data/ext/common/Utils/MemZeroGuard.h +103 -0
- data/ext/common/Utils/ProcessMetricsCollector.h +462 -0
- data/ext/common/Utils/ScopeGuard.h +72 -0
- data/ext/common/Utils/StrIntUtils.cpp +329 -0
- data/ext/common/Utils/StrIntUtils.h +228 -0
- data/ext/common/{SystemTime.cpp → Utils/SystemTime.cpp} +5 -1
- data/ext/common/Utils/SystemTime.h +201 -0
- data/ext/common/{Timer.h → Utils/Timer.h} +58 -18
- data/ext/common/Utils/VariantMap.h +363 -0
- data/ext/common/Utils/foo.cpp +10 -0
- data/ext/common/Watchdog.cpp +1034 -0
- data/ext/google/COPYING +28 -0
- data/ext/google/ChangeLog +167 -0
- data/ext/google/dense_hash_map +310 -0
- data/ext/google/dense_hash_set +287 -0
- data/ext/google/sparse_hash_map +294 -0
- data/ext/google/sparse_hash_set +275 -0
- data/ext/google/sparsehash/densehashtable.h +1062 -0
- data/ext/google/sparsehash/sparseconfig.h +55 -0
- data/ext/google/sparsehash/sparsehashtable.h +1015 -0
- data/ext/google/sparsetable +1468 -0
- data/ext/google/type_traits.h +250 -0
- data/ext/libev/Changes +302 -0
- data/ext/libev/LICENSE +36 -0
- data/ext/libev/Makefile.am +18 -0
- data/ext/libev/Makefile.in +685 -0
- data/ext/libev/README +58 -0
- data/ext/libev/aclocal.m4 +7549 -0
- data/ext/libev/autogen.sh +6 -0
- data/ext/libev/config.guess +1526 -0
- data/ext/libev/config.h +122 -0
- data/ext/libev/config.h.in +121 -0
- data/ext/libev/config.sub +1658 -0
- data/ext/libev/configure +22156 -0
- data/ext/libev/configure.ac +18 -0
- data/ext/libev/ev++.h +800 -0
- data/ext/libev/ev.c +3694 -0
- data/ext/libev/ev.h +705 -0
- data/ext/libev/ev_epoll.c +228 -0
- data/ext/libev/ev_kqueue.c +196 -0
- data/ext/libev/ev_poll.c +144 -0
- data/ext/libev/ev_port.c +165 -0
- data/ext/libev/ev_select.c +308 -0
- data/ext/libev/ev_vars.h +187 -0
- data/ext/libev/ev_win32.c +153 -0
- data/ext/libev/ev_wrap.h +178 -0
- data/ext/libev/event.c +401 -0
- data/ext/libev/event.h +158 -0
- data/ext/libev/install-sh +294 -0
- data/ext/libev/libev.m4 +38 -0
- data/ext/libev/ltmain.sh +6871 -0
- data/ext/libev/missing +336 -0
- data/ext/libev/mkinstalldirs +111 -0
- data/ext/nginx/Configuration.c +532 -182
- data/ext/nginx/Configuration.h +33 -10
- data/ext/nginx/ContentHandler.c +188 -53
- data/ext/nginx/ContentHandler.h +1 -1
- data/ext/nginx/{HelperServer.cpp → HelperAgent.cpp} +433 -299
- data/ext/nginx/HttpStatusExtractor.h +1 -1
- data/ext/nginx/ScgiRequestParser.h +68 -11
- data/ext/nginx/StaticContentHandler.c +4 -1
- data/ext/nginx/StaticContentHandler.h +1 -1
- data/ext/nginx/config +5 -5
- data/ext/nginx/ngx_http_passenger_module.c +315 -469
- data/ext/nginx/ngx_http_passenger_module.h +8 -17
- data/ext/oxt/backtrace.cpp +49 -41
- data/ext/oxt/backtrace.hpp +1 -1
- data/ext/oxt/detail/backtrace_disabled.hpp +1 -1
- data/ext/oxt/detail/backtrace_enabled.hpp +16 -15
- data/ext/oxt/detail/spin_lock_darwin.hpp +69 -0
- data/ext/oxt/detail/spin_lock_gcc_x86.hpp +3 -4
- data/ext/oxt/detail/spin_lock_portable.hpp +1 -1
- data/ext/oxt/detail/spin_lock_pthreads.hpp +1 -1
- data/ext/oxt/detail/tracable_exception_disabled.hpp +1 -1
- data/ext/oxt/detail/tracable_exception_enabled.hpp +1 -1
- data/ext/oxt/dynamic_thread_group.hpp +195 -0
- data/ext/oxt/macros.hpp +1 -1
- data/ext/oxt/spin_lock.hpp +4 -2
- data/ext/oxt/system_calls.cpp +129 -13
- data/ext/oxt/system_calls.hpp +16 -2
- data/ext/oxt/thread.cpp +1 -1
- data/ext/oxt/thread.hpp +49 -14
- data/ext/oxt/tracable_exception.cpp +5 -5
- data/ext/oxt/tracable_exception.hpp +1 -1
- data/ext/phusion_passenger/extconf.rb +7 -2
- data/ext/phusion_passenger/native_support.c +733 -33
- data/{bin → helper-scripts}/passenger-spawn-server +50 -12
- data/helper-scripts/prespawn +63 -0
- data/lib/phusion_passenger.rb +113 -0
- data/lib/phusion_passenger/abstract_installer.rb +50 -12
- data/lib/phusion_passenger/abstract_request_handler.rb +432 -171
- data/lib/phusion_passenger/abstract_server.rb +125 -122
- data/lib/phusion_passenger/abstract_server_collection.rb +51 -22
- data/lib/phusion_passenger/admin_tools.rb +1 -1
- data/lib/phusion_passenger/admin_tools/memory_stats.rb +299 -0
- data/lib/phusion_passenger/admin_tools/server_instance.rb +334 -0
- data/lib/phusion_passenger/analytics_logger.rb +342 -0
- data/lib/phusion_passenger/{application.rb → app_process.rb} +73 -24
- data/lib/phusion_passenger/classic_rails/application_spawner.rb +344 -0
- data/lib/phusion_passenger/{railz → classic_rails}/cgi_fixed.rb +2 -2
- data/lib/phusion_passenger/{railz → classic_rails}/framework_spawner.rb +75 -98
- data/lib/phusion_passenger/{railz → classic_rails}/request_handler.rb +8 -6
- data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ac_base_extension.rb +65 -0
- data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ac_benchmarking_extension.rb +48 -0
- data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ac_rescue_extension.rb +59 -0
- data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ar_abstract_adapter_extension.rb +54 -0
- data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/as_cache_extension.rb +130 -0
- data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/av_benchmark_helper_extension.rb +47 -0
- data/lib/phusion_passenger/classic_rails_extensions/init.rb +123 -0
- data/lib/phusion_passenger/console_text_template.rb +1 -1
- data/lib/phusion_passenger/constants.rb +9 -5
- data/lib/phusion_passenger/debug_logging.rb +104 -0
- data/lib/phusion_passenger/dependencies.rb +187 -4
- data/lib/phusion_passenger/exceptions.rb +4 -4
- data/lib/phusion_passenger/html_template.rb +6 -8
- data/lib/phusion_passenger/message_channel.rb +137 -21
- data/lib/phusion_passenger/message_client.rb +173 -0
- data/lib/phusion_passenger/native_support.rb +108 -0
- data/lib/phusion_passenger/packaging.rb +82 -13
- data/lib/phusion_passenger/platform_info.rb +84 -475
- data/lib/phusion_passenger/platform_info/apache.rb +329 -0
- data/lib/phusion_passenger/platform_info/binary_compatibility.rb +187 -0
- data/lib/phusion_passenger/platform_info/compiler.rb +154 -0
- data/lib/phusion_passenger/{events.rb → platform_info/curl.rb} +26 -23
- data/lib/phusion_passenger/platform_info/documentation_tools.rb +35 -0
- data/lib/phusion_passenger/platform_info/linux.rb +77 -0
- data/lib/phusion_passenger/platform_info/operating_system.rb +51 -0
- data/lib/phusion_passenger/platform_info/ruby.rb +198 -0
- data/lib/phusion_passenger/platform_info/zlib.rb +38 -0
- data/lib/phusion_passenger/plugin.rb +96 -0
- data/lib/phusion_passenger/public_api.rb +112 -0
- data/lib/phusion_passenger/rack/application_spawner.rb +146 -71
- data/lib/phusion_passenger/rack/request_handler.rb +36 -13
- data/lib/phusion_passenger/rails3_extensions/init.rb +204 -0
- data/lib/phusion_passenger/simple_benchmarking.rb +1 -1
- data/lib/phusion_passenger/spawn_manager.rb +137 -141
- data/lib/phusion_passenger/standalone/app_finder.rb +153 -0
- data/lib/phusion_passenger/standalone/command.rb +237 -0
- data/lib/phusion_passenger/standalone/config_file.rb +119 -0
- data/lib/phusion_passenger/standalone/help_command.rb +57 -0
- data/lib/phusion_passenger/standalone/main.rb +101 -0
- data/lib/phusion_passenger/standalone/package_runtime_command.rb +92 -0
- data/lib/phusion_passenger/standalone/runtime_installer.rb +466 -0
- data/lib/phusion_passenger/standalone/start_command.rb +510 -0
- data/lib/phusion_passenger/standalone/status_command.rb +62 -0
- data/lib/phusion_passenger/standalone/stop_command.rb +74 -0
- data/lib/phusion_passenger/standalone/utils.rb +42 -0
- data/lib/phusion_passenger/standalone/version_command.rb +42 -0
- data/lib/phusion_passenger/templates/framework_init_error.html.erb +1 -1
- data/lib/phusion_passenger/templates/standalone/cannot_write_to_dir.txt.erb +11 -0
- data/lib/phusion_passenger/templates/standalone/config.erb +69 -0
- data/lib/phusion_passenger/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +17 -0
- data/lib/phusion_passenger/templates/standalone/run_installer_as_root.txt.erb +8 -0
- data/lib/phusion_passenger/templates/standalone/welcome.txt.erb +8 -0
- data/lib/phusion_passenger/templates/standalone_default_root/index.html +1 -0
- data/lib/phusion_passenger/templates/version_not_found.html.erb +2 -2
- data/lib/phusion_passenger/utils.rb +476 -125
- data/lib/phusion_passenger/utils/file_system_watcher.rb +186 -0
- data/lib/phusion_passenger/utils/hosts_file_parser.rb +130 -0
- data/lib/phusion_passenger/utils/tmpdir.rb +70 -0
- data/lib/phusion_passenger/utils/unseekable_socket.rb +196 -0
- data/lib/phusion_passenger/wsgi/application_spawner.rb +24 -20
- data/lib/phusion_passenger/wsgi/request_handler.py +1 -1
- data/misc/copy_boost_headers.rb +36 -9
- data/misc/find_owner_pipe_leaks.rb +1 -1
- data/misc/render_error_pages.rb +1 -1
- data/misc/union_station_gateway.crt +32 -0
- data/test/config.yml.example +24 -13
- data/test/cxx/ApplicationPool_PoolTest.cpp +33 -0
- data/test/cxx/ApplicationPool_PoolTestCases.cpp +1029 -0
- data/test/cxx/ApplicationPool_ServerTest.cpp +308 -0
- data/test/cxx/ApplicationPool_Server_PoolTest.cpp +80 -0
- data/test/{Base64Test.cpp → cxx/Base64Test.cpp} +4 -2
- data/test/{CachedFileStatTest.cpp → cxx/CachedFileStatTest.cpp} +3 -3
- data/test/{CxxTestMain.cpp → cxx/CxxTestMain.cpp} +6 -27
- data/test/cxx/EventedClientTest.cpp +386 -0
- data/test/{FileChangeCheckerTest.cpp → cxx/FileChangeCheckerTest.cpp} +3 -5
- data/test/cxx/FileDescriptorTest.cpp +69 -0
- data/test/{HttpStatusExtractorTest.cpp → cxx/HttpStatusExtractorTest.cpp} +1 -1
- data/test/cxx/IOUtilsTest.cpp +398 -0
- data/test/cxx/LoggingTest.cpp +914 -0
- data/test/cxx/MessageChannelTest.cpp +672 -0
- data/test/cxx/MessageReadersWritersTest.cpp +574 -0
- data/test/cxx/MessageServerTest.cpp +383 -0
- data/test/{PoolOptionsTest.cpp → cxx/PoolOptionsTest.cpp} +2 -3
- data/test/{ScgiRequestParserTest.cpp → cxx/ScgiRequestParserTest.cpp} +53 -1
- data/test/cxx/ServerInstanceDirTest.cpp +186 -0
- data/test/cxx/SpawnManagerTest.cpp +161 -0
- data/test/cxx/StaticStringTest.cpp +86 -0
- data/test/{SystemTimeTest.cpp → cxx/SystemTimeTest.cpp} +2 -2
- data/test/cxx/TestSupport.cpp +166 -0
- data/test/cxx/TestSupport.h +254 -0
- data/test/cxx/UtilsTest.cpp +521 -0
- data/test/cxx/VariantMapTest.cpp +179 -0
- data/test/integration_tests/apache2_tests.rb +198 -127
- data/test/integration_tests/cgi_environment_spec.rb +26 -0
- data/test/integration_tests/mycook_spec.rb +2 -28
- data/test/integration_tests/nginx_tests.rb +125 -16
- data/test/integration_tests/spec_helper.rb +19 -0
- data/test/oxt/backtrace_test.cpp +19 -59
- data/test/oxt/counter.hpp +55 -0
- data/test/oxt/dynamic_thread_group_test.cpp +131 -0
- data/test/oxt/oxt_test_main.cpp +2 -2
- data/test/oxt/spin_lock_test.cpp +59 -0
- data/test/oxt/syscall_interruption_test.cpp +1 -1
- data/test/ruby/abstract_request_handler_spec.rb +346 -25
- data/test/ruby/abstract_server_collection_spec.rb +4 -3
- data/test/ruby/abstract_server_spec.rb +37 -27
- data/test/ruby/admin_tools_spec.rb +362 -0
- data/test/ruby/analytics_logger_spec.rb +253 -0
- data/test/ruby/{application_spec.rb → app_process_spec.rb} +14 -14
- data/test/ruby/classic_rails/application_spawner_spec.rb +89 -0
- data/test/ruby/classic_rails/framework_spawner_spec.rb +92 -0
- data/test/ruby/debug_logging_spec.rb +141 -0
- data/test/ruby/message_channel_spec.rb +51 -25
- data/test/ruby/rack/application_spawner_spec.rb +99 -82
- data/test/ruby/shared/abstract_server_spec.rb +23 -0
- data/test/ruby/shared/rails/analytics_logging_extensions_spec.rb +375 -0
- data/test/ruby/shared/spawners/classic_rails/framework_spawner_spec.rb +38 -0
- data/test/ruby/shared/spawners/classic_rails/lack_of_rails_gem_version_spec.rb +19 -0
- data/test/ruby/shared/spawners/classic_rails/spawner_spec.rb +15 -0
- data/test/ruby/shared/spawners/non_preloading_spawner_spec.rb +27 -0
- data/test/ruby/shared/spawners/preloading_spawner_spec.rb +29 -0
- data/test/ruby/shared/spawners/reload_all_spec.rb +36 -0
- data/test/ruby/shared/spawners/reload_single_spec.rb +52 -0
- data/test/ruby/shared/spawners/spawn_server_spec.rb +28 -0
- data/test/ruby/shared/spawners/spawner_spec.rb +273 -0
- data/test/ruby/shared/utils/pseudo_io_spec.rb +60 -0
- data/test/ruby/spawn_manager_spec.rb +104 -175
- data/test/ruby/spec_helper.rb +104 -0
- data/test/ruby/utils/file_system_watcher_spec.rb +221 -0
- data/test/ruby/utils/hosts_file_parser.rb +258 -0
- data/test/ruby/utils/unseekable_socket_spec.rb +66 -0
- data/test/ruby/utils_spec.rb +410 -59
- data/test/ruby/wsgi/application_spawner_spec.rb +16 -20
- data/test/stub/apache2/httpd.conf.erb +11 -6
- data/test/stub/message_channel.rb +3 -1
- data/test/stub/message_channel_2.rb +3 -1
- data/test/stub/message_channel_3.rb +5 -3
- data/test/stub/nginx/nginx.conf.erb +3 -2
- data/test/stub/rails_apps/1.2/empty/Rakefile +10 -0
- data/test/stub/rails_apps/1.2/empty/app/controllers/application.rb +7 -0
- data/test/stub/rails_apps/{foobar → 1.2/empty}/app/helpers/application_helper.rb +0 -0
- data/test/stub/rails_apps/{mycook → 1.2/empty}/config/boot.rb +3 -3
- data/test/stub/rails_apps/1.2/empty/config/database.yml +31 -0
- data/test/stub/rails_apps/1.2/empty/config/environment.rb +66 -0
- data/test/stub/rails_apps/1.2/empty/config/environments/development.rb +21 -0
- data/test/stub/rails_apps/{foobar → 1.2/empty}/config/environments/production.rb +0 -0
- data/test/stub/rails_apps/1.2/empty/config/environments/staging.rb +18 -0
- data/test/stub/rails_apps/1.2/empty/config/environments/test.rb +19 -0
- data/test/stub/rails_apps/1.2/empty/config/routes.rb +23 -0
- data/test/stub/rails_apps/1.2/empty/doc/README_FOR_APP +2 -0
- data/test/stub/rails_apps/{mycook → 1.2/empty}/public/404.html +0 -0
- data/test/stub/rails_apps/1.2/empty/public/500.html +30 -0
- data/test/stub/rails_apps/1.2/empty/public/dispatch.cgi +10 -0
- data/test/stub/rails_apps/1.2/empty/public/dispatch.fcgi +24 -0
- data/test/stub/rails_apps/1.2/empty/public/dispatch.rb +10 -0
- data/test/stub/rails_apps/{mycook → 1.2/empty}/public/favicon.ico +0 -0
- data/test/stub/rails_apps/{mycook → 1.2/empty}/public/images/rails.png +0 -0
- data/test/stub/rails_apps/1.2/empty/public/robots.txt +1 -0
- data/test/stub/rails_apps/1.2/empty/script/about +3 -0
- data/test/stub/rails_apps/1.2/empty/script/breakpointer +3 -0
- data/test/stub/rails_apps/1.2/empty/script/console +3 -0
- data/test/stub/rails_apps/1.2/empty/script/destroy +3 -0
- data/test/stub/rails_apps/1.2/empty/script/generate +3 -0
- data/test/stub/rails_apps/1.2/empty/script/performance/benchmarker +3 -0
- data/test/stub/rails_apps/1.2/empty/script/performance/profiler +3 -0
- data/test/stub/rails_apps/1.2/empty/script/plugin +3 -0
- data/test/stub/rails_apps/1.2/empty/script/process/inspector +3 -0
- data/test/stub/rails_apps/1.2/empty/script/process/reaper +3 -0
- data/test/stub/rails_apps/1.2/empty/script/process/spawner +3 -0
- data/test/stub/rails_apps/1.2/empty/script/runner +3 -0
- data/test/stub/rails_apps/1.2/empty/script/server +3 -0
- data/test/stub/rails_apps/1.2/empty/test/test_helper.rb +28 -0
- data/test/stub/rails_apps/2.0/empty/Rakefile +10 -0
- data/test/stub/rails_apps/2.0/empty/app/controllers/application.rb +10 -0
- data/test/stub/rails_apps/{mycook → 2.0/empty}/app/helpers/application_helper.rb +0 -0
- data/test/stub/rails_apps/{foobar → 2.0/empty}/config/boot.rb +3 -3
- data/test/stub/rails_apps/2.0/empty/config/database.yml +31 -0
- data/test/stub/rails_apps/2.0/empty/config/environment.rb +59 -0
- data/test/stub/rails_apps/{mycook → 2.0/empty}/config/environments/development.rb +1 -1
- data/test/stub/rails_apps/2.0/empty/config/environments/production.rb +18 -0
- data/test/stub/rails_apps/2.0/empty/config/environments/staging.rb +18 -0
- data/test/stub/rails_apps/2.0/empty/config/environments/test.rb +22 -0
- data/test/stub/rails_apps/{foobar → 2.0/empty}/config/initializers/inflections.rb +0 -0
- data/test/stub/rails_apps/{foobar → 2.0/empty}/config/initializers/mime_types.rb +0 -0
- data/test/stub/rails_apps/{foobar → 2.0/empty}/config/routes.rb +0 -0
- data/test/stub/rails_apps/2.0/empty/doc/README_FOR_APP +2 -0
- data/test/stub/rails_apps/2.0/empty/public/404.html +30 -0
- data/test/stub/rails_apps/{mycook → 2.0/empty}/public/422.html +0 -0
- data/test/stub/rails_apps/{mycook → 2.0/empty}/public/500.html +0 -0
- data/test/stub/rails_apps/2.0/empty/public/dispatch.cgi +10 -0
- data/test/stub/rails_apps/2.0/empty/public/dispatch.fcgi +24 -0
- data/test/stub/rails_apps/2.0/empty/public/dispatch.rb +10 -0
- data/test/stub/rails_apps/2.0/empty/public/favicon.ico +0 -0
- data/test/stub/rails_apps/2.0/empty/public/images/rails.png +0 -0
- data/test/stub/rails_apps/{mycook → 2.0/empty}/public/robots.txt +0 -0
- data/test/stub/rails_apps/2.0/empty/script/about +3 -0
- data/test/stub/rails_apps/2.0/empty/script/console +3 -0
- data/test/stub/rails_apps/2.0/empty/script/destroy +3 -0
- data/test/stub/rails_apps/2.0/empty/script/generate +3 -0
- data/test/stub/rails_apps/2.0/empty/script/performance/benchmarker +3 -0
- data/test/stub/rails_apps/2.0/empty/script/performance/profiler +3 -0
- data/test/stub/rails_apps/2.0/empty/script/performance/request +3 -0
- data/test/stub/rails_apps/2.0/empty/script/plugin +3 -0
- data/test/stub/rails_apps/2.0/empty/script/process/inspector +3 -0
- data/test/stub/rails_apps/2.0/empty/script/process/reaper +3 -0
- data/test/stub/rails_apps/2.0/empty/script/process/spawner +3 -0
- data/test/stub/rails_apps/2.0/empty/script/runner +3 -0
- data/test/stub/rails_apps/2.0/empty/script/server +3 -0
- data/test/stub/rails_apps/2.0/empty/test/test_helper.rb +38 -0
- data/test/stub/rails_apps/2.2/empty/Rakefile +10 -0
- data/test/stub/rails_apps/2.2/empty/app/controllers/application.rb +15 -0
- data/test/stub/rails_apps/2.2/empty/app/helpers/application_helper.rb +3 -0
- data/test/stub/rails_apps/2.2/empty/config/boot.rb +109 -0
- data/test/stub/rails_apps/2.2/empty/config/database.yml +31 -0
- data/test/stub/rails_apps/2.2/empty/config/environment.rb +75 -0
- data/test/stub/rails_apps/{foobar → 2.2/empty}/config/environments/development.rb +0 -0
- data/test/stub/rails_apps/2.2/empty/config/environments/production.rb +24 -0
- data/test/stub/rails_apps/2.2/empty/config/environments/staging.rb +24 -0
- data/test/stub/rails_apps/2.2/empty/config/environments/test.rb +22 -0
- data/test/stub/rails_apps/2.2/empty/config/initializers/inflections.rb +10 -0
- data/test/stub/rails_apps/{mycook → 2.2/empty}/config/initializers/mime_types.rb +0 -0
- data/test/stub/rails_apps/2.2/empty/config/initializers/new_rails_defaults.rb +17 -0
- data/test/stub/rails_apps/2.2/empty/config/locales/en.yml +5 -0
- data/test/stub/rails_apps/2.2/empty/config/routes.rb +43 -0
- data/test/stub/rails_apps/2.2/empty/doc/README_FOR_APP +5 -0
- data/test/stub/rails_apps/2.2/empty/public/404.html +30 -0
- data/test/stub/rails_apps/2.2/empty/public/422.html +30 -0
- data/test/stub/rails_apps/2.2/empty/public/500.html +33 -0
- data/test/stub/rails_apps/2.2/empty/public/dispatch.cgi +10 -0
- data/test/stub/rails_apps/2.2/empty/public/dispatch.fcgi +24 -0
- data/test/stub/rails_apps/2.2/empty/public/dispatch.rb +10 -0
- data/test/stub/rails_apps/2.2/empty/public/favicon.ico +0 -0
- data/test/stub/rails_apps/2.2/empty/public/images/rails.png +0 -0
- data/test/stub/rails_apps/2.2/empty/public/robots.txt +5 -0
- data/test/stub/rails_apps/2.2/empty/script/about +4 -0
- data/test/stub/rails_apps/2.2/empty/script/console +3 -0
- data/test/stub/rails_apps/2.2/empty/script/dbconsole +3 -0
- data/test/stub/rails_apps/2.2/empty/script/destroy +3 -0
- data/test/stub/rails_apps/2.2/empty/script/generate +3 -0
- data/test/stub/rails_apps/2.2/empty/script/performance/benchmarker +3 -0
- data/test/stub/rails_apps/2.2/empty/script/performance/profiler +3 -0
- data/test/stub/rails_apps/2.2/empty/script/performance/request +3 -0
- data/test/stub/rails_apps/2.2/empty/script/plugin +3 -0
- data/test/stub/rails_apps/2.2/empty/script/process/inspector +3 -0
- data/test/stub/rails_apps/2.2/empty/script/process/reaper +3 -0
- data/test/stub/rails_apps/2.2/empty/script/process/spawner +3 -0
- data/test/stub/rails_apps/2.2/empty/script/runner +3 -0
- data/test/stub/rails_apps/2.2/empty/script/server +3 -0
- data/test/stub/rails_apps/2.2/empty/test/performance/browsing_test.rb +9 -0
- data/test/stub/rails_apps/2.2/empty/test/test_helper.rb +38 -0
- data/test/stub/rails_apps/2.3/empty/Rakefile +10 -0
- data/test/stub/rails_apps/2.3/empty/app/controllers/application_controller.rb +10 -0
- data/test/stub/rails_apps/2.3/empty/app/helpers/application_helper.rb +3 -0
- data/test/stub/rails_apps/2.3/empty/config/boot.rb +110 -0
- data/test/stub/rails_apps/2.3/empty/config/database.yml +31 -0
- data/test/stub/rails_apps/2.3/empty/config/environment.rb +41 -0
- data/test/stub/rails_apps/2.3/empty/config/environments/development.rb +17 -0
- data/test/stub/rails_apps/2.3/empty/config/environments/production.rb +28 -0
- data/test/stub/rails_apps/2.3/empty/config/environments/staging.rb +28 -0
- data/test/stub/rails_apps/2.3/empty/config/environments/test.rb +28 -0
- data/test/stub/rails_apps/2.3/empty/config/initializers/backtrace_silencers.rb +7 -0
- data/test/stub/rails_apps/2.3/empty/config/initializers/inflections.rb +10 -0
- data/test/stub/rails_apps/2.3/empty/config/initializers/mime_types.rb +5 -0
- data/test/stub/rails_apps/2.3/empty/config/initializers/new_rails_defaults.rb +21 -0
- data/test/stub/rails_apps/2.3/empty/config/initializers/session_store.rb +15 -0
- data/test/stub/rails_apps/2.3/empty/config/locales/en.yml +5 -0
- data/test/stub/rails_apps/2.3/empty/config/routes.rb +43 -0
- data/test/stub/rails_apps/2.3/empty/db/seeds.rb +7 -0
- data/test/stub/rails_apps/2.3/empty/doc/README_FOR_APP +2 -0
- data/test/stub/rails_apps/2.3/empty/public/404.html +30 -0
- data/test/stub/rails_apps/2.3/empty/public/422.html +30 -0
- data/test/stub/rails_apps/2.3/empty/public/500.html +30 -0
- data/test/stub/rails_apps/2.3/empty/public/favicon.ico +0 -0
- data/test/stub/rails_apps/2.3/empty/public/images/rails.png +0 -0
- data/test/stub/rails_apps/2.3/empty/public/robots.txt +5 -0
- data/test/stub/rails_apps/2.3/empty/script/about +4 -0
- data/test/stub/rails_apps/2.3/empty/script/console +3 -0
- data/test/stub/rails_apps/2.3/empty/script/dbconsole +3 -0
- data/test/stub/rails_apps/2.3/empty/script/destroy +3 -0
- data/test/stub/rails_apps/2.3/empty/script/generate +3 -0
- data/test/stub/rails_apps/2.3/empty/script/performance/benchmarker +3 -0
- data/test/stub/rails_apps/2.3/empty/script/performance/profiler +3 -0
- data/test/stub/rails_apps/2.3/empty/script/plugin +3 -0
- data/test/stub/rails_apps/2.3/empty/script/runner +3 -0
- data/test/stub/rails_apps/2.3/empty/script/server +3 -0
- data/test/stub/rails_apps/2.3/empty/test/performance/browsing_test.rb +9 -0
- data/test/stub/rails_apps/2.3/empty/test/test_helper.rb +38 -0
- data/test/stub/rails_apps/2.3/foobar/Rakefile +10 -0
- data/test/stub/rails_apps/{foobar/app/controllers/application.rb → 2.3/foobar/app/controllers/application_controller.rb} +0 -0
- data/test/stub/rails_apps/{foobar → 2.3/foobar}/app/controllers/bar_controller_1.rb +0 -0
- data/test/stub/rails_apps/{foobar → 2.3/foobar}/app/controllers/bar_controller_2.rb +0 -0
- data/test/stub/rails_apps/{foobar → 2.3/foobar}/app/controllers/foo_controller.rb +0 -0
- data/test/stub/rails_apps/2.3/foobar/app/helpers/application_helper.rb +3 -0
- data/test/stub/rails_apps/2.3/foobar/config/boot.rb +110 -0
- data/test/stub/rails_apps/{foobar → 2.3/foobar}/config/database.yml +0 -0
- data/test/stub/rails_apps/{foobar → 2.3/foobar}/config/environment.rb +1 -1
- data/test/stub/rails_apps/2.3/foobar/config/environments/development.rb +17 -0
- data/test/stub/rails_apps/2.3/foobar/config/environments/production.rb +18 -0
- data/test/stub/rails_apps/2.3/foobar/config/environments/staging.rb +18 -0
- data/test/stub/rails_apps/{mycook → 2.3/foobar}/config/initializers/inflections.rb +0 -0
- data/test/stub/rails_apps/2.3/foobar/config/initializers/mime_types.rb +5 -0
- data/test/stub/rails_apps/2.3/foobar/config/routes.rb +35 -0
- data/test/stub/rails_apps/2.3/foobar/script/about +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/console +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/dbconsole +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/destroy +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/generate +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/performance/benchmarker +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/performance/profiler +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/performance/request +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/plugin +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/process/inspector +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/process/reaper +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/process/spawner +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/runner +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/server +3 -0
- data/test/stub/rails_apps/2.3/mycook/Rakefile +10 -0
- data/test/stub/rails_apps/{mycook/app/controllers/application.rb → 2.3/mycook/app/controllers/application_controller.rb} +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/controllers/recipes_controller.rb +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/controllers/uploads_controller.rb +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/controllers/welcome_controller.rb +0 -0
- data/test/stub/rails_apps/2.3/mycook/app/helpers/application_helper.rb +3 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/layouts/default.rhtml +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/recipes/create.rhtml +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/recipes/index.rhtml +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/recipes/new.rhtml +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/uploads/index.rhtml +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/uploads/new.html.erb +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/welcome/cached.rhtml +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/welcome/index.rhtml +0 -0
- data/test/stub/rails_apps/2.3/mycook/config/boot.rb +110 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/config/database.yml +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/config/environment.rb +1 -1
- data/test/stub/rails_apps/2.3/mycook/config/environments/development.rb +18 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/config/environments/production.rb +0 -0
- data/test/stub/rails_apps/2.3/mycook/config/initializers/inflections.rb +10 -0
- data/test/stub/rails_apps/2.3/mycook/config/initializers/mime_types.rb +5 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/config/routes.rb +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/log/useless.txt +0 -0
- data/test/stub/rails_apps/2.3/mycook/public/404.html +30 -0
- data/test/stub/rails_apps/2.3/mycook/public/422.html +30 -0
- data/test/stub/rails_apps/2.3/mycook/public/500.html +30 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/dispatch.cgi +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/dispatch.fcgi +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/dispatch.rb +1 -1
- data/test/stub/rails_apps/2.3/mycook/public/favicon.ico +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/images/angrywizard.gif +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/images/cookbook.gif +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/images/header.png +0 -0
- data/test/stub/rails_apps/2.3/mycook/public/images/rails.png +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/javascripts/application.js +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/javascripts/controls.js +73 -73
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/javascripts/dragdrop.js +166 -165
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/javascripts/effects.js +174 -166
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/javascripts/prototype.js +362 -267
- data/test/stub/rails_apps/2.3/mycook/public/robots.txt +5 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/uploads.html +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/welcome/cached.html +0 -0
- data/test/stub/rails_apps/2.3/mycook/script/about +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/console +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/dbconsole +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/destroy +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/generate +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/performance/benchmarker +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/performance/profiler +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/performance/request +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/plugin +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/process/inspector +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/process/reaper +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/process/spawner +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/runner +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/server +3 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/sites/some.site/public/uploads.html +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/sites/some.site/public/welcome/cached.html +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/tmp/cache/useless.txt +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/tmp/pids/useless.txt +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/tmp/sessions/useless.txt +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/tmp/sockets/useless.txt +0 -0
- data/test/stub/rails_apps/3.0/empty/Gemfile +22 -0
- data/test/stub/rails_apps/3.0/empty/Rakefile +10 -0
- data/test/stub/rails_apps/3.0/empty/app/controllers/application_controller.rb +4 -0
- data/test/stub/rails_apps/3.0/empty/app/helpers/application_helper.rb +2 -0
- data/test/stub/rails_apps/3.0/empty/app/views/layouts/application.html.erb +14 -0
- data/test/stub/rails_apps/3.0/empty/config.ru +4 -0
- data/test/stub/rails_apps/3.0/empty/config/application.rb +48 -0
- data/test/stub/rails_apps/3.0/empty/config/boot.rb +13 -0
- data/test/stub/rails_apps/3.0/empty/config/database.yml +22 -0
- data/test/stub/rails_apps/3.0/empty/config/environment.rb +5 -0
- data/test/stub/rails_apps/3.0/empty/config/environments/development.rb +19 -0
- data/test/stub/rails_apps/3.0/empty/config/environments/production.rb +48 -0
- data/test/stub/rails_apps/3.0/empty/config/environments/test.rb +32 -0
- data/test/stub/rails_apps/3.0/empty/config/initializers/backtrace_silencers.rb +7 -0
- data/test/stub/rails_apps/3.0/empty/config/initializers/inflections.rb +10 -0
- data/test/stub/rails_apps/3.0/empty/config/initializers/mime_types.rb +5 -0
- data/test/stub/rails_apps/3.0/empty/config/initializers/passenger.rb +1 -0
- data/test/stub/rails_apps/3.0/empty/config/initializers/secret_token.rb +7 -0
- data/test/stub/rails_apps/3.0/empty/config/initializers/session_store.rb +8 -0
- data/test/stub/rails_apps/3.0/empty/config/locales/en.yml +5 -0
- data/test/stub/rails_apps/3.0/empty/config/routes.rb +58 -0
- data/test/stub/rails_apps/3.0/empty/db/seeds.rb +7 -0
- data/test/stub/rails_apps/3.0/empty/doc/README_FOR_APP +2 -0
- data/test/stub/rails_apps/3.0/empty/log/development.log +3 -0
- data/test/stub/rails_apps/3.0/empty/public/404.html +26 -0
- data/test/stub/rails_apps/3.0/empty/public/422.html +26 -0
- data/test/stub/rails_apps/3.0/empty/public/500.html +26 -0
- data/test/stub/rails_apps/3.0/empty/public/favicon.ico +0 -0
- data/test/stub/rails_apps/3.0/empty/public/index.html +279 -0
- data/test/stub/rails_apps/3.0/empty/public/robots.txt +5 -0
- data/test/stub/rails_apps/3.0/empty/script/rails +9 -0
- data/test/stub/rails_apps/3.0/empty/test/performance/browsing_test.rb +9 -0
- data/test/stub/rails_apps/3.0/empty/test/test_helper.rb +13 -0
- data/test/stub/spawn_server.rb +4 -2
- data/test/stub/vendor_rails/minimal/actionpack/lib/action_controller.rb +3 -0
- data/test/stub/vendor_rails/minimal/railties/lib/initializer.rb +7 -2
- data/test/support/apache2_controller.rb +10 -2
- data/test/support/nginx_controller.rb +3 -2
- data/test/support/test_helper.rb +282 -46
- data/test/{support → tut}/tut.h +6 -0
- data/test/{support → tut}/tut_reporter.h +0 -0
- metadata +824 -266
- data/benchmark/ApplicationPool.cpp +0 -52
- data/benchmark/accept_vs_socketpair_vs_named_pipes.rb +0 -126
- data/benchmark/dispatcher.rb +0 -42
- data/benchmark/overhead_of_password_checking.rb +0 -81
- data/benchmark/socket_connections_vs_persistent_pipe.rb +0 -99
- data/benchmark/unix_sockets_vs_pipes.rb +0 -83
- data/ext/boost/LICENSE.TXT +0 -23
- data/ext/boost/VERSION.TXT +0 -1
- data/ext/boost/detail/sp_counted_base.hpp +0 -81
- data/ext/boost/src/pthread/exceptions.cpp +0 -146
- data/ext/boost/src/win32/exceptions.cpp +0 -124
- data/ext/boost/src/win32/thread.cpp +0 -629
- data/ext/boost/src/win32/timeconv.inl +0 -130
- data/ext/boost/src/win32/tss_dll.cpp +0 -72
- data/ext/boost/src/win32/tss_pe.cpp +0 -269
- data/ext/boost/thread/pthread/thread.hpp +0 -339
- data/ext/boost/thread/pthread/tss.hpp +0 -103
- data/ext/common/Application.h +0 -511
- data/ext/common/ApplicationPoolServer.h +0 -794
- data/ext/common/ApplicationPoolServerExecutable.cpp +0 -743
- data/ext/common/ApplicationPoolStatusReporter.h +0 -336
- data/ext/common/DummySpawnManager.h +0 -108
- data/ext/common/StandardApplicationPool.h +0 -821
- data/ext/common/SystemTime.h +0 -88
- data/lib/phusion_passenger/admin_tools/control_process.rb +0 -150
- data/lib/phusion_passenger/railz/application_spawner.rb +0 -463
- data/lib/phusion_passenger/templates/invalid_app_root.html.erb +0 -9
- data/test/ApplicationPoolServerTest.cpp +0 -114
- data/test/ApplicationPoolServer_ApplicationPoolTest.cpp +0 -33
- data/test/ApplicationPoolTest.cpp +0 -599
- data/test/MessageChannelTest.cpp +0 -320
- data/test/SpawnManagerTest.cpp +0 -64
- data/test/StandardApplicationPoolTest.cpp +0 -27
- data/test/StaticStringTest.cpp +0 -51
- data/test/UtilsTest.cpp +0 -257
- data/test/ruby/rails/application_spawner_spec.rb +0 -159
- data/test/ruby/rails/framework_spawner_spec.rb +0 -133
- data/test/ruby/rails/minimal_spawner_spec.rb +0 -93
- data/test/ruby/rails/spawner_error_handling_spec.rb +0 -107
- data/test/ruby/rails/spawner_privilege_lowering_spec.rb +0 -97
- data/test/ruby/spawn_server_spec.rb +0 -26
- data/test/stub/MessageServer.dSYM/Contents/Info.plist +0 -25
- data/test/stub/MessageServer.dSYM/Contents/Resources/DWARF/MessageServer +0 -0
- data/test/support/Support.cpp +0 -84
- data/test/support/Support.h +0 -118
- data/test/support/config.rb +0 -38
- data/test/support/run_rspec_tests.rb +0 -10
@@ -0,0 +1,62 @@
|
|
1
|
+
# Phusion Passenger - http://www.modrails.com/
|
2
|
+
# Copyright (c) 2010 Phusion
|
3
|
+
#
|
4
|
+
# "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be included in
|
14
|
+
# all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
+
# THE SOFTWARE.
|
23
|
+
require 'phusion_passenger/standalone/command'
|
24
|
+
|
25
|
+
module PhusionPassenger
|
26
|
+
module Standalone
|
27
|
+
|
28
|
+
class StatusCommand < Command
|
29
|
+
def self.description
|
30
|
+
return "Show the status of a running Passenger Standalone instance."
|
31
|
+
end
|
32
|
+
|
33
|
+
def run
|
34
|
+
parse_options!("status") do |opts|
|
35
|
+
opts.on("-p", "--port NUMBER", Integer,
|
36
|
+
wrap_desc("The port number of a Phusion Passenger Standalone instance (default: #{@options[:port]})")) do |value|
|
37
|
+
@options[:port] = value
|
38
|
+
end
|
39
|
+
opts.on("--pid-file FILE", String,
|
40
|
+
wrap_desc("PID file of a running Phusion Passenger Standalone instance.")) do |value|
|
41
|
+
@options[:pid_file] = value
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
determine_various_resource_locations(false)
|
46
|
+
create_nginx_controller
|
47
|
+
begin
|
48
|
+
running = @nginx.running?
|
49
|
+
pid = @nginx.pid
|
50
|
+
rescue SystemCallError, IOError
|
51
|
+
running = false
|
52
|
+
end
|
53
|
+
if running
|
54
|
+
puts "Phusion Passenger Standalone is running on PID #{pid}, according to PID file #{@options[:pid_file]}"
|
55
|
+
else
|
56
|
+
puts "Phusion Passenger Standalone is not running, according to PID file #{@options[:pid_file]}"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# Phusion Passenger - http://www.modrails.com/
|
2
|
+
# Copyright (c) 2010 Phusion
|
3
|
+
#
|
4
|
+
# "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be included in
|
14
|
+
# all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
+
# THE SOFTWARE.
|
23
|
+
require 'phusion_passenger/standalone/command'
|
24
|
+
|
25
|
+
module PhusionPassenger
|
26
|
+
module Standalone
|
27
|
+
|
28
|
+
class StopCommand < Command
|
29
|
+
def self.description
|
30
|
+
return "Stop a running Phusion Passenger Standalone instance."
|
31
|
+
end
|
32
|
+
|
33
|
+
def run
|
34
|
+
parse_options!("stop") do |opts|
|
35
|
+
opts.on("-p", "--port NUMBER", Integer,
|
36
|
+
wrap_desc("The port number of a Phusion Passenger Standalone instance (default: #{@options[:port]})")) do |value|
|
37
|
+
@options[:port] = value
|
38
|
+
end
|
39
|
+
opts.on("--pid-file FILE", String,
|
40
|
+
wrap_desc("PID file of a running Phusion Passenger Standalone instance.")) do |value|
|
41
|
+
@options[:pid_file] = value
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
determine_various_resource_locations(false)
|
46
|
+
create_nginx_controller
|
47
|
+
begin
|
48
|
+
running = @nginx.running?
|
49
|
+
rescue SystemCallError, IOError
|
50
|
+
running = false
|
51
|
+
end
|
52
|
+
if running
|
53
|
+
@nginx.stop
|
54
|
+
else
|
55
|
+
STDERR.puts "According to the PID file '#{@options[:pid_file]}', " <<
|
56
|
+
"Phusion Passenger Standalone doesn't seem to be running."
|
57
|
+
STDERR.puts
|
58
|
+
STDERR.puts "If you know that Phusion Passenger Standalone *is* running then one of these"
|
59
|
+
STDERR.puts "might be the cause of this error:"
|
60
|
+
STDERR.puts
|
61
|
+
STDERR.puts " * The Phusion Passenger Standalone instance that you want to stop isn't running on"
|
62
|
+
STDERR.puts " port #{@options[:port]}, but on another port. If this is the case then you should"
|
63
|
+
STDERR.puts " specify the right port with --port."
|
64
|
+
STDERR.puts " If the instance is listening on a Unix socket file instead of a TCP port,"
|
65
|
+
STDERR.puts " then please specify the PID file's filename with --pid-file."
|
66
|
+
STDERR.puts " * The instance that you want to stop has stored its PID file in a non-standard"
|
67
|
+
STDERR.puts " location. In this case please specify the right PID file with --pid-file."
|
68
|
+
exit 1
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# Phusion Passenger - http://www.modrails.com/
|
2
|
+
# Copyright (c) 2010 Phusion
|
3
|
+
#
|
4
|
+
# "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be included in
|
14
|
+
# all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
+
# THE SOFTWARE.
|
23
|
+
|
24
|
+
module PhusionPassenger
|
25
|
+
module Standalone
|
26
|
+
|
27
|
+
module Utils
|
28
|
+
private
|
29
|
+
def require_platform_info_binary_compatibility
|
30
|
+
if !defined?(PlatformInfo) || !PlatformInfo.respond_to?(:cpu_architecture)
|
31
|
+
require 'phusion_passenger/platform_info/binary_compatibility'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def runtime_version_string
|
36
|
+
require_platform_info_binary_compatibility
|
37
|
+
return "#{VERSION_STRING}-#{PlatformInfo.passenger_binary_compatibility_id}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# Phusion Passenger - http://www.modrails.com/
|
2
|
+
# Copyright (c) 2010 Phusion
|
3
|
+
#
|
4
|
+
# "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be included in
|
14
|
+
# all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
+
# THE SOFTWARE.
|
23
|
+
require 'phusion_passenger'
|
24
|
+
require 'phusion_passenger/standalone/command'
|
25
|
+
|
26
|
+
module PhusionPassenger
|
27
|
+
module Standalone
|
28
|
+
|
29
|
+
class VersionCommand < Command
|
30
|
+
def self.show_in_command_list
|
31
|
+
return false
|
32
|
+
end
|
33
|
+
|
34
|
+
def run
|
35
|
+
puts "Phusion Passenger version #{VERSION_STRING}"
|
36
|
+
puts
|
37
|
+
puts '"Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.'
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
@@ -10,7 +10,7 @@
|
|
10
10
|
Ruby on Rails framework version <%=h @error.version %> seems to be
|
11
11
|
corrupted. Please reinstall it.
|
12
12
|
This can be done with the following command:
|
13
|
-
<pre class="commands"><%= PlatformInfo
|
13
|
+
<pre class="commands"><%= PlatformInfo.gem_command %> install rails --version <%=h @error.version %></pre>
|
14
14
|
<% end %>
|
15
15
|
|
16
16
|
<dl>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<red>Permission problems</red>
|
2
|
+
|
3
|
+
Phusion Passenger Standalone must be able to write to the following directory:
|
4
|
+
|
5
|
+
<b><%= @dir %></b>
|
6
|
+
|
7
|
+
But it can't do that, despite the fact that it's running as root. There's
|
8
|
+
probably a permission problem, or (if you're running on a
|
9
|
+
RedHat/CentOS-based Linux distribution) SELinux might be interfering.
|
10
|
+
Please fix the permissions for the aforementioned directory and/or disable
|
11
|
+
SELinux, and re-run Phusion Passenger Standalone.
|
@@ -0,0 +1,69 @@
|
|
1
|
+
master_process on;
|
2
|
+
worker_processes 1;
|
3
|
+
daemon on;
|
4
|
+
error_log <%= @options[:log_file] %>;
|
5
|
+
pid <%= @options[:pid_file] %>;
|
6
|
+
<% if @options[:user] %>user <%= @options[:user] %> <%= default_group_for(@options[:user]) %>;<% end %>
|
7
|
+
|
8
|
+
events {
|
9
|
+
worker_connections 1024;
|
10
|
+
}
|
11
|
+
|
12
|
+
http {
|
13
|
+
include <%= nginx_dir %>/conf/mime.types;
|
14
|
+
client_body_temp_path <%= @temp_dir %>/client;
|
15
|
+
proxy_temp_path <%= @temp_dir %>/proxy;
|
16
|
+
passenger_ruby <%= PlatformInfo.ruby_command %>;
|
17
|
+
passenger_root <%= passenger_root %>;
|
18
|
+
passenger_abort_on_startup_error on;
|
19
|
+
passenger_user_switching off;
|
20
|
+
passenger_max_pool_size <%= @options[:max_pool_size] %>;
|
21
|
+
passenger_min_instances <%= @options[:min_instances] %>;
|
22
|
+
<% if @options[:user] %>passenger_default_user <%= @options[:user] %>;<% end %>
|
23
|
+
|
24
|
+
default_type application/octet-stream;
|
25
|
+
client_max_body_size 50m;
|
26
|
+
access_log off;
|
27
|
+
keepalive_timeout 60;
|
28
|
+
gzip on;
|
29
|
+
gzip_comp_level 3;
|
30
|
+
gzip_min_length 150;
|
31
|
+
gzip_proxied any;
|
32
|
+
gzip_types text/plain text/css application/javascript application/x-javascript;
|
33
|
+
|
34
|
+
<% if @apps.size > 1 %>
|
35
|
+
# Default server entry.
|
36
|
+
server {
|
37
|
+
listen <%= nginx_listen_address %>;
|
38
|
+
root <%= LIBDIR %>/phusion_passenger/templates/standalone_default_root;
|
39
|
+
}
|
40
|
+
<% end %>
|
41
|
+
|
42
|
+
<% if @options[:ping_port] %>
|
43
|
+
server {
|
44
|
+
listen <%= nginx_listen_address(true) %>;
|
45
|
+
root <%= LIBDIR %>/phusion_passenger/templates/standalone_default_root;
|
46
|
+
}
|
47
|
+
<% end %>
|
48
|
+
|
49
|
+
<% for app in @apps %>
|
50
|
+
server {
|
51
|
+
listen <%= @options[:address] %>:<%= @options[:port] %>;
|
52
|
+
server_name <%= app[:server_names].join(' ') %>;
|
53
|
+
root <%= app[:root] %>/public;
|
54
|
+
passenger_enabled on;
|
55
|
+
rails_env <%= app[:env] %>;
|
56
|
+
passenger_spawn_method <%= app[:spawn_method] %>;
|
57
|
+
<% if app[:min_instances] %>passenger_min_instances <%= app[:min_instances] %>;<% end %>
|
58
|
+
<% if app[:analytics] %>passenger_analytics on;<% end %>
|
59
|
+
<% if app[:debugger] %>passenger_debugger on;<% end %>
|
60
|
+
<%
|
61
|
+
# The following is to make Tower Top work. In Phusion Passenger Standalone we don't
|
62
|
+
# care about inter-app security because it's meant for simple use cases; we
|
63
|
+
# don't even support user switching. People who care about inter-app security
|
64
|
+
# should just use Phusion Passenger for Apache or Nginx.
|
65
|
+
%>
|
66
|
+
passenger_app_rights inspect_basic_info;
|
67
|
+
}
|
68
|
+
<% end %>
|
69
|
+
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<red><b>Unable to download or extract Nginx source tarball</b></red>
|
2
|
+
|
3
|
+
Possible reasons:
|
4
|
+
|
5
|
+
<b>* You are not connected to the Internet.</b>
|
6
|
+
If this is the case, then please connect to the Internet and try again.
|
7
|
+
|
8
|
+
<b>* The URL that Passenger Standalone tried to download from no longer exists.</b>
|
9
|
+
Please file a bug report if this is the case:
|
10
|
+
http://code.google.com/p/phusion-passenger/issues/list
|
11
|
+
|
12
|
+
<b>* The download was corrupted.</b>
|
13
|
+
Please re-run Phusion Passenger Standalone; it will re-download Nginx.
|
14
|
+
|
15
|
+
<b>* Phusion Passenger Standalone is not able to write to /tmp.</b>
|
16
|
+
Please fix the permissions for this directory, or run Phusion Passenger
|
17
|
+
Standalone as <b>root</b>.
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<red>Permission problems</red>
|
2
|
+
|
3
|
+
Phusion Passenger Standalone must be able to write to the following directory:
|
4
|
+
|
5
|
+
<b><%= @dir %></b>
|
6
|
+
|
7
|
+
But it can't do that, because you're running Phusion Passenger Standalone as
|
8
|
+
<b><%= `whoami`.strip %></b>. Please re-run Phusion Passenger Standalone as <b>root</b>.
|
@@ -0,0 +1 @@
|
|
1
|
+
There's no website configured on this host name.
|
@@ -7,7 +7,7 @@
|
|
7
7
|
The application <tt class="filename"><%=h @app_root %></tt> requires
|
8
8
|
Ruby on Rails version <b><%=h @error.gem_version_spec %></b>,
|
9
9
|
which is not installed. Please install it with the following command:
|
10
|
-
<pre class="commands"
|
10
|
+
<pre class="commands"><%= PlatformInfo.ruby_sudo_command %> <%= PlatformInfo.gem_command %> install rails --version <%=h @error.gem_version_spec %></pre>
|
11
11
|
|
12
12
|
<% else %>
|
13
13
|
|
@@ -16,7 +16,7 @@
|
|
16
16
|
"<%=h @error.gem_version_spec %>", but there is no such Ruby on Rails
|
17
17
|
version installed. Please install it with the following command:
|
18
18
|
<div class="commands">
|
19
|
-
<%= PlatformInfo
|
19
|
+
<%= PlatformInfo.gem_command %> install rails --version <em>some_version_number</em>
|
20
20
|
</div>
|
21
21
|
|
22
22
|
<% end %>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: binary
|
2
2
|
# Phusion Passenger - http://www.modrails.com/
|
3
|
-
# Copyright (c)
|
3
|
+
# Copyright (c) 2010 Phusion
|
4
4
|
#
|
5
5
|
# "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
|
6
6
|
#
|
@@ -31,18 +31,21 @@ require 'pathname'
|
|
31
31
|
require 'etc'
|
32
32
|
require 'fcntl'
|
33
33
|
require 'tempfile'
|
34
|
+
require 'timeout'
|
34
35
|
require 'stringio'
|
35
|
-
require 'phusion_passenger/packaging'
|
36
36
|
require 'phusion_passenger/exceptions'
|
37
|
-
|
38
|
-
require 'phusion_passenger/native_support'
|
39
|
-
end
|
37
|
+
require 'phusion_passenger/native_support'
|
40
38
|
|
41
39
|
module PhusionPassenger
|
42
40
|
|
43
41
|
# Utility functions.
|
44
42
|
module Utils
|
45
43
|
protected
|
44
|
+
def private_class_method(name)
|
45
|
+
metaclass = class << self; self; end
|
46
|
+
metaclass.send(:private, name)
|
47
|
+
end
|
48
|
+
|
46
49
|
# Return the canonicalized version of +path+. This path is guaranteed to
|
47
50
|
# to be "normal", i.e. it doesn't contain stuff like ".." or "/",
|
48
51
|
# and it fully resolves symbolic links.
|
@@ -57,13 +60,6 @@ protected
|
|
57
60
|
raise InvalidAPath, e.message
|
58
61
|
end
|
59
62
|
|
60
|
-
# Assert that +app_root+ is a valid Ruby on Rails application root.
|
61
|
-
# Raises InvalidPath if that is not the case.
|
62
|
-
def assert_valid_app_root(app_root)
|
63
|
-
assert_valid_directory(app_root)
|
64
|
-
assert_valid_file("#{app_root}/config/environment.rb")
|
65
|
-
end
|
66
|
-
|
67
63
|
# Assert that +path+ is a directory. Raises +InvalidPath+ if it isn't.
|
68
64
|
def assert_valid_directory(path)
|
69
65
|
if !File.directory?(path)
|
@@ -92,6 +88,24 @@ protected
|
|
92
88
|
groupname && Etc.getgrnam(groupname)
|
93
89
|
end
|
94
90
|
|
91
|
+
# Generate a long, cryptographically secure random ID string, which
|
92
|
+
# is also a valid filename.
|
93
|
+
def generate_random_id(method)
|
94
|
+
case method
|
95
|
+
when :base64
|
96
|
+
data = [File.read("/dev/urandom", 64)].pack('m')
|
97
|
+
data.gsub!("\n", '')
|
98
|
+
data.gsub!("+", '')
|
99
|
+
data.gsub!("/", '')
|
100
|
+
data.gsub!(/==$/, '')
|
101
|
+
return data
|
102
|
+
when :hex
|
103
|
+
return File.read("/dev/urandom", 64).unpack('H*')[0]
|
104
|
+
else
|
105
|
+
raise ArgumentError, "Invalid method #{method.inspect}"
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
95
109
|
def close_all_io_objects_for_fds(file_descriptors_to_leave_open)
|
96
110
|
ObjectSpace.each_object(IO) do |io|
|
97
111
|
begin
|
@@ -113,6 +127,10 @@ protected
|
|
113
127
|
data[:is_initialization_error] = true
|
114
128
|
if exception.child_exception
|
115
129
|
data[:child_exception] = marshal_exception(exception.child_exception)
|
130
|
+
child_exception = exception.child_exception
|
131
|
+
exception.child_exception = nil
|
132
|
+
data[:exception] = Marshal.dump(exception)
|
133
|
+
exception.child_exception = child_exception
|
116
134
|
end
|
117
135
|
else
|
118
136
|
begin
|
@@ -135,15 +153,9 @@ protected
|
|
135
153
|
child_exception = nil
|
136
154
|
end
|
137
155
|
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
when FrameworkInitError.to_s
|
142
|
-
exception_class = FrameworkInitError
|
143
|
-
else
|
144
|
-
exception_class = InitializationError
|
145
|
-
end
|
146
|
-
return exception_class.new(hash[:message], child_exception)
|
156
|
+
exception = Marshal.load(hash[:exception])
|
157
|
+
exception.child_exception = child_exception
|
158
|
+
return exception
|
147
159
|
else
|
148
160
|
begin
|
149
161
|
return Marshal.load(hash[:exception])
|
@@ -157,14 +169,85 @@ protected
|
|
157
169
|
#
|
158
170
|
# +current_location+ is a string which describes where the code is
|
159
171
|
# currently at. Usually the current class name will be enough.
|
160
|
-
def print_exception(current_location, exception, destination =
|
172
|
+
def print_exception(current_location, exception, destination = nil)
|
161
173
|
if !exception.is_a?(SystemExit)
|
162
|
-
|
163
|
-
|
174
|
+
data = exception.backtrace_string(current_location)
|
175
|
+
if defined?(DebugLogging) && self.is_a?(DebugLogging)
|
176
|
+
error(data)
|
177
|
+
else
|
178
|
+
destination ||= STDERR
|
179
|
+
destination.puts(data)
|
180
|
+
destination.flush if destination.respond_to?(:flush)
|
181
|
+
end
|
164
182
|
end
|
165
183
|
end
|
166
184
|
|
167
|
-
|
185
|
+
# Prepare an application process using rules for the given spawn options.
|
186
|
+
# This method is to be called before loading the application code.
|
187
|
+
#
|
188
|
+
# +startup_file+ is the application type's startup file, e.g.
|
189
|
+
# "config/environment.rb" for Rails apps and "config.ru" for Rack apps.
|
190
|
+
# See SpawnManager#spawn_application for options.
|
191
|
+
#
|
192
|
+
# This function may modify +options+. The modified options are to be
|
193
|
+
# passed to the request handler.
|
194
|
+
def prepare_app_process(startup_file, options)
|
195
|
+
Dir.chdir(options["app_root"])
|
196
|
+
|
197
|
+
lower_privilege(startup_file, options)
|
198
|
+
|
199
|
+
ENV["RAILS_ENV"] = ENV["RACK_ENV"] = options["environment"]
|
200
|
+
|
201
|
+
base_uri = options["base_uri"]
|
202
|
+
if base_uri && !base_uri.empty? && base_uri != "/"
|
203
|
+
ENV["RAILS_RELATIVE_URL_ROOT"] = base_uri
|
204
|
+
ENV["RACK_BASE_URI"] = base_uri
|
205
|
+
end
|
206
|
+
|
207
|
+
encoded_environment_variables = options["environment_variables"]
|
208
|
+
if encoded_environment_variables
|
209
|
+
env_vars_string = encoded_environment_variables.unpack("m").first
|
210
|
+
env_vars_array = env_vars_string.split("\0", -1)
|
211
|
+
env_vars_array.pop
|
212
|
+
env_vars = Hash[*env_vars_array]
|
213
|
+
env_vars.each_pair do |key, value|
|
214
|
+
ENV[key] = value
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
# Instantiate the analytics logger if requested. Can be nil.
|
219
|
+
require 'phusion_passenger/analytics_logger'
|
220
|
+
options["analytics_logger"] = AnalyticsLogger.new_from_options(options)
|
221
|
+
|
222
|
+
# Make sure RubyGems uses any new environment variable values
|
223
|
+
# that have been set now (e.g. $HOME, $GEM_HOME, etc) and that
|
224
|
+
# it is able to detect newly installed gems.
|
225
|
+
Gem.clear_paths
|
226
|
+
|
227
|
+
# Because spawned app processes exit using #exit!, #at_exit
|
228
|
+
# blocks aren't called. Here we ninja patch Kernel so that
|
229
|
+
# we can call #at_exit blocks during app process shutdown.
|
230
|
+
class << Kernel
|
231
|
+
def passenger_call_at_exit_blocks
|
232
|
+
@passenger_at_exit_blocks ||= []
|
233
|
+
@passenger_at_exit_blocks.reverse_each do |block|
|
234
|
+
block.call
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
def passenger_at_exit(&block)
|
239
|
+
@passenger_at_exit_blocks ||= []
|
240
|
+
@passenger_at_exit_blocks << block
|
241
|
+
return block
|
242
|
+
end
|
243
|
+
end
|
244
|
+
Kernel.class_eval do
|
245
|
+
def at_exit(&block)
|
246
|
+
return Kernel.passenger_at_exit(&block)
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
|
168
251
|
# Rack::ApplicationSpawner depends on the 'rack' library, but the app
|
169
252
|
# might want us to use a bundled version instead of a
|
170
253
|
# gem/apt-get/yum/whatever-installed version. Therefore we must setup
|
@@ -184,13 +267,12 @@ protected
|
|
184
267
|
# These apps call Bundler.setup in their preinitializer.rb.
|
185
268
|
#
|
186
269
|
# So the strategy is as follows:
|
187
|
-
|
270
|
+
|
188
271
|
# Our strategy might be completely unsuitable for the app or the
|
189
|
-
# developer is using something other than Bundler
|
190
|
-
#
|
191
|
-
# version), so we let the user manually specify a load path setup file.
|
272
|
+
# developer is using something other than Bundler, so we let the user
|
273
|
+
# manually specify a load path setup file.
|
192
274
|
if options["load_path_setup_file"]
|
193
|
-
require File.
|
275
|
+
require File.expand_path(options["load_path_setup_file"])
|
194
276
|
|
195
277
|
# The app developer may also override our strategy with this magic file.
|
196
278
|
elsif File.exist?('config/setup_load_paths.rb')
|
@@ -201,7 +283,7 @@ protected
|
|
201
283
|
# thing to do.
|
202
284
|
elsif File.exist?('.bundle/environment.rb')
|
203
285
|
require File.expand_path('.bundle/environment')
|
204
|
-
|
286
|
+
|
205
287
|
# If the Bundler environment file doesn't exist then there are two
|
206
288
|
# possibilities:
|
207
289
|
# 1. Bundler is not used, in which case we don't have to do anything.
|
@@ -221,14 +303,136 @@ protected
|
|
221
303
|
require 'bundler'
|
222
304
|
Bundler.setup
|
223
305
|
end
|
224
|
-
|
306
|
+
|
225
307
|
# Bundler might remove Phusion Passenger from the load path in its zealous
|
226
308
|
# attempt to un-require RubyGems, so here we put Phusion Passenger back
|
227
|
-
# into the load path.
|
309
|
+
# into the load path. This must be done before loading the app's startup
|
310
|
+
# file because the app might require() Phusion Passenger files.
|
228
311
|
if $LOAD_PATH.first != LIBDIR
|
229
312
|
$LOAD_PATH.unshift(LIBDIR)
|
230
313
|
$LOAD_PATH.uniq!
|
231
314
|
end
|
315
|
+
|
316
|
+
|
317
|
+
# !!! NOTE !!!
|
318
|
+
# If the app is using Bundler then any dependencies required past this
|
319
|
+
# point must be specified in the Gemfile. Like ruby-debug in debugging is on...
|
320
|
+
|
321
|
+
if options["debugger"]
|
322
|
+
require 'ruby-debug'
|
323
|
+
if !Debugger.respond_to?(:ctrl_port)
|
324
|
+
raise "Your version of ruby-debug is too old. Please upgrade to the latest version."
|
325
|
+
end
|
326
|
+
Debugger.start_remote('127.0.0.1', [0, 0])
|
327
|
+
Debugger.start
|
328
|
+
end
|
329
|
+
|
330
|
+
PhusionPassenger._spawn_options = options
|
331
|
+
end
|
332
|
+
|
333
|
+
# This method is to be called after loading the application code but
|
334
|
+
# before forking a worker process.
|
335
|
+
def after_loading_app_code(options)
|
336
|
+
# Even though prepare_app_process() restores the Phusion Passenger
|
337
|
+
# load path after setting up Bundler, the app itself might also
|
338
|
+
# remove Phusion Passenger from the load path for whatever reason,
|
339
|
+
# so here we restore the load path again.
|
340
|
+
if $LOAD_PATH.first != LIBDIR
|
341
|
+
$LOAD_PATH.unshift(LIBDIR)
|
342
|
+
$LOAD_PATH.uniq!
|
343
|
+
end
|
344
|
+
|
345
|
+
# Post-install framework extensions. Possibly preceded by a call to
|
346
|
+
# PhusionPassenger.install_framework_extensions!
|
347
|
+
require 'rails/version' if defined?(::Rails) && !defined?(::Rails::VERSION)
|
348
|
+
if defined?(::Rails) && ::Rails::VERSION::MAJOR <= 2
|
349
|
+
require 'phusion_passenger/classic_rails_extensions/init'
|
350
|
+
ClassicRailsExtensions.init!(options)
|
351
|
+
# Rails 3 extensions are installed by
|
352
|
+
# PhusionPassenger.install_framework_extensions!
|
353
|
+
end
|
354
|
+
|
355
|
+
PhusionPassenger._spawn_options = nil
|
356
|
+
end
|
357
|
+
|
358
|
+
# To be called before the request handler main loop is entered, but after the app
|
359
|
+
# startup file has been loaded. This function will fire off necessary events
|
360
|
+
# and perform necessary preparation tasks.
|
361
|
+
#
|
362
|
+
# +forked+ indicates whether the current worker process is forked off from
|
363
|
+
# an ApplicationSpawner that has preloaded the app code.
|
364
|
+
# +options+ are the spawn options that were passed.
|
365
|
+
def before_handling_requests(forked, options)
|
366
|
+
if forked && options["analytics_logger"]
|
367
|
+
options["analytics_logger"].clear_connection
|
368
|
+
end
|
369
|
+
|
370
|
+
# If we were forked from a preloader process then clear or
|
371
|
+
# re-establish ActiveRecord database connections. This prevents
|
372
|
+
# child processes from concurrently accessing the same
|
373
|
+
# database connection handles.
|
374
|
+
if forked && defined?(::ActiveRecord::Base)
|
375
|
+
if ::ActiveRecord::Base.respond_to?(:clear_all_connections!)
|
376
|
+
::ActiveRecord::Base.clear_all_connections!
|
377
|
+
elsif ::ActiveRecord::Base.respond_to?(:clear_active_connections!)
|
378
|
+
::ActiveRecord::Base.clear_active_connections!
|
379
|
+
elsif ::ActiveRecord::Base.respond_to?(:connected?) &&
|
380
|
+
::ActiveRecord::Base.connected?
|
381
|
+
::ActiveRecord::Base.establish_connection
|
382
|
+
end
|
383
|
+
end
|
384
|
+
|
385
|
+
# Fire off events.
|
386
|
+
PhusionPassenger.call_event(:starting_worker_process, forked)
|
387
|
+
if options["pool_account_username"] && options["pool_account_password_base64"]
|
388
|
+
password = options["pool_account_password_base64"].unpack('m').first
|
389
|
+
PhusionPassenger.call_event(:credentials,
|
390
|
+
options["pool_account_username"], password)
|
391
|
+
else
|
392
|
+
PhusionPassenger.call_event(:credentials, nil, nil)
|
393
|
+
end
|
394
|
+
end
|
395
|
+
|
396
|
+
# To be called after the request handler main loop is exited. This function
|
397
|
+
# will fire off necessary events perform necessary cleanup tasks.
|
398
|
+
def after_handling_requests
|
399
|
+
PhusionPassenger.call_event(:stopping_worker_process)
|
400
|
+
Kernel.passenger_call_at_exit_blocks
|
401
|
+
end
|
402
|
+
|
403
|
+
def get_socket_address_type(address)
|
404
|
+
if address =~ %r{^unix:.}
|
405
|
+
return :unix
|
406
|
+
elsif address =~ %r{^tcp://.}
|
407
|
+
return :tcp
|
408
|
+
else
|
409
|
+
return :unknown
|
410
|
+
end
|
411
|
+
end
|
412
|
+
|
413
|
+
def connect_to_server(address)
|
414
|
+
case get_socket_address_type(address)
|
415
|
+
when :unix
|
416
|
+
return UNIXSocket.new(address.sub(/^unix:/, ''))
|
417
|
+
when :tcp
|
418
|
+
host, port = address.sub(%r{^tcp://}, '').split(':', 2)
|
419
|
+
port = port.to_i
|
420
|
+
return TCPSocket.new(host, port)
|
421
|
+
else
|
422
|
+
raise ArgumentError, "Unknown socket address type for '#{address}'."
|
423
|
+
end
|
424
|
+
end
|
425
|
+
|
426
|
+
def local_socket_address?(address)
|
427
|
+
case get_socket_address_type(address)
|
428
|
+
when :unix
|
429
|
+
return true
|
430
|
+
when :tcp
|
431
|
+
host, port = address.sub(%r{^tcp://}, '').split(':', 2)
|
432
|
+
return host == "127.0.0.1" || host == "::1" || host == "localhost"
|
433
|
+
else
|
434
|
+
raise ArgumentError, "Unknown socket address type for '#{address}'."
|
435
|
+
end
|
232
436
|
end
|
233
437
|
|
234
438
|
# Fork a new process and run the given block inside the child process, just like
|
@@ -244,6 +448,7 @@ protected
|
|
244
448
|
def safe_fork(current_location = self.class, double_fork = false)
|
245
449
|
pid = fork
|
246
450
|
if pid.nil?
|
451
|
+
has_exception = false
|
247
452
|
begin
|
248
453
|
if double_fork
|
249
454
|
pid2 = fork
|
@@ -256,9 +461,10 @@ protected
|
|
256
461
|
yield
|
257
462
|
end
|
258
463
|
rescue Exception => e
|
464
|
+
has_exception = true
|
259
465
|
print_exception(current_location.to_s, e)
|
260
466
|
ensure
|
261
|
-
exit!
|
467
|
+
exit!(has_exception ? 1 : 0)
|
262
468
|
end
|
263
469
|
else
|
264
470
|
if double_fork
|
@@ -270,6 +476,19 @@ protected
|
|
270
476
|
end
|
271
477
|
end
|
272
478
|
|
479
|
+
# Checks whether the given process exists.
|
480
|
+
def process_is_alive?(pid)
|
481
|
+
begin
|
482
|
+
Process.kill(0, pid)
|
483
|
+
return true
|
484
|
+
rescue Errno::ESRCH
|
485
|
+
return false
|
486
|
+
rescue SystemCallError => e
|
487
|
+
return true
|
488
|
+
end
|
489
|
+
end
|
490
|
+
module_function :process_is_alive?
|
491
|
+
|
273
492
|
class PseudoIO
|
274
493
|
def initialize(sink)
|
275
494
|
@sink = sink || File.open("/dev/null", "w")
|
@@ -331,9 +550,6 @@ protected
|
|
331
550
|
channel.write('success')
|
332
551
|
return true
|
333
552
|
rescue StandardError, ScriptError, NoMemoryError => e
|
334
|
-
if ENV['TESTING_PASSENGER'] == '1'
|
335
|
-
print_exception(self.class.to_s, e)
|
336
|
-
end
|
337
553
|
channel.write('exception')
|
338
554
|
channel.write_scalar(marshal_exception(e))
|
339
555
|
channel.write_scalar(stderr_output)
|
@@ -407,42 +623,120 @@ protected
|
|
407
623
|
raise exception if exception
|
408
624
|
end
|
409
625
|
|
410
|
-
#
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
626
|
+
# No-op, hook for unit tests.
|
627
|
+
def self.lower_privilege_called
|
628
|
+
end
|
629
|
+
|
630
|
+
# Lowers the current process's privilege based on the documented rules for
|
631
|
+
# the "user", "group", "default_user" and "default_group" options.
|
632
|
+
def lower_privilege(startup_file, options)
|
633
|
+
Utils.lower_privilege_called
|
634
|
+
return if Process.euid != 0
|
635
|
+
|
636
|
+
if options["default_user"] && !options["default_user"].empty?
|
637
|
+
default_user = options["default_user"]
|
638
|
+
else
|
639
|
+
default_user = "nobody"
|
640
|
+
end
|
641
|
+
if options["default_group"] && !options["default_group"].empty?
|
642
|
+
default_group = options["default_group"]
|
643
|
+
else
|
644
|
+
default_group = Etc.getgrgid(Etc.getpwnam(default_user).gid).name
|
645
|
+
end
|
646
|
+
|
647
|
+
if options["user"] && !options["user"].empty?
|
648
|
+
begin
|
649
|
+
user_info = Etc.getpwnam(options["user"])
|
650
|
+
rescue ArgumentError
|
651
|
+
user_info = nil
|
652
|
+
end
|
653
|
+
else
|
654
|
+
uid = File.lstat(startup_file).uid
|
655
|
+
begin
|
656
|
+
user_info = Etc.getpwuid(uid)
|
657
|
+
rescue ArgumentError
|
658
|
+
user_info = nil
|
659
|
+
end
|
660
|
+
end
|
661
|
+
if !user_info || user_info.uid == 0
|
662
|
+
begin
|
663
|
+
user_info = Etc.getpwnam(default_user)
|
664
|
+
rescue ArgumentError
|
665
|
+
user_info = nil
|
417
666
|
end
|
418
|
-
rescue Errno::EPERM
|
419
|
-
# No problem if we were unable to switch user.
|
420
667
|
end
|
421
|
-
end
|
422
668
|
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
669
|
+
if options["group"] && !options["group"].empty?
|
670
|
+
if options["group"] == "!STARTUP_FILE!"
|
671
|
+
gid = File.lstat(startup_file).gid
|
672
|
+
begin
|
673
|
+
group_info = Etc.getgrgid(gid)
|
674
|
+
rescue ArgumentError
|
675
|
+
group_info = nil
|
676
|
+
end
|
430
677
|
else
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
678
|
+
begin
|
679
|
+
group_info = Etc.getgrnam(options["group"])
|
680
|
+
rescue ArgumentError
|
681
|
+
group_info = nil
|
682
|
+
end
|
435
683
|
end
|
436
|
-
|
437
|
-
|
684
|
+
elsif user_info
|
685
|
+
begin
|
686
|
+
group_info = Etc.getgrgid(user_info.gid)
|
687
|
+
rescue ArgumentError
|
688
|
+
group_info = nil
|
689
|
+
end
|
690
|
+
else
|
691
|
+
group_info = nil
|
438
692
|
end
|
439
|
-
if
|
440
|
-
|
693
|
+
if !group_info || group_info.gid == 0
|
694
|
+
begin
|
695
|
+
group_info = Etc.getgrnam(default_group)
|
696
|
+
rescue ArgumentError
|
697
|
+
group_info = nil
|
698
|
+
end
|
699
|
+
end
|
700
|
+
|
701
|
+
if !user_info
|
702
|
+
raise SecurityError, "Cannot determine a user to lower privilege to"
|
703
|
+
end
|
704
|
+
if !group_info
|
705
|
+
raise SecurityError, "Cannot determine a group to lower privilege to"
|
706
|
+
end
|
707
|
+
|
708
|
+
NativeSupport.switch_user(user_info.name, user_info.uid, group_info.gid)
|
709
|
+
ENV['USER'] = user_info.name
|
710
|
+
ENV['HOME'] = user_info.dir
|
711
|
+
end
|
712
|
+
|
713
|
+
# Returns a string which reports the backtraces for all threads,
|
714
|
+
# or if that's not supported the backtrace for the current thread.
|
715
|
+
def global_backtrace_report
|
716
|
+
if Kernel.respond_to?(:caller_for_all_threads)
|
717
|
+
output = "========== Process #{Process.pid}: backtrace dump ==========\n"
|
718
|
+
caller_for_all_threads.each_pair do |thread, stack|
|
719
|
+
output << ("-" * 60) << "\n"
|
720
|
+
output << "# Thread: #{thread.inspect}, "
|
721
|
+
if thread == Thread.main
|
722
|
+
output << "[main thread], "
|
723
|
+
end
|
724
|
+
if thread == Thread.current
|
725
|
+
output << "[current thread], "
|
726
|
+
end
|
727
|
+
output << "alive = #{thread.alive?}\n"
|
728
|
+
output << ("-" * 60) << "\n"
|
729
|
+
output << " " << stack.join("\n ")
|
730
|
+
output << "\n\n"
|
731
|
+
end
|
441
732
|
else
|
442
|
-
|
443
|
-
|
444
|
-
|
733
|
+
output = "========== Process #{Process.pid}: backtrace dump ==========\n"
|
734
|
+
output << ("-" * 60) << "\n"
|
735
|
+
output << "# Current thread: #{Thread.current.inspect}\n"
|
736
|
+
output << ("-" * 60) << "\n"
|
737
|
+
output << " " << caller.join("\n ")
|
445
738
|
end
|
739
|
+
return output
|
446
740
|
end
|
447
741
|
|
448
742
|
def to_boolean(value)
|
@@ -451,53 +745,50 @@ protected
|
|
451
745
|
|
452
746
|
def sanitize_spawn_options(options)
|
453
747
|
defaults = {
|
454
|
-
"
|
455
|
-
"
|
456
|
-
"
|
457
|
-
"app_type" => "rails",
|
458
|
-
"spawn_method" => "smart-lv2",
|
748
|
+
"app_type" => "rails",
|
749
|
+
"environment" => "production",
|
750
|
+
"spawn_method" => "smart-lv2",
|
459
751
|
"framework_spawner_timeout" => -1,
|
460
752
|
"app_spawner_timeout" => -1,
|
461
753
|
"print_exceptions" => true
|
462
754
|
}
|
463
755
|
options = defaults.merge(options)
|
464
|
-
options["
|
756
|
+
options["app_group_name"] = options["app_root"] if !options["app_group_name"]
|
465
757
|
options["framework_spawner_timeout"] = options["framework_spawner_timeout"].to_i
|
466
758
|
options["app_spawner_timeout"] = options["app_spawner_timeout"].to_i
|
759
|
+
if options.has_key?("print_framework_loading_exceptions")
|
760
|
+
options["print_framework_loading_exceptions"] = to_boolean(options["print_framework_loading_exceptions"])
|
761
|
+
end
|
467
762
|
# Force this to be a boolean for easy use with Utils#unmarshal_and_raise_errors.
|
468
763
|
options["print_exceptions"] = to_boolean(options["print_exceptions"])
|
764
|
+
|
765
|
+
options["analytics"] = to_boolean(options["analytics"])
|
766
|
+
options["show_version_in_header"] = to_boolean(options["show_version_in_header"])
|
767
|
+
|
768
|
+
# Smart spawning is not supported when using ruby-debug.
|
769
|
+
options["debugger"] = to_boolean(options["debugger"])
|
770
|
+
options["spawn_method"] = "conservative" if options["debugger"]
|
771
|
+
|
469
772
|
return options
|
470
773
|
end
|
471
774
|
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
# passengerCreateTempDir() in Utils.cpp. This implementation
|
490
|
-
# is only meant to make the unit tests pass. For production
|
491
|
-
# systems one should pre-create the temp directory with
|
492
|
-
# passengerCreateTempDir().
|
493
|
-
system("mkdir", "-p", "-m", "u=wxs,g=wx,o=wx", dir)
|
494
|
-
system("mkdir", "-p", "-m", "u=wxs,g=wx,o=wx", "#{dir}/backends")
|
495
|
-
end
|
496
|
-
return dir
|
497
|
-
end
|
498
|
-
|
499
|
-
def self.passenger_tmpdir=(dir)
|
500
|
-
@@passenger_tmpdir = dir
|
775
|
+
if defined?(PhusionPassenger::NativeSupport)
|
776
|
+
# Split the given string into an hash. Keys and values are obtained by splitting the
|
777
|
+
# string using the null character as the delimitor.
|
778
|
+
def split_by_null_into_hash(data)
|
779
|
+
return PhusionPassenger::NativeSupport.split_by_null_into_hash(data)
|
780
|
+
end
|
781
|
+
else
|
782
|
+
PADDING = "_"
|
783
|
+
NULL = "\0"
|
784
|
+
|
785
|
+
def split_by_null_into_hash(data)
|
786
|
+
data << PADDING
|
787
|
+
array = data.split(NULL)
|
788
|
+
array.pop
|
789
|
+
data.slice!(data.size - 1, data.size - 1)
|
790
|
+
return Hash[*array]
|
791
|
+
end
|
501
792
|
end
|
502
793
|
|
503
794
|
####################################
|
@@ -513,7 +804,7 @@ class Exception
|
|
513
804
|
location = "in #{current_location} "
|
514
805
|
end
|
515
806
|
return "*** Exception #{self.class} #{location}" <<
|
516
|
-
"(#{self}) (process #{$$}):\n" <<
|
807
|
+
"(#{self}) (process #{$$}, thread #{Thread.current}):\n" <<
|
517
808
|
"\tfrom " << backtrace.join("\n\tfrom ")
|
518
809
|
end
|
519
810
|
end
|
@@ -523,6 +814,7 @@ class ConditionVariable
|
|
523
814
|
# amount of time. Returns true if this condition was signaled, false if a
|
524
815
|
# timeout occurred.
|
525
816
|
def timed_wait(mutex, secs)
|
817
|
+
ruby_engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : "ruby"
|
526
818
|
if secs > 100000000
|
527
819
|
# NOTE: If one calls timeout() on FreeBSD 5 with an
|
528
820
|
# argument of more than 100000000, then MRI will become
|
@@ -534,14 +826,23 @@ class ConditionVariable
|
|
534
826
|
# seconds.
|
535
827
|
secs = 100000000
|
536
828
|
end
|
537
|
-
if
|
829
|
+
if ruby_engine == "jruby"
|
538
830
|
if secs > 0
|
539
831
|
return wait(mutex, secs)
|
540
832
|
else
|
541
833
|
return wait(mutex)
|
542
834
|
end
|
835
|
+
elsif RUBY_VERSION >= '1.9.2'
|
836
|
+
if secs > 0
|
837
|
+
t1 = Time.now
|
838
|
+
wait(mutex, secs)
|
839
|
+
t2 = Time.now
|
840
|
+
return t2.to_f - t1.to_f < secs
|
841
|
+
else
|
842
|
+
wait(mutex)
|
843
|
+
return true
|
844
|
+
end
|
543
845
|
else
|
544
|
-
require 'timeout' unless defined?(Timeout)
|
545
846
|
if secs > 0
|
546
847
|
Timeout.timeout(secs) do
|
547
848
|
wait(mutex)
|
@@ -558,12 +859,12 @@ class ConditionVariable
|
|
558
859
|
# This is like ConditionVariable.wait(), but allows one to wait a maximum
|
559
860
|
# amount of time. Raises Timeout::Error if the timeout has elapsed.
|
560
861
|
def timed_wait!(mutex, secs)
|
561
|
-
|
862
|
+
ruby_engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : "ruby"
|
562
863
|
if secs > 100000000
|
563
864
|
# See the corresponding note for timed_wait().
|
564
865
|
secs = 100000000
|
565
866
|
end
|
566
|
-
if
|
867
|
+
if ruby_engine == "jruby"
|
567
868
|
if secs > 0
|
568
869
|
if !wait(mutex, secs)
|
569
870
|
raise Timeout::Error, "Timeout"
|
@@ -571,6 +872,17 @@ class ConditionVariable
|
|
571
872
|
else
|
572
873
|
wait(mutex)
|
573
874
|
end
|
875
|
+
elsif RUBY_VERSION >= '1.9.2'
|
876
|
+
if secs > 0
|
877
|
+
t1 = Time.now
|
878
|
+
wait(mutex, secs)
|
879
|
+
t2 = Time.now
|
880
|
+
if t2.to_f - t1.to_f >= secs
|
881
|
+
raise Timeout::Error, "Timeout"
|
882
|
+
end
|
883
|
+
else
|
884
|
+
wait(mutex)
|
885
|
+
end
|
574
886
|
else
|
575
887
|
if secs > 0
|
576
888
|
Timeout.timeout(secs) do
|
@@ -586,27 +898,47 @@ end
|
|
586
898
|
|
587
899
|
class IO
|
588
900
|
if defined?(PhusionPassenger::NativeSupport)
|
589
|
-
#
|
590
|
-
#
|
901
|
+
# Writes all of the strings in the +components+ array into the given file
|
902
|
+
# descriptor using the +writev()+ system call. Unlike IO#write, this method
|
903
|
+
# does not require one to concatenate all those strings into a single buffer
|
904
|
+
# in order to send the data in a single system call. Thus, #writev is a great
|
905
|
+
# way to perform zero-copy I/O.
|
591
906
|
#
|
592
|
-
#
|
593
|
-
|
594
|
-
|
907
|
+
# Unlike the raw writev() system call, this method ensures that all given
|
908
|
+
# data is written before returning, by performing multiple writev() calls
|
909
|
+
# and whatever else is necessary.
|
910
|
+
#
|
911
|
+
# io.writev(["hello ", "world", "\n"])
|
912
|
+
def writev(components)
|
913
|
+
return PhusionPassenger::NativeSupport.writev(fileno, components)
|
595
914
|
end
|
596
|
-
|
597
|
-
#
|
598
|
-
# This only works if this IO channel is a Unix socket.
|
915
|
+
|
916
|
+
# Like #writev, but accepts two arrays. The data is written in the given order.
|
599
917
|
#
|
600
|
-
#
|
601
|
-
def
|
602
|
-
return
|
918
|
+
# io.writev2(["hello ", "world", "\n"], ["another ", "message\n"])
|
919
|
+
def writev2(components, components2)
|
920
|
+
return PhusionPassenger::NativeSupport.writev2(fileno,
|
921
|
+
components, components2)
|
922
|
+
end
|
923
|
+
|
924
|
+
# Like #writev, but accepts three arrays. The data is written in the given order.
|
925
|
+
#
|
926
|
+
# io.writev3(["hello ", "world", "\n"],
|
927
|
+
# ["another ", "message\n"],
|
928
|
+
# ["yet ", "another ", "one", "\n"])
|
929
|
+
def writev3(components, components2, components3)
|
930
|
+
return PhusionPassenger::NativeSupport.writev3(fileno,
|
931
|
+
components, components2, components3)
|
603
932
|
end
|
604
933
|
end
|
605
934
|
|
606
|
-
|
607
|
-
|
935
|
+
if defined?(Fcntl::F_SETFD)
|
936
|
+
def close_on_exec!
|
608
937
|
fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
|
609
938
|
end
|
939
|
+
else
|
940
|
+
def close_on_exec!
|
941
|
+
end
|
610
942
|
end
|
611
943
|
end
|
612
944
|
|
@@ -644,18 +976,37 @@ module Signal
|
|
644
976
|
end
|
645
977
|
end
|
646
978
|
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
979
|
+
module Process
|
980
|
+
def self.timed_waitpid(pid, max_time)
|
981
|
+
done = false
|
982
|
+
start_time = Time.now
|
983
|
+
while Time.now - start_time < max_time && !done
|
984
|
+
done = Process.waitpid(pid, Process::WNOHANG)
|
985
|
+
sleep 0.1 if !done
|
986
|
+
end
|
987
|
+
return !!done
|
988
|
+
rescue Errno::ECHILD
|
989
|
+
return true
|
990
|
+
end
|
991
|
+
end
|
992
|
+
|
993
|
+
# MRI's implementations of UNIXSocket#recv_io and UNIXSocket#send_io
|
994
|
+
# are broken on 64-bit FreeBSD 7, OpenBSD and x86_64/ppc64 OS X. So
|
995
|
+
# we override them with our own implementation.
|
996
|
+
ruby_engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : "ruby"
|
997
|
+
if ruby_engine == "ruby" && defined?(PhusionPassenger::NativeSupport) && (
|
998
|
+
RUBY_PLATFORM =~ /freebsd/ ||
|
999
|
+
RUBY_PLATFORM =~ /openbsd/ ||
|
1000
|
+
(RUBY_PLATFORM =~ /darwin/ && RUBY_PLATFORM !~ /universal/)
|
1001
|
+
)
|
651
1002
|
require 'socket'
|
652
1003
|
UNIXSocket.class_eval do
|
653
1004
|
def recv_io(klass = IO)
|
654
|
-
|
1005
|
+
return klass.for_fd(PhusionPassenger::NativeSupport.recv_fd(self.fileno))
|
655
1006
|
end
|
656
|
-
|
1007
|
+
|
657
1008
|
def send_io(io)
|
658
|
-
|
1009
|
+
PhusionPassenger::NativeSupport.send_fd(self.fileno, io.fileno)
|
659
1010
|
end
|
660
1011
|
end
|
661
1012
|
end
|