passenger 2.0.6 → 2.1.2
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 +10 -4
- data/LICENSE +1 -1
- data/NEWS +0 -0
- data/Rakefile +183 -117
- data/benchmark/dispatcher.rb +5 -9
- data/bin/passenger-install-apache2-module +52 -18
- data/bin/passenger-memory-stats +67 -13
- data/bin/passenger-spawn-server +8 -4
- data/bin/passenger-status +21 -46
- data/bin/passenger-stress-test +5 -5
- data/debian/postinst +1 -1
- data/doc/ApplicationPool algorithm.txt +180 -128
- data/doc/Architectural overview.html +1 -778
- data/doc/Security of user switching support.html +1 -643
- data/doc/Users guide Apache.html +3127 -0
- data/doc/Users guide Nginx.html +1458 -0
- data/doc/Users guide.html +1404 -467
- data/doc/Users guide.txt +843 -105
- data/doc/cxxapi/ApplicationPoolServer_8h-source.html +751 -641
- data/doc/cxxapi/ApplicationPool_8h-source.html +168 -171
- data/doc/cxxapi/Application_8h-source.html +494 -394
- data/doc/cxxapi/Bucket_8h-source.html +21 -15
- data/doc/cxxapi/CachedFileStat_8h-source.html +191 -0
- data/doc/cxxapi/Configuration_8h-source.html +311 -149
- data/doc/cxxapi/DirectoryMapper_8h-source.html +309 -0
- data/doc/cxxapi/DummySpawnManager_8h-source.html +3 -4
- data/doc/cxxapi/Exceptions_8h-source.html +182 -165
- data/doc/cxxapi/FileChecker_8h-source.html +130 -0
- data/doc/cxxapi/Hooks_8h-source.html +2 -3
- data/doc/cxxapi/Logging_8h-source.html +92 -89
- data/doc/cxxapi/MessageChannel_8h-source.html +585 -477
- data/doc/cxxapi/PoolOptions_8h-source.html +305 -0
- data/doc/cxxapi/SpawnManager_8h-source.html +515 -540
- data/doc/cxxapi/StandardApplicationPool_8h-source.html +779 -679
- data/doc/cxxapi/SystemTime_8h-source.html +104 -0
- data/doc/cxxapi/Utils_8h-source.html +331 -227
- data/doc/cxxapi/annotated.html +6 -7
- data/doc/cxxapi/classClient-members.html +1 -2
- data/doc/cxxapi/classClient.html +1 -2
- data/doc/cxxapi/classHooks-members.html +5 -2
- data/doc/cxxapi/classHooks.html +112 -2
- data/doc/cxxapi/classPassenger_1_1Application-members.html +2 -3
- data/doc/cxxapi/classPassenger_1_1Application.html +8 -9
- data/doc/cxxapi/classPassenger_1_1ApplicationPool-members.html +4 -4
- data/doc/cxxapi/classPassenger_1_1ApplicationPool.html +42 -81
- data/doc/cxxapi/classPassenger_1_1ApplicationPoolServer-members.html +1 -2
- data/doc/cxxapi/classPassenger_1_1ApplicationPoolServer.html +3 -4
- data/doc/cxxapi/classPassenger_1_1ApplicationPool__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1Application_1_1Session-members.html +3 -2
- data/doc/cxxapi/classPassenger_1_1Application_1_1Session.html +74 -3
- data/doc/cxxapi/classPassenger_1_1BusyException-members.html +1 -2
- data/doc/cxxapi/classPassenger_1_1BusyException.html +2 -3
- data/doc/cxxapi/classPassenger_1_1ConfigurationException-members.html +1 -2
- data/doc/cxxapi/classPassenger_1_1ConfigurationException.html +2 -3
- data/doc/cxxapi/classPassenger_1_1DirectoryMapper-members.html +38 -0
- data/doc/cxxapi/classPassenger_1_1DirectoryMapper.html +256 -0
- data/doc/cxxapi/classPassenger_1_1DummySpawnManager-members.html +1 -2
- data/doc/cxxapi/classPassenger_1_1DummySpawnManager.html +2 -3
- data/doc/cxxapi/{classPassenger_1_1Thread-members.html → classPassenger_1_1FileChecker-members.html} +4 -5
- data/doc/cxxapi/classPassenger_1_1FileChecker.html +121 -0
- data/doc/cxxapi/classPassenger_1_1FileNotFoundException-members.html +1 -2
- data/doc/cxxapi/classPassenger_1_1FileNotFoundException.html +2 -3
- data/doc/cxxapi/classPassenger_1_1FileNotFoundException__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1FileSystemException-members.html +2 -3
- data/doc/cxxapi/classPassenger_1_1FileSystemException.html +2 -3
- data/doc/cxxapi/classPassenger_1_1FileSystemException__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1IOException-members.html +1 -2
- data/doc/cxxapi/classPassenger_1_1IOException.html +2 -3
- data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1MessageChannel-members.html +5 -2
- data/doc/cxxapi/classPassenger_1_1MessageChannel.html +155 -5
- data/doc/cxxapi/{classboost_1_1this__thread_1_1enable__syscall__interruption-members.html → classPassenger_1_1RuntimeException-members.html} +2 -3
- data/doc/cxxapi/{classboost_1_1this__thread_1_1enable__syscall__interruption.html → classPassenger_1_1RuntimeException.html} +10 -8
- data/doc/cxxapi/classPassenger_1_1SpawnException-members.html +1 -2
- data/doc/cxxapi/classPassenger_1_1SpawnException.html +2 -3
- data/doc/cxxapi/classPassenger_1_1SpawnManager-members.html +2 -3
- data/doc/cxxapi/classPassenger_1_1SpawnManager.html +15 -56
- data/doc/cxxapi/classPassenger_1_1StandardApplicationPool-members.html +5 -4
- data/doc/cxxapi/classPassenger_1_1StandardApplicationPool.html +20 -81
- data/doc/cxxapi/classPassenger_1_1StandardApplicationPool__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1SystemException-members.html +2 -3
- data/doc/cxxapi/classPassenger_1_1SystemException.html +9 -10
- data/doc/cxxapi/classPassenger_1_1SystemException__inherit__graph.png +0 -0
- data/doc/cxxapi/{classboost_1_1this__thread_1_1disable__syscall__interruption-members.html → classPassenger_1_1SystemTime-members.html} +5 -3
- data/doc/cxxapi/classPassenger_1_1SystemTime.html +86 -0
- data/doc/cxxapi/classPassenger_1_1TempFile-members.html +2 -3
- data/doc/cxxapi/classPassenger_1_1TempFile.html +17 -9
- data/doc/cxxapi/definitions_8h-source.html +1 -2
- data/doc/cxxapi/files.html +6 -3
- data/doc/cxxapi/functions.html +98 -35
- data/doc/cxxapi/functions_func.html +60 -32
- data/doc/cxxapi/functions_type.html +1 -2
- data/doc/cxxapi/functions_vars.html +27 -2
- data/doc/cxxapi/graph_legend.html +1 -2
- data/doc/cxxapi/graph_legend.png +0 -0
- data/doc/cxxapi/group__Configuration.html +3 -4
- data/doc/cxxapi/group__Configuration.png +0 -0
- data/doc/cxxapi/group__Core.html +3 -4
- data/doc/cxxapi/group__Core.png +0 -0
- data/doc/cxxapi/group__Exceptions.html +4 -2
- data/doc/cxxapi/group__Hooks.html +1 -6
- data/doc/cxxapi/group__Hooks.png +0 -0
- data/doc/cxxapi/group__Support.html +259 -36
- data/doc/cxxapi/hierarchy.html +6 -7
- data/doc/cxxapi/inherit__graph__0.map +1 -1
- data/doc/cxxapi/inherit__graph__0.md5 +1 -1
- data/doc/cxxapi/inherit__graph__0.png +0 -0
- data/doc/cxxapi/inherit__graph__1.map +1 -1
- data/doc/cxxapi/inherit__graph__1.md5 +1 -1
- data/doc/cxxapi/inherit__graph__1.png +0 -0
- data/doc/cxxapi/inherit__graph__10.map +1 -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 +1 -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 +2 -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 +1 -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 +1 -2
- 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 +1 -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 +1 -1
- data/doc/cxxapi/inherit__graph__16.md5 +1 -1
- data/doc/cxxapi/inherit__graph__16.png +0 -0
- data/doc/cxxapi/inherit__graph__17.png +0 -0
- data/doc/cxxapi/inherit__graph__18.png +0 -0
- data/doc/cxxapi/inherit__graph__19.png +0 -0
- data/doc/cxxapi/inherit__graph__2.map +1 -1
- data/doc/cxxapi/inherit__graph__2.md5 +1 -1
- data/doc/cxxapi/inherit__graph__2.png +0 -0
- data/doc/cxxapi/inherit__graph__20.map +1 -1
- 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 +1 -1
- data/doc/cxxapi/inherit__graph__21.md5 +1 -1
- data/doc/cxxapi/inherit__graph__21.png +0 -0
- data/doc/cxxapi/inherit__graph__3.map +1 -1
- data/doc/cxxapi/inherit__graph__3.md5 +1 -1
- data/doc/cxxapi/inherit__graph__3.png +0 -0
- data/doc/cxxapi/inherit__graph__4.map +1 -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 +2 -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 +1 -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 +1 -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 +1 -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 +1 -2
- data/doc/cxxapi/inherit__graph__9.md5 +1 -1
- data/doc/cxxapi/inherit__graph__9.png +0 -0
- data/doc/cxxapi/inherits.html +30 -31
- data/doc/cxxapi/main.html +1 -2
- data/doc/cxxapi/modules.html +1 -2
- data/doc/cxxapi/structPassenger_1_1AnythingToString-members.html +1 -2
- data/doc/cxxapi/structPassenger_1_1AnythingToString.html +2 -3
- data/doc/cxxapi/structPassenger_1_1AnythingToString_3_01vector_3_01string_01_4_01_4-members.html +1 -2
- data/doc/cxxapi/structPassenger_1_1AnythingToString_3_01vector_3_01string_01_4_01_4.html +2 -3
- data/doc/cxxapi/structPassenger_1_1PoolOptions-members.html +49 -0
- data/doc/cxxapi/structPassenger_1_1PoolOptions.html +404 -0
- data/doc/cxxapi/tree.html +18 -20
- data/doc/images/conservative_spawning.png +0 -0
- data/doc/images/conservative_spawning.svg +248 -0
- data/doc/images/smart-lv2.png +0 -0
- data/doc/images/smart-lv2.svg +320 -0
- data/doc/rdoc/classes/ConditionVariable.html +68 -34
- data/doc/rdoc/classes/Exception.html +16 -16
- data/doc/rdoc/classes/GC.html +9 -9
- data/doc/rdoc/classes/IO.html +36 -17
- data/doc/rdoc/classes/PhusionPassenger.html +183 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractRequestHandler.html +511 -0
- data/doc/rdoc/classes/{Passenger → PhusionPassenger}/AbstractServer.html +285 -242
- data/doc/rdoc/classes/{Passenger → PhusionPassenger}/AbstractServer/ServerAlreadyStarted.html +3 -3
- data/doc/rdoc/classes/{Passenger → PhusionPassenger}/AbstractServer/ServerError.html +3 -3
- data/doc/rdoc/classes/{Passenger → PhusionPassenger}/AbstractServer/ServerNotStarted.html +3 -3
- data/doc/rdoc/classes/{Passenger → PhusionPassenger}/AbstractServer/UnknownMessage.html +3 -3
- data/doc/rdoc/classes/PhusionPassenger/AbstractServerCollection.html +598 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools.html +140 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess.html +247 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess/Instance.html +138 -0
- data/doc/rdoc/classes/{Passenger → PhusionPassenger}/AppInitError.html +36 -19
- data/doc/rdoc/classes/{Passenger → PhusionPassenger}/Application.html +81 -96
- data/doc/rdoc/classes/{Passenger → PhusionPassenger}/ConsoleTextTemplate.html +18 -18
- data/doc/rdoc/classes/{Passenger → PhusionPassenger}/FrameworkInitError.html +20 -18
- data/doc/rdoc/classes/{Passenger → PhusionPassenger}/HTMLTemplate.html +18 -18
- data/doc/rdoc/classes/{Passenger → PhusionPassenger}/InitializationError.html +9 -9
- data/doc/rdoc/classes/PhusionPassenger/InvalidPath.html +92 -0
- data/doc/rdoc/classes/{Passenger → PhusionPassenger}/MessageChannel.html +93 -92
- data/doc/rdoc/classes/{Passenger → PhusionPassenger}/NativeSupport.html +55 -25
- data/doc/rdoc/classes/PhusionPassenger/Rack.html +91 -0
- data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner.html +185 -0
- data/doc/rdoc/classes/PhusionPassenger/Rack/RequestHandler.html +182 -0
- data/doc/rdoc/classes/PhusionPassenger/Railz.html +95 -0
- data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner.html +424 -0
- data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner/Error.html +98 -0
- data/doc/rdoc/classes/PhusionPassenger/Railz/CGIFixed.html +200 -0
- data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner.html +444 -0
- data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner/Error.html +98 -0
- data/doc/rdoc/classes/PhusionPassenger/Railz/RequestHandler.html +154 -0
- data/doc/rdoc/classes/PhusionPassenger/SpawnManager.html +408 -0
- data/doc/rdoc/classes/{Passenger → PhusionPassenger}/UnknownError.html +13 -13
- data/doc/rdoc/classes/PhusionPassenger/Utils.html +687 -0
- data/doc/rdoc/classes/{Passenger → PhusionPassenger}/VersionNotFound.html +8 -8
- data/doc/rdoc/classes/PhusionPassenger/WSGI.html +89 -0
- data/doc/rdoc/classes/PhusionPassenger/WSGI/ApplicationSpawner.html +188 -0
- data/doc/rdoc/classes/PlatformInfo.html +663 -159
- data/doc/rdoc/classes/RakeExtensions.html +4 -4
- data/doc/rdoc/classes/Signal.html +134 -0
- data/doc/rdoc/created.rid +1 -1
- data/doc/rdoc/files/DEVELOPERS_TXT.html +15 -10
- data/doc/rdoc/files/README.html +5 -7
- data/doc/rdoc/files/ext/{passenger → phusion_passenger}/native_support_c.html +2 -2
- data/doc/rdoc/files/lib/{passenger → phusion_passenger}/abstract_request_handler_rb.html +7 -9
- data/doc/rdoc/files/lib/phusion_passenger/abstract_server_collection_rb.html +120 -0
- data/doc/rdoc/files/lib/{passenger → phusion_passenger}/abstract_server_rb.html +7 -10
- data/doc/rdoc/files/lib/phusion_passenger/admin_tools/control_process_rb.html +99 -0
- data/doc/rdoc/files/lib/phusion_passenger/admin_tools_rb.html +92 -0
- data/doc/rdoc/files/lib/{passenger → phusion_passenger}/application_rb.html +6 -8
- data/doc/rdoc/files/lib/{passenger → phusion_passenger}/console_text_template_rb.html +5 -7
- data/doc/rdoc/files/lib/{passenger → phusion_passenger}/constants_rb.html +4 -5
- data/doc/rdoc/files/lib/{passenger → phusion_passenger}/dependencies_rb.html +6 -8
- data/doc/rdoc/files/lib/phusion_passenger/events_rb.html +116 -0
- data/doc/rdoc/files/lib/{passenger → phusion_passenger}/exceptions_rb.html +5 -7
- data/doc/rdoc/files/lib/{passenger → phusion_passenger}/html_template_rb.html +5 -7
- data/doc/rdoc/files/lib/{passenger → phusion_passenger}/message_channel_rb.html +5 -7
- data/doc/rdoc/files/lib/{passenger → phusion_passenger}/platform_info_rb.html +6 -7
- data/doc/rdoc/files/lib/phusion_passenger/rack/application_spawner_rb.html +123 -0
- data/doc/rdoc/files/lib/phusion_passenger/rack/request_handler_rb.html +117 -0
- data/doc/rdoc/files/lib/{passenger/utils_rb.html → phusion_passenger/railz/application_spawner_rb.html} +24 -17
- data/doc/rdoc/files/lib/phusion_passenger/railz/cgi_fixed_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/railz/framework_spawner_rb.html +139 -0
- data/doc/rdoc/files/lib/phusion_passenger/railz/request_handler_rb.html +118 -0
- data/doc/rdoc/files/lib/{passenger → phusion_passenger}/simple_benchmarking_rb.html +5 -7
- data/doc/rdoc/files/lib/{passenger → phusion_passenger}/spawn_manager_rb.html +40 -24
- data/doc/rdoc/files/lib/phusion_passenger/utils_rb.html +169 -0
- data/doc/rdoc/files/lib/phusion_passenger/wsgi/application_spawner_rb.html +120 -0
- data/doc/rdoc/files/lib/rake/extensions_rb.html +3 -4
- data/doc/rdoc/fr_class_index.html +37 -19
- data/doc/rdoc/fr_file_index.html +25 -14
- data/doc/rdoc/fr_method_index.html +145 -74
- data/ext/apache2/Application.h +145 -44
- data/ext/apache2/ApplicationPool.h +27 -29
- data/ext/apache2/ApplicationPoolServer.h +183 -72
- data/ext/apache2/ApplicationPoolServerExecutable.cpp +249 -42
- data/ext/apache2/Bucket.cpp +61 -9
- data/ext/apache2/Bucket.h +15 -8
- data/ext/apache2/CachedFileStat.cpp +114 -0
- data/ext/apache2/CachedFileStat.h +169 -0
- data/ext/apache2/Configuration.cpp +213 -22
- data/ext/apache2/Configuration.h +176 -13
- data/ext/apache2/DirectoryMapper.h +287 -0
- data/ext/apache2/Exceptions.h +30 -12
- data/ext/apache2/FileChecker.h +108 -0
- data/ext/apache2/Hooks.cpp +709 -493
- data/ext/apache2/LICENSE-CNRI.TXT +15 -0
- data/ext/apache2/Logging.h +26 -22
- data/ext/apache2/MessageChannel.h +124 -15
- data/ext/apache2/PoolOptions.h +283 -0
- data/ext/apache2/SpawnManager.h +75 -99
- data/ext/apache2/StandardApplicationPool.h +296 -195
- data/ext/apache2/SystemTime.cpp +28 -0
- data/ext/apache2/SystemTime.h +82 -0
- data/ext/apache2/Utils.cpp +172 -18
- data/ext/apache2/Utils.h +124 -19
- data/ext/boost/cstdint.hpp +4 -2
- data/ext/boost/current_function.hpp +67 -0
- data/ext/boost/detail/sp_counted_base.hpp +4 -4
- data/ext/boost/thread/exceptions.hpp +2 -1
- data/ext/boost/thread/pthread/thread.hpp +11 -3
- data/ext/boost/thread/pthread/thread_data.hpp +2 -1
- data/ext/oxt/backtrace.cpp +172 -0
- data/ext/oxt/backtrace.hpp +135 -0
- data/ext/oxt/detail/backtrace_disabled.hpp +39 -0
- data/ext/oxt/detail/backtrace_enabled.hpp +155 -0
- data/ext/oxt/detail/spin_lock_gcc_x86.hpp +82 -0
- data/ext/oxt/detail/spin_lock_portable.hpp +38 -0
- data/ext/oxt/detail/spin_lock_pthreads.hpp +97 -0
- data/ext/oxt/detail/tracable_exception_disabled.hpp +46 -0
- data/ext/oxt/detail/tracable_exception_enabled.hpp +48 -0
- data/ext/oxt/macros.hpp +58 -0
- data/ext/oxt/spin_lock.hpp +55 -0
- data/ext/{apache2/System.cpp → oxt/system_calls.cpp} +87 -52
- data/ext/oxt/system_calls.hpp +234 -0
- data/ext/oxt/thread.cpp +32 -0
- data/ext/oxt/thread.hpp +223 -0
- data/ext/oxt/tracable_exception.cpp +87 -0
- data/ext/oxt/tracable_exception.hpp +35 -0
- data/{lib/passenger/constants.rb → ext/phusion_passenger/extconf.rb} +14 -9
- data/ext/{passenger → phusion_passenger}/native_support.c +33 -6
- data/lib/{passenger → phusion_passenger}/abstract_request_handler.rb +209 -93
- data/lib/{passenger → phusion_passenger}/abstract_server.rb +23 -8
- data/lib/phusion_passenger/abstract_server_collection.rb +301 -0
- data/lib/phusion_passenger/admin_tools.rb +25 -0
- data/lib/phusion_passenger/admin_tools/control_process.rb +107 -0
- data/lib/{passenger → phusion_passenger}/application.rb +13 -16
- data/lib/{passenger → phusion_passenger}/console_text_template.rb +2 -2
- data/{ext/passenger/extconf.rb → lib/phusion_passenger/constants.rb} +5 -5
- data/lib/{passenger → phusion_passenger}/dependencies.rb +38 -32
- data/lib/phusion_passenger/events.rb +45 -0
- data/lib/{passenger → phusion_passenger}/exceptions.rb +12 -5
- data/lib/{passenger → phusion_passenger}/html_template.rb +2 -2
- data/lib/{passenger → phusion_passenger}/message_channel.rb +3 -2
- data/lib/phusion_passenger/platform_info.rb +500 -0
- data/lib/{passenger → phusion_passenger}/rack/application_spawner.rb +29 -22
- data/lib/{passenger → phusion_passenger}/rack/request_handler.rb +14 -9
- data/lib/{passenger → phusion_passenger}/railz/application_spawner.rb +94 -74
- data/lib/{passenger → phusion_passenger}/railz/cgi_fixed.rb +2 -2
- data/lib/{passenger → phusion_passenger}/railz/framework_spawner.rb +86 -98
- data/lib/{passenger → phusion_passenger}/railz/request_handler.rb +6 -6
- data/lib/{passenger → phusion_passenger}/simple_benchmarking.rb +0 -0
- data/lib/{passenger → phusion_passenger}/spawn_manager.rb +136 -128
- data/lib/{passenger → phusion_passenger}/templates/apache2_config_snippets.txt.erb +0 -0
- data/lib/{passenger → phusion_passenger}/templates/apache_must_be_compiled_with_compatible_mpm.txt.erb +0 -0
- data/lib/phusion_passenger/templates/app_exited_during_initialization.html.erb +38 -0
- data/lib/{passenger → phusion_passenger}/templates/app_init_error.html.erb +0 -0
- data/lib/{passenger → phusion_passenger}/templates/database_error.html.erb +0 -0
- data/lib/{passenger → phusion_passenger}/templates/deployment_example.txt.erb +1 -1
- data/lib/{passenger → phusion_passenger}/templates/error_layout.css +0 -0
- data/lib/{passenger → phusion_passenger}/templates/error_layout.html.erb +0 -0
- data/lib/{passenger → phusion_passenger}/templates/framework_init_error.html.erb +0 -0
- data/lib/{passenger → phusion_passenger}/templates/general_error.html.erb +0 -0
- data/lib/{passenger → phusion_passenger}/templates/invalid_app_root.html.erb +1 -1
- data/lib/{passenger → phusion_passenger}/templates/load_error.html.erb +0 -0
- data/lib/{passenger → phusion_passenger}/templates/no_write_permission_to_passenger_root.txt.erb +0 -0
- data/lib/{passenger → phusion_passenger}/templates/possible_solutions_for_compilation_and_installation_problems.txt.erb +0 -0
- data/lib/{passenger → phusion_passenger}/templates/run_installer_as_root.txt.erb +0 -0
- data/lib/{passenger → phusion_passenger}/templates/version_not_found.html.erb +0 -0
- data/lib/{passenger → phusion_passenger}/templates/welcome.txt.erb +0 -0
- data/lib/{passenger → phusion_passenger}/utils.rb +210 -44
- data/lib/{passenger → phusion_passenger}/wsgi/application_spawner.rb +18 -15
- data/lib/{passenger → phusion_passenger}/wsgi/request_handler.py +7 -1
- data/man/passenger-memory-stats.8 +1 -1
- data/misc/render_error_pages.rb +1 -1
- data/test/ApplicationPoolServerTest.cpp +0 -28
- data/test/ApplicationPoolServer_ApplicationPoolTest.cpp +4 -0
- data/test/ApplicationPoolTest.cpp +307 -69
- data/test/CachedFileStatTest.cpp +262 -0
- data/test/FileCheckerTest.cpp +79 -0
- data/test/MessageChannelTest.cpp +3 -3
- data/test/PoolOptionsTest.cpp +37 -0
- data/test/SpawnManagerTest.cpp +4 -4
- data/test/StandardApplicationPoolTest.cpp +4 -0
- data/test/SystemTimeTest.cpp +37 -0
- data/test/UtilsTest.cpp +137 -0
- data/test/integration_tests.rb +270 -23
- data/test/oxt/backtrace_test.cpp +128 -0
- data/test/oxt/oxt_test_main.cpp +25 -0
- data/test/oxt/syscall_interruption_test.cpp +50 -0
- data/test/ruby/abstract_request_handler_spec.rb +83 -0
- data/test/ruby/abstract_server_collection_spec.rb +246 -0
- data/test/ruby/application_spec.rb +3 -3
- data/test/ruby/message_channel_spec.rb +2 -2
- data/test/ruby/rack/application_spawner_spec.rb +3 -5
- data/test/ruby/rails/application_spawner_spec.rb +54 -15
- data/test/ruby/rails/framework_spawner_spec.rb +6 -8
- data/test/ruby/rails/minimal_spawner_spec.rb +29 -0
- data/test/ruby/rails/spawner_error_handling_spec.rb +1 -1
- data/test/ruby/rails/spawner_privilege_lowering_spec.rb +3 -3
- data/test/ruby/spawn_manager_spec.rb +23 -12
- data/test/ruby/utils_spec.rb +36 -2
- data/test/ruby/wsgi/application_spawner_spec.rb +47 -0
- data/test/stub/apache2/httpd.conf.erb +3 -5
- data/test/stub/message_channel.rb +2 -2
- data/test/stub/message_channel_2.rb +2 -2
- data/test/stub/message_channel_3.rb +3 -3
- data/test/stub/minimal-railsapp/README +0 -0
- data/test/stub/minimal-railsapp/config/application.rb +0 -0
- data/test/stub/minimal-railsapp/config/environment.rb +0 -0
- data/test/stub/minimal-railsapp/vendor/rails/actionmailer/lib/action_mailer.rb +0 -0
- data/test/stub/minimal-railsapp/vendor/rails/actionpack/lib/action_controller.rb +0 -0
- data/test/stub/minimal-railsapp/vendor/rails/actionpack/lib/action_pack.rb +0 -0
- data/test/stub/minimal-railsapp/vendor/rails/actionpack/lib/action_view.rb +0 -0
- data/test/stub/minimal-railsapp/vendor/rails/activerecord/lib/active_record.rb +0 -0
- data/test/stub/minimal-railsapp/vendor/rails/activeresource/lib/active_resource.rb +0 -0
- data/test/stub/minimal-railsapp/vendor/rails/activesupport/lib/active_support.rb +0 -0
- data/test/stub/minimal-railsapp/vendor/rails/activesupport/lib/active_support/whiny_nil.rb +0 -0
- data/test/stub/minimal-railsapp/vendor/rails/railties/lib/dispatcher.rb +0 -0
- data/test/stub/minimal-railsapp/vendor/rails/railties/lib/initializer.rb +0 -0
- data/test/stub/minimal-railsapp/vendor/rails/railties/lib/ruby_version_check.rb +0 -0
- data/test/stub/rails_apps/foobar/app/controllers/foo_controller.rb +8 -0
- data/test/stub/rails_apps/foobar/config/environments/development.rb +1 -2
- data/test/stub/rails_apps/mycook/app/controllers/welcome_controller.rb +21 -1
- data/test/stub/rails_apps/mycook/sites/some.site/public/uploads.html +26 -0
- data/test/stub/rails_apps/mycook/sites/some.site/public/welcome/cached.html +26 -0
- data/test/stub/railsapp/app/controllers/application.rb +0 -0
- data/test/stub/railsapp/app/controllers/bar_controller_1.rb +0 -0
- data/test/stub/railsapp/app/controllers/bar_controller_2.rb +1 -1
- data/test/stub/railsapp/app/controllers/foo_controller.rb +4 -0
- data/test/stub/railsapp/app/helpers/application_helper.rb +0 -0
- data/test/stub/railsapp/config/boot.rb +0 -0
- data/test/stub/railsapp/config/database.yml +0 -0
- data/test/stub/railsapp/config/environment.rb +0 -0
- data/test/stub/railsapp/config/environments/development.rb +0 -0
- data/test/stub/railsapp/config/environments/production.rb +0 -0
- data/test/stub/railsapp/config/initializers/inflections.rb +0 -0
- data/test/stub/railsapp/config/initializers/mime_types.rb +0 -0
- data/test/stub/railsapp/config/routes.rb +0 -0
- data/test/stub/railsapp/public/useless.txt +0 -0
- data/test/stub/spawn_server.rb +3 -4
- data/test/stub/wsgi/passenger_wsgi.pyc +0 -0
- data/test/support/apache2_controller.rb +57 -7
- data/test/support/tut.h +15 -0
- data/vendor/README +12 -0
- data/vendor/README_FOR_PACKAGERS +1 -0
- data/vendor/rack-0.9.1/AUTHORS +8 -0
- data/vendor/rack-0.9.1/COPYING +18 -0
- data/vendor/rack-0.9.1/ChangeLog +1423 -0
- data/vendor/rack-0.9.1/KNOWN-ISSUES +18 -0
- data/vendor/rack-0.9.1/README +306 -0
- data/vendor/rack-0.9.1/Rakefile +188 -0
- data/vendor/rack-0.9.1/SPEC +129 -0
- data/vendor/rack-0.9.1/lib/rack.rb +86 -0
- data/vendor/rack-0.9.1/lib/rack/adapter/camping.rb +22 -0
- data/vendor/rack-0.9.1/lib/rack/auth/abstract/handler.rb +28 -0
- data/vendor/rack-0.9.1/lib/rack/auth/abstract/request.rb +37 -0
- data/vendor/rack-0.9.1/lib/rack/auth/basic.rb +58 -0
- data/vendor/rack-0.9.1/lib/rack/auth/digest/md5.rb +124 -0
- data/vendor/rack-0.9.1/lib/rack/auth/digest/nonce.rb +51 -0
- data/vendor/rack-0.9.1/lib/rack/auth/digest/params.rb +55 -0
- data/vendor/rack-0.9.1/lib/rack/auth/digest/request.rb +40 -0
- data/vendor/rack-0.9.1/lib/rack/auth/openid.rb +438 -0
- data/vendor/rack-0.9.1/lib/rack/builder.rb +67 -0
- data/vendor/rack-0.9.1/lib/rack/cascade.rb +36 -0
- data/vendor/rack-0.9.1/lib/rack/commonlogger.rb +61 -0
- data/vendor/rack-0.9.1/lib/rack/conditionalget.rb +43 -0
- data/vendor/rack-0.9.1/lib/rack/content_length.rb +25 -0
- data/vendor/rack-0.9.1/lib/rack/deflater.rb +87 -0
- data/vendor/rack-0.9.1/lib/rack/directory.rb +150 -0
- data/vendor/rack-0.9.1/lib/rack/file.rb +85 -0
- data/vendor/rack-0.9.1/lib/rack/handler.rb +48 -0
- data/vendor/rack-0.9.1/lib/rack/handler/cgi.rb +57 -0
- data/vendor/rack-0.9.1/lib/rack/handler/evented_mongrel.rb +8 -0
- data/vendor/rack-0.9.1/lib/rack/handler/fastcgi.rb +86 -0
- data/vendor/rack-0.9.1/lib/rack/handler/lsws.rb +52 -0
- data/vendor/rack-0.9.1/lib/rack/handler/mongrel.rb +82 -0
- data/vendor/rack-0.9.1/lib/rack/handler/scgi.rb +57 -0
- data/vendor/rack-0.9.1/lib/rack/handler/swiftiplied_mongrel.rb +8 -0
- data/vendor/rack-0.9.1/lib/rack/handler/thin.rb +15 -0
- data/vendor/rack-0.9.1/lib/rack/handler/webrick.rb +61 -0
- data/vendor/rack-0.9.1/lib/rack/head.rb +19 -0
- data/vendor/rack-0.9.1/lib/rack/lint.rb +465 -0
- data/vendor/rack-0.9.1/lib/rack/lobster.rb +65 -0
- data/vendor/rack-0.9.1/lib/rack/methodoverride.rb +27 -0
- data/vendor/rack-0.9.1/lib/rack/mime.rb +204 -0
- data/vendor/rack-0.9.1/lib/rack/mock.rb +160 -0
- data/vendor/rack-0.9.1/lib/rack/recursive.rb +57 -0
- data/vendor/rack-0.9.1/lib/rack/reloader.rb +64 -0
- data/vendor/rack-0.9.1/lib/rack/request.rb +218 -0
- data/vendor/rack-0.9.1/lib/rack/response.rb +171 -0
- data/vendor/rack-0.9.1/lib/rack/session/abstract/id.rb +153 -0
- data/vendor/rack-0.9.1/lib/rack/session/cookie.rb +89 -0
- data/vendor/rack-0.9.1/lib/rack/session/memcache.rb +97 -0
- data/vendor/rack-0.9.1/lib/rack/session/pool.rb +73 -0
- data/vendor/rack-0.9.1/lib/rack/showexceptions.rb +348 -0
- data/vendor/rack-0.9.1/lib/rack/showstatus.rb +106 -0
- data/vendor/rack-0.9.1/lib/rack/static.rb +38 -0
- data/vendor/rack-0.9.1/lib/rack/urlmap.rb +48 -0
- data/vendor/rack-0.9.1/lib/rack/utils.rb +347 -0
- metadata +1197 -1055
- data/doc/cxxapi/System_8h-source.html +0 -251
- data/doc/cxxapi/classDirectoryMapper-members.html +0 -38
- data/doc/cxxapi/classDirectoryMapper.html +0 -203
- data/doc/cxxapi/classPassenger_1_1Thread.html +0 -100
- data/doc/cxxapi/classboost_1_1this__thread_1_1disable__syscall__interruption.html +0 -46
- data/doc/cxxapi/classboost_1_1this__thread_1_1restore__syscall__interruption-members.html +0 -33
- data/doc/cxxapi/classboost_1_1this__thread_1_1restore__syscall__interruption.html +0 -44
- data/doc/cxxapi/namespacePassenger.html +0 -208
- data/doc/cxxapi/namespacePassenger_1_1InterruptableCalls.html +0 -43
- data/doc/cxxapi/namespacemembers.html +0 -70
- data/doc/cxxapi/namespacemembers_func.html +0 -66
- data/doc/cxxapi/namespacemembers_type.html +0 -46
- data/doc/cxxapi/namespaces.html +0 -35
- data/doc/rdoc/classes/Passenger.html +0 -136
- data/doc/rdoc/classes/Passenger/AbstractRequestHandler.html +0 -402
- data/doc/rdoc/classes/Passenger/SpawnManager.html +0 -379
- data/doc/rdoc/classes/Passenger/Utils.html +0 -578
- data/ext/apache2/System.h +0 -228
- data/lib/passenger/platform_info.rb +0 -302
- data/lib/passenger/templates/app_exited_during_initialization.html.erb +0 -19
- data/test/stub/apache2/httpd.conf +0 -75
- data/test/stub/rails_apps/foobar/config/environments/test.rb +0 -22
- data/test/stub/rails_apps/mycook/config/environments/test.rb +0 -22
- data/test/stub/railsapp/config/environments/test.rb +0 -22
- data/test/stub/railsapp2/config/environments/test.rb +0 -22
@@ -14,9 +14,9 @@
|
|
14
14
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
15
15
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
16
16
|
|
17
|
-
require '
|
18
|
-
require '
|
19
|
-
module
|
17
|
+
require 'phusion_passenger/abstract_request_handler'
|
18
|
+
require 'phusion_passenger/railz/cgi_fixed'
|
19
|
+
module PhusionPassenger
|
20
20
|
module Railz
|
21
21
|
|
22
22
|
# A request handler for Ruby on Rails applications.
|
@@ -24,8 +24,8 @@ class RequestHandler < AbstractRequestHandler
|
|
24
24
|
NINJA_PATCHING_LOCK = Mutex.new
|
25
25
|
@@ninja_patched_action_controller = false
|
26
26
|
|
27
|
-
def initialize(owner_pipe)
|
28
|
-
super(owner_pipe)
|
27
|
+
def initialize(owner_pipe, options = {})
|
28
|
+
super(owner_pipe, options)
|
29
29
|
NINJA_PATCHING_LOCK.synchronize do
|
30
30
|
ninja_patch_action_controller
|
31
31
|
end
|
@@ -58,4 +58,4 @@ private
|
|
58
58
|
end
|
59
59
|
|
60
60
|
end # module Railz
|
61
|
-
end # module
|
61
|
+
end # module PhusionPassenger
|
File without changes
|
@@ -16,10 +16,17 @@
|
|
16
16
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
17
17
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
18
18
|
|
19
|
-
require '
|
20
|
-
require '
|
21
|
-
require '
|
22
|
-
|
19
|
+
require 'phusion_passenger/abstract_server'
|
20
|
+
require 'phusion_passenger/abstract_server_collection'
|
21
|
+
require 'phusion_passenger/constants'
|
22
|
+
require 'phusion_passenger/utils'
|
23
|
+
|
24
|
+
# Define a constant with a name that's unlikely to clash with anything the
|
25
|
+
# application defines, so that they can detect whether they're running under
|
26
|
+
# Phusion Passenger.
|
27
|
+
IN_PHUSION_PASSENGER = true
|
28
|
+
|
29
|
+
module PhusionPassenger
|
23
30
|
|
24
31
|
# The spawn manager is capable of spawning Ruby on Rails or Rack application
|
25
32
|
# instances. It acts like a simple fascade for the rest of the spawn manager
|
@@ -30,7 +37,7 @@ module Passenger
|
|
30
37
|
# tested. Don't forget to call cleanup after the server's main loop has
|
31
38
|
# finished.
|
32
39
|
#
|
33
|
-
# == Ruby on Rails optimizations
|
40
|
+
# == Ruby on Rails optimizations
|
34
41
|
#
|
35
42
|
# Spawning a Ruby on Rails application is usually slow. But SpawnManager
|
36
43
|
# will preload and cache Ruby on Rails frameworks, as well as application
|
@@ -47,27 +54,25 @@ class SpawnManager < AbstractServer
|
|
47
54
|
|
48
55
|
def initialize
|
49
56
|
super()
|
50
|
-
@spawners =
|
51
|
-
@lock = Mutex.new
|
52
|
-
@cond = ConditionVariable.new
|
53
|
-
@cleaner_thread = Thread.new do
|
54
|
-
cleaner_thread_main
|
55
|
-
end
|
57
|
+
@spawners = AbstractServerCollection.new
|
56
58
|
define_message_handler(:spawn_application, :handle_spawn_application)
|
57
59
|
define_message_handler(:reload, :handle_reload)
|
58
60
|
define_signal_handler('SIGHUP', :reload)
|
59
61
|
|
62
|
+
# Start garbage collector in order to free up some existing
|
63
|
+
# heap slots. This prevents the heap from growing unnecessarily
|
64
|
+
# during the startup phase.
|
60
65
|
GC.start
|
61
66
|
if GC.copy_on_write_friendly?
|
62
67
|
# Preload libraries for copy-on-write semantics.
|
63
68
|
require 'base64'
|
64
|
-
require '
|
65
|
-
require '
|
66
|
-
require '
|
67
|
-
require '
|
68
|
-
require '
|
69
|
-
require '
|
70
|
-
require '
|
69
|
+
require 'phusion_passenger/application'
|
70
|
+
require 'phusion_passenger/railz/framework_spawner'
|
71
|
+
require 'phusion_passenger/railz/application_spawner'
|
72
|
+
require 'phusion_passenger/rack/application_spawner'
|
73
|
+
require 'phusion_passenger/html_template'
|
74
|
+
require 'phusion_passenger/platform_info'
|
75
|
+
require 'phusion_passenger/exceptions'
|
71
76
|
|
72
77
|
# Commonly used libraries.
|
73
78
|
['mysql', 'sqlite3'].each do |lib|
|
@@ -80,51 +85,84 @@ class SpawnManager < AbstractServer
|
|
80
85
|
end
|
81
86
|
end
|
82
87
|
|
83
|
-
# Spawn
|
84
|
-
# returned, which represents the spawned
|
85
|
-
#
|
86
|
-
#
|
87
|
-
# +lowest_user+ and +environment+ parameters.
|
88
|
+
# Spawn an application with the given spawn options. When successful, an
|
89
|
+
# Application object will be returned, which represents the spawned application.
|
90
|
+
# At least one option must be given: +app_root+. This is the application's root
|
91
|
+
# folder.
|
88
92
|
#
|
89
|
-
#
|
90
|
-
# When "smart" is specified (the default), SpawnManager will internally cache the
|
91
|
-
# code of applications, in order to speed up future spawning attempts. This implies
|
92
|
-
# that, if you've changed the application's code, you must do one of these things:
|
93
|
-
# - Restart this SpawnManager by calling AbstractServer#stop, then AbstractServer#start.
|
94
|
-
# - Reload the application by calling reload with the correct app_root argument.
|
95
|
-
# Caching however can be incompatible with some applications.
|
93
|
+
# Other options are:
|
96
94
|
#
|
97
|
-
#
|
98
|
-
#
|
95
|
+
# ['lower_privilege', 'lowest_user' and 'environment']
|
96
|
+
# See Railz::ApplicationSpawner.new for an explanation of these options.
|
97
|
+
#
|
98
|
+
# ['app_type']
|
99
|
+
# What kind of application is being spawned. Either "rails" (default), "rack" or "wsgi".
|
100
|
+
#
|
101
|
+
# ['spawn_method']
|
102
|
+
# May be one of "smart", "smart-lv2" or "conservative". When "smart" is specified,
|
103
|
+
# SpawnManager will internally cache the code of Rails applications, in
|
104
|
+
# order to speed up future spawning attempts. This implies that, if you've changed
|
105
|
+
# the application's
|
106
|
+
# code, you must do one of these things:
|
107
|
+
# - Restart this SpawnManager by calling AbstractServer#stop, then AbstractServer#start.
|
108
|
+
# - Reload the application by calling reload with the correct app_root argument.
|
109
|
+
#
|
110
|
+
# "smart" caches the Rails framework code in a framework spawner server, and application
|
111
|
+
# code in an application spawner server. Sometimes it is desirable to skip the
|
112
|
+
# framework spawning and going directly for the application spawner instead. The
|
113
|
+
# "smart-lv2" method allows you to do that.
|
114
|
+
#
|
115
|
+
# Caching however can be incompatible with some applications. The "conservative"
|
116
|
+
# spawning method does not involve any caching at all. Spawning will be slower,
|
117
|
+
# but is guaranteed to be compatible with all applications.
|
118
|
+
#
|
119
|
+
# The default spawn method is "smart-lv2".
|
120
|
+
#
|
121
|
+
# ['framework_spawner_timeout' and 'app_spawner_timeout']
|
122
|
+
# These options allow you to specify the maximum idle timeout, in seconds, of the
|
123
|
+
# framework spawner servers and application spawner servers that will be started under
|
124
|
+
# the hood. These options are only used if +app_type+ equals "rails".
|
125
|
+
#
|
126
|
+
# A timeout of 0 means that the spawner server should never idle timeout. A timeout of
|
127
|
+
# -1 means that the default timeout value should be used. The default value is -1.
|
99
128
|
#
|
100
|
-
#
|
101
|
-
# -
|
129
|
+
# <b>Exceptions:</b>
|
130
|
+
# - InvalidPath: +app_root+ doesn't appear to be a valid Ruby on Rails application root.
|
102
131
|
# - VersionNotFound: The Ruby on Rails framework version that the given application requires
|
103
132
|
# is not installed.
|
104
133
|
# - AbstractServer::ServerError: One of the server processes exited unexpectedly.
|
105
134
|
# - FrameworkInitError: The Ruby on Rails framework that the application requires could not be loaded.
|
106
135
|
# - AppInitError: The application raised an exception or called exit() during startup.
|
107
|
-
def spawn_application(
|
108
|
-
|
109
|
-
|
110
|
-
|
136
|
+
def spawn_application(options)
|
137
|
+
if !options["app_root"]
|
138
|
+
raise ArgumentError, "The 'app_root' option must be given."
|
139
|
+
end
|
140
|
+
options = sanitize_spawn_options(options)
|
141
|
+
|
142
|
+
if options["app_type"] == "rails"
|
143
|
+
if !defined?(Railz::FrameworkSpawner)
|
144
|
+
require 'phusion_passenger/application'
|
145
|
+
require 'phusion_passenger/railz/framework_spawner'
|
146
|
+
require 'phusion_passenger/railz/application_spawner'
|
147
|
+
end
|
148
|
+
return spawn_rails_application(options)
|
149
|
+
elsif options["app_type"] == "rack"
|
111
150
|
if !defined?(Rack::ApplicationSpawner)
|
112
|
-
require '
|
151
|
+
require 'phusion_passenger/rack/application_spawner'
|
113
152
|
end
|
114
|
-
return Rack::ApplicationSpawner.spawn_application(
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
153
|
+
return Rack::ApplicationSpawner.spawn_application(
|
154
|
+
options["app_root"], options
|
155
|
+
)
|
156
|
+
elsif options["app_type"] == "wsgi"
|
157
|
+
require 'phusion_passenger/wsgi/application_spawner'
|
158
|
+
return WSGI::ApplicationSpawner.spawn_application(
|
159
|
+
options["app_root"],
|
160
|
+
options["lower_privilege"],
|
161
|
+
options["lowest_user"],
|
162
|
+
options["environment"]
|
163
|
+
)
|
120
164
|
else
|
121
|
-
|
122
|
-
require 'passenger/application'
|
123
|
-
require 'passenger/railz/framework_spawner'
|
124
|
-
require 'passenger/railz/application_spawner'
|
125
|
-
end
|
126
|
-
return spawn_rails_application(app_root, lower_privilege, lowest_user,
|
127
|
-
environment, spawn_method)
|
165
|
+
raise ArgumentError, "Unknown 'app_type' value '#{options["app_type"]}'."
|
128
166
|
end
|
129
167
|
end
|
130
168
|
|
@@ -145,23 +183,27 @@ class SpawnManager < AbstractServer
|
|
145
183
|
if app_root
|
146
184
|
begin
|
147
185
|
app_root = normalize_path(app_root)
|
148
|
-
rescue
|
186
|
+
rescue InvalidPath
|
149
187
|
end
|
150
188
|
end
|
151
|
-
@
|
189
|
+
@spawners.synchronize do
|
152
190
|
if app_root
|
153
191
|
# Delete associated ApplicationSpawner.
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
192
|
+
@spawners.delete("app:#{app_root}")
|
193
|
+
else
|
194
|
+
# Delete all ApplicationSpawners.
|
195
|
+
keys_to_delete = []
|
196
|
+
@spawners.each_pair do |key, spawner|
|
197
|
+
if spawner.is_a?(Railz::ApplicationSpawner)
|
198
|
+
keys_to_delete << key
|
159
199
|
end
|
200
|
+
end
|
201
|
+
keys_to_delete.each do |key|
|
160
202
|
@spawners.delete(key)
|
161
203
|
end
|
162
204
|
end
|
163
|
-
@spawners.
|
164
|
-
# Reload FrameworkSpawners.
|
205
|
+
@spawners.each do |spawner|
|
206
|
+
# Reload all FrameworkSpawners.
|
165
207
|
if spawner.respond_to?(:reload)
|
166
208
|
spawner.reload(app_root)
|
167
209
|
end
|
@@ -171,86 +213,77 @@ class SpawnManager < AbstractServer
|
|
171
213
|
|
172
214
|
# Cleanup resources. Should be called when this SpawnManager is no longer needed.
|
173
215
|
def cleanup
|
174
|
-
@
|
175
|
-
@cond.signal
|
176
|
-
end
|
177
|
-
@cleaner_thread.join
|
178
|
-
@lock.synchronize do
|
179
|
-
@spawners.each_value do |spawner|
|
180
|
-
if spawner.started?
|
181
|
-
spawner.stop
|
182
|
-
end
|
183
|
-
end
|
184
|
-
@spawners.clear
|
185
|
-
end
|
216
|
+
@spawners.cleanup
|
186
217
|
end
|
187
218
|
|
188
219
|
private
|
189
|
-
def spawn_rails_application(
|
190
|
-
|
191
|
-
|
220
|
+
def spawn_rails_application(options)
|
221
|
+
spawn_method = options["spawn_method"]
|
222
|
+
app_root = options["app_root"]
|
223
|
+
|
224
|
+
if [nil, "", "smart", "smart-lv2"].include?(spawn_method)
|
192
225
|
spawner_must_be_started = true
|
193
|
-
|
226
|
+
if spawn_method != "smart-lv2"
|
227
|
+
framework_version = Application.detect_framework_version(app_root)
|
228
|
+
end
|
194
229
|
if framework_version.nil? || framework_version == :vendor
|
195
230
|
app_root = normalize_path(app_root)
|
196
231
|
key = "app:#{app_root}"
|
197
232
|
create_spawner = proc do
|
198
|
-
Railz::ApplicationSpawner.new(app_root,
|
199
|
-
lowest_user, environment)
|
233
|
+
Railz::ApplicationSpawner.new(app_root, options)
|
200
234
|
end
|
235
|
+
spawner_timeout = options["app_spawner_timeout"]
|
201
236
|
else
|
202
237
|
key = "version:#{framework_version}"
|
203
238
|
create_spawner = proc do
|
204
239
|
Railz::FrameworkSpawner.new(:version => framework_version)
|
205
240
|
end
|
241
|
+
spawner_timeout = options["framework_spawner_timeout"]
|
206
242
|
end
|
207
243
|
else
|
208
244
|
app_root = normalize_path(app_root)
|
209
245
|
key = "app:#{app_root}"
|
210
246
|
create_spawner = proc do
|
211
|
-
Railz::ApplicationSpawner.new(app_root,
|
247
|
+
Railz::ApplicationSpawner.new(app_root, options)
|
212
248
|
end
|
249
|
+
spawner_timeout = options["app_spawner_timeout"]
|
213
250
|
spawner_must_be_started = false
|
214
251
|
end
|
215
252
|
|
216
|
-
|
217
|
-
|
218
|
-
spawner = @spawners[key]
|
219
|
-
if !spawner
|
253
|
+
@spawners.synchronize do
|
254
|
+
spawner = @spawners.lookup_or_add(key) do
|
220
255
|
spawner = create_spawner.call
|
256
|
+
if spawner_timeout != -1
|
257
|
+
spawner.max_idle_time = spawner_timeout
|
258
|
+
end
|
221
259
|
if spawner_must_be_started
|
222
260
|
spawner.start
|
223
261
|
end
|
224
|
-
|
262
|
+
spawner
|
225
263
|
end
|
226
|
-
spawner.time = Time.now
|
227
264
|
begin
|
228
265
|
if spawner.is_a?(Railz::FrameworkSpawner)
|
229
|
-
return spawner.spawn_application(app_root,
|
230
|
-
lowest_user, environment)
|
266
|
+
return spawner.spawn_application(app_root, options)
|
231
267
|
elsif spawner.started?
|
232
268
|
return spawner.spawn_application
|
233
269
|
else
|
234
270
|
return spawner.spawn_application!
|
235
271
|
end
|
236
272
|
rescue AbstractServer::ServerError
|
237
|
-
if spawner.started?
|
238
|
-
spawner.stop
|
239
|
-
end
|
240
273
|
@spawners.delete(key)
|
241
274
|
raise
|
242
275
|
end
|
243
276
|
end
|
244
277
|
end
|
245
278
|
|
246
|
-
def handle_spawn_application(
|
247
|
-
|
248
|
-
lower_privilege = lower_privilege == "true"
|
279
|
+
def handle_spawn_application(*options)
|
280
|
+
options = sanitize_spawn_options(Hash[*options])
|
249
281
|
app = nil
|
282
|
+
app_root = options["app_root"]
|
283
|
+
app_type = options["app_type"]
|
250
284
|
begin
|
251
|
-
app = spawn_application(
|
252
|
-
|
253
|
-
rescue ArgumentError => e
|
285
|
+
app = spawn_application(options)
|
286
|
+
rescue InvalidPath => e
|
254
287
|
send_error_page(client, 'invalid_app_root', :error => e, :app_root => app_root)
|
255
288
|
rescue AbstractServer::ServerError => e
|
256
289
|
send_error_page(client, 'general_error', :error => e)
|
@@ -269,7 +302,7 @@ private
|
|
269
302
|
Gem.clear_paths
|
270
303
|
send_error_page(client, 'load_error', :error => e, :app_root => app_root,
|
271
304
|
:app_name => app_name(app_type))
|
272
|
-
elsif e.child_exception.
|
305
|
+
elsif e.child_exception.is_a?(SystemExit)
|
273
306
|
send_error_page(client, 'app_exited_during_initialization', :error => e,
|
274
307
|
:app_root => app_root, :app_name => app_name(app_type))
|
275
308
|
else
|
@@ -282,7 +315,8 @@ private
|
|
282
315
|
if app
|
283
316
|
begin
|
284
317
|
client.write('ok')
|
285
|
-
client.write(app.pid, app.listen_socket_name,
|
318
|
+
client.write(app.pid, app.listen_socket_name,
|
319
|
+
app.listen_socket_type)
|
286
320
|
client.send_io(app.owner_pipe)
|
287
321
|
rescue Errno::EPIPE
|
288
322
|
# The Apache module may be interrupted during a spawn command,
|
@@ -297,35 +331,9 @@ private
|
|
297
331
|
reload(app_root)
|
298
332
|
end
|
299
333
|
|
300
|
-
def cleaner_thread_main
|
301
|
-
@lock.synchronize do
|
302
|
-
while true
|
303
|
-
if @cond.timed_wait(@lock, SPAWNER_CLEAN_INTERVAL)
|
304
|
-
break
|
305
|
-
else
|
306
|
-
current_time = Time.now
|
307
|
-
@spawners.keys.each do |key|
|
308
|
-
spawner = @spawners[key]
|
309
|
-
if spawner.is_a?(Railz::FrameworkSpawner)
|
310
|
-
max_idle_time = FRAMEWORK_SPAWNER_MAX_IDLE_TIME
|
311
|
-
else
|
312
|
-
max_idle_time = APP_SPAWNER_MAX_IDLE_TIME
|
313
|
-
end
|
314
|
-
if current_time - spawner.time > max_idle_time
|
315
|
-
if spawner.started?
|
316
|
-
spawner.stop
|
317
|
-
end
|
318
|
-
@spawners.delete(key)
|
319
|
-
end
|
320
|
-
end
|
321
|
-
end
|
322
|
-
end
|
323
|
-
end
|
324
|
-
end
|
325
|
-
|
326
334
|
def send_error_page(channel, template_name, options = {})
|
327
|
-
require '
|
328
|
-
require '
|
335
|
+
require 'phusion_passenger/html_template' unless defined?(HTMLTemplate)
|
336
|
+
require 'phusion_passenger/platform_info' unless defined?(PlatformInfo)
|
329
337
|
options["enterprisey"] = File.exist?("#{File.dirname(__FILE__)}/../../enterprisey.txt") ||
|
330
338
|
File.exist?("/etc/passenger_enterprisey.txt")
|
331
339
|
data = HTMLTemplate.new(template_name, options).result
|
@@ -359,4 +367,4 @@ private
|
|
359
367
|
end
|
360
368
|
end
|
361
369
|
|
362
|
-
end # module
|
370
|
+
end # module PhusionPassenger
|
File without changes
|
File without changes
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<% layout 'error_layout', :title => "#{@app_name} application could not be started" do %>
|
2
|
+
<h1 class="error_title"><%= @app_name %> application could not be started</h1>
|
3
|
+
<div id="content">
|
4
|
+
|
5
|
+
The application has exited during startup (i.e. during the evaluation of
|
6
|
+
<tt>config/environment.rb</tt>).
|
7
|
+
<% if @error.stderr %>
|
8
|
+
The error message can be found below. To solve this problem, please
|
9
|
+
follow any instructions in the error message.
|
10
|
+
<% else %>
|
11
|
+
The error message may have been written to the web server's log file.
|
12
|
+
Please check the <b>web server's</b> log file (i.e. <em>not</em> the
|
13
|
+
(Rails) application's log file) to find out why the application
|
14
|
+
exited.
|
15
|
+
|
16
|
+
<p>If that doesn't help, then please use the backtrace below to debug
|
17
|
+
the problem.</p>
|
18
|
+
<% end %>
|
19
|
+
|
20
|
+
<dl>
|
21
|
+
<% if @error.stderr %>
|
22
|
+
<dt>Error message:</dt>
|
23
|
+
<dd><%=h @error.stderr %></dd>
|
24
|
+
<% end %>
|
25
|
+
|
26
|
+
<dt>Application root:</dt>
|
27
|
+
<dd>
|
28
|
+
<tt class="filename"><%=h @app_root %></tt>
|
29
|
+
</dd>
|
30
|
+
|
31
|
+
<dt>Backtrace:</dt>
|
32
|
+
<dd>
|
33
|
+
<%= backtrace_html_for(@error.child_exception) %>
|
34
|
+
</dd>
|
35
|
+
</dl>
|
36
|
+
|
37
|
+
</div>
|
38
|
+
<% end %>
|