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
@@ -17,12 +17,16 @@
|
|
17
17
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
18
18
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
19
19
|
*/
|
20
|
-
#include <apr_strings.h>
|
21
20
|
#include <algorithm>
|
22
21
|
#include <cstdlib>
|
23
22
|
#include "Configuration.h"
|
24
23
|
#include "Utils.h"
|
25
24
|
|
25
|
+
/* The APR headers must come after the Passenger headers. See Hooks.cpp
|
26
|
+
* to learn why.
|
27
|
+
*/
|
28
|
+
#include <apr_strings.h>
|
29
|
+
|
26
30
|
using namespace Passenger;
|
27
31
|
|
28
32
|
extern "C" module AP_MODULE_DECLARE_DATA passenger_module;
|
@@ -58,13 +62,27 @@ extern "C" {
|
|
58
62
|
void *
|
59
63
|
passenger_config_create_dir(apr_pool_t *p, char *dirspec) {
|
60
64
|
DirConfig *config = create_dir_config_struct(p);
|
65
|
+
config->enabled = DirConfig::UNSET;
|
61
66
|
config->autoDetectRails = DirConfig::UNSET;
|
62
67
|
config->autoDetectRack = DirConfig::UNSET;
|
63
68
|
config->autoDetectWSGI = DirConfig::UNSET;
|
64
69
|
config->allowModRewrite = DirConfig::UNSET;
|
65
70
|
config->railsEnv = NULL;
|
71
|
+
config->appRoot = NULL;
|
66
72
|
config->rackEnv = NULL;
|
67
73
|
config->spawnMethod = DirConfig::SM_UNSET;
|
74
|
+
config->frameworkSpawnerTimeout = -1;
|
75
|
+
config->appSpawnerTimeout = -1;
|
76
|
+
config->maxRequests = 0;
|
77
|
+
config->maxRequestsSpecified = false;
|
78
|
+
config->memoryLimit = 0;
|
79
|
+
config->memoryLimitSpecified = false;
|
80
|
+
config->highPerformance = DirConfig::UNSET;
|
81
|
+
config->useGlobalQueue = DirConfig::UNSET;
|
82
|
+
config->statThrottleRate = 0;
|
83
|
+
config->statThrottleRateSpecified = false;
|
84
|
+
config->restartDir = NULL;
|
85
|
+
/*************************************/
|
68
86
|
return config;
|
69
87
|
}
|
70
88
|
|
@@ -74,6 +92,8 @@ passenger_config_merge_dir(apr_pool_t *p, void *basev, void *addv) {
|
|
74
92
|
DirConfig *base = (DirConfig *) basev;
|
75
93
|
DirConfig *add = (DirConfig *) addv;
|
76
94
|
|
95
|
+
config->enabled = (add->enabled == DirConfig::UNSET) ? base->enabled : add->enabled;
|
96
|
+
|
77
97
|
config->railsBaseURIs = base->railsBaseURIs;
|
78
98
|
for (set<string>::const_iterator it(add->railsBaseURIs.begin()); it != add->railsBaseURIs.end(); it++) {
|
79
99
|
config->railsBaseURIs.insert(*it);
|
@@ -88,8 +108,21 @@ passenger_config_merge_dir(apr_pool_t *p, void *basev, void *addv) {
|
|
88
108
|
config->autoDetectWSGI = (add->autoDetectWSGI == DirConfig::UNSET) ? base->autoDetectWSGI : add->autoDetectWSGI;
|
89
109
|
config->allowModRewrite = (add->allowModRewrite == DirConfig::UNSET) ? base->allowModRewrite : add->allowModRewrite;
|
90
110
|
config->railsEnv = (add->railsEnv == NULL) ? base->railsEnv : add->railsEnv;
|
111
|
+
config->appRoot = (add->appRoot == NULL) ? base->appRoot : add->appRoot;
|
91
112
|
config->rackEnv = (add->rackEnv == NULL) ? base->rackEnv : add->rackEnv;
|
92
113
|
config->spawnMethod = (add->spawnMethod == DirConfig::SM_UNSET) ? base->spawnMethod : add->spawnMethod;
|
114
|
+
config->frameworkSpawnerTimeout = (add->frameworkSpawnerTimeout == -1) ? base->frameworkSpawnerTimeout : add->frameworkSpawnerTimeout;
|
115
|
+
config->appSpawnerTimeout = (add->appSpawnerTimeout == -1) ? base->appSpawnerTimeout : add->appSpawnerTimeout;
|
116
|
+
config->maxRequests = (add->maxRequestsSpecified) ? add->maxRequests : base->maxRequests;
|
117
|
+
config->maxRequestsSpecified = base->maxRequestsSpecified || add->maxRequestsSpecified;
|
118
|
+
config->memoryLimit = (add->memoryLimitSpecified) ? add->memoryLimit : base->memoryLimit;
|
119
|
+
config->memoryLimitSpecified = base->memoryLimitSpecified || add->memoryLimitSpecified;
|
120
|
+
config->highPerformance = (add->highPerformance == DirConfig::UNSET) ? base->highPerformance : add->highPerformance;
|
121
|
+
config->useGlobalQueue = (add->useGlobalQueue == DirConfig::UNSET) ? base->useGlobalQueue : add->useGlobalQueue;
|
122
|
+
config->statThrottleRate = (add->statThrottleRateSpecified) ? add->statThrottleRate : base->statThrottleRate;
|
123
|
+
config->statThrottleRateSpecified = base->statThrottleRateSpecified || add->statThrottleRateSpecified;
|
124
|
+
config->restartDir = (add->restartDir == NULL) ? base->restartDir : add->restartDir;
|
125
|
+
/*************************************/
|
93
126
|
return config;
|
94
127
|
}
|
95
128
|
|
@@ -105,11 +138,10 @@ passenger_config_create_server(apr_pool_t *p, server_rec *s) {
|
|
105
138
|
config->maxInstancesPerAppSpecified = false;
|
106
139
|
config->poolIdleTime = DEFAULT_POOL_IDLE_TIME;
|
107
140
|
config->poolIdleTimeSpecified = false;
|
108
|
-
config->useGlobalQueue = false;
|
109
|
-
config->useGlobalQueueSpecified = false;
|
110
141
|
config->userSwitching = true;
|
111
142
|
config->userSwitchingSpecified = false;
|
112
143
|
config->defaultUser = NULL;
|
144
|
+
config->tempDir = NULL;
|
113
145
|
return config;
|
114
146
|
}
|
115
147
|
|
@@ -128,11 +160,10 @@ passenger_config_merge_server(apr_pool_t *p, void *basev, void *addv) {
|
|
128
160
|
config->maxInstancesPerAppSpecified = base->maxInstancesPerAppSpecified || add->maxInstancesPerAppSpecified;
|
129
161
|
config->poolIdleTime = (add->poolIdleTime) ? base->poolIdleTime : add->poolIdleTime;
|
130
162
|
config->poolIdleTimeSpecified = base->poolIdleTimeSpecified || add->poolIdleTimeSpecified;
|
131
|
-
config->useGlobalQueue = (add->useGlobalQueue) ? base->useGlobalQueue : add->useGlobalQueue;
|
132
|
-
config->useGlobalQueueSpecified = base->useGlobalQueueSpecified || add->useGlobalQueueSpecified;
|
133
163
|
config->userSwitching = (add->userSwitchingSpecified) ? add->userSwitching : base->userSwitching;
|
134
164
|
config->userSwitchingSpecified = base->userSwitchingSpecified || add->userSwitchingSpecified;
|
135
165
|
config->defaultUser = (add->defaultUser == NULL) ? base->defaultUser : add->defaultUser;
|
166
|
+
config->tempDir = (add->tempDir == NULL) ? base->tempDir : add->tempDir;
|
136
167
|
return config;
|
137
168
|
}
|
138
169
|
|
@@ -152,11 +183,10 @@ passenger_config_merge_all_servers(apr_pool_t *pool, server_rec *main_server) {
|
|
152
183
|
final->maxInstancesPerAppSpecified = final->maxInstancesPerAppSpecified || config->maxInstancesPerAppSpecified;
|
153
184
|
final->poolIdleTime = (final->poolIdleTimeSpecified) ? final->poolIdleTime : config->poolIdleTime;
|
154
185
|
final->poolIdleTimeSpecified = final->poolIdleTimeSpecified || config->poolIdleTimeSpecified;
|
155
|
-
final->useGlobalQueue = (final->useGlobalQueue) ? final->useGlobalQueue : config->useGlobalQueue;
|
156
|
-
final->useGlobalQueueSpecified = final->useGlobalQueueSpecified || config->useGlobalQueueSpecified;
|
157
186
|
final->userSwitching = (config->userSwitchingSpecified) ? config->userSwitching : final->userSwitching;
|
158
187
|
final->userSwitchingSpecified = final->userSwitchingSpecified || config->userSwitchingSpecified;
|
159
188
|
final->defaultUser = (final->defaultUser != NULL) ? final->defaultUser : config->defaultUser;
|
189
|
+
final->tempDir = (final->tempDir != NULL) ? final->tempDir : config->tempDir;
|
160
190
|
}
|
161
191
|
for (s = main_server; s != NULL; s = s->next) {
|
162
192
|
ServerConfig *config = (ServerConfig *) ap_get_module_config(s->module_config, &passenger_module);
|
@@ -249,8 +279,8 @@ cmd_passenger_pool_idle_time(cmd_parms *cmd, void *pcfg, const char *arg) {
|
|
249
279
|
result = strtol(arg, &end, 10);
|
250
280
|
if (*end != '\0') {
|
251
281
|
return "Invalid number specified for PassengerPoolIdleTime.";
|
252
|
-
} else if (result
|
253
|
-
return "Value for PassengerPoolIdleTime must be greater than 0.";
|
282
|
+
} else if (result < 0) {
|
283
|
+
return "Value for PassengerPoolIdleTime must be greater than or equal to 0.";
|
254
284
|
} else {
|
255
285
|
config->poolIdleTime = (unsigned int) result;
|
256
286
|
config->poolIdleTimeSpecified = true;
|
@@ -260,14 +290,12 @@ cmd_passenger_pool_idle_time(cmd_parms *cmd, void *pcfg, const char *arg) {
|
|
260
290
|
|
261
291
|
static const char *
|
262
292
|
cmd_passenger_use_global_queue(cmd_parms *cmd, void *pcfg, int arg) {
|
263
|
-
|
264
|
-
cmd->server->module_config, &passenger_module);
|
293
|
+
DirConfig *config = (DirConfig *) pcfg;
|
265
294
|
if (arg) {
|
266
|
-
config->useGlobalQueue =
|
295
|
+
config->useGlobalQueue = DirConfig::ENABLED;
|
267
296
|
} else {
|
268
|
-
config->useGlobalQueue =
|
297
|
+
config->useGlobalQueue = DirConfig::DISABLED;
|
269
298
|
}
|
270
|
-
config->useGlobalQueueSpecified = true;
|
271
299
|
return NULL;
|
272
300
|
}
|
273
301
|
|
@@ -288,6 +316,86 @@ cmd_passenger_default_user(cmd_parms *cmd, void *dummy, const char *arg) {
|
|
288
316
|
return NULL;
|
289
317
|
}
|
290
318
|
|
319
|
+
static const char *
|
320
|
+
cmd_passenger_temp_dir(cmd_parms *cmd, void *dummy, const char *arg) {
|
321
|
+
ServerConfig *config = (ServerConfig *) ap_get_module_config(
|
322
|
+
cmd->server->module_config, &passenger_module);
|
323
|
+
config->tempDir = arg;
|
324
|
+
return NULL;
|
325
|
+
}
|
326
|
+
|
327
|
+
static const char *
|
328
|
+
cmd_passenger_max_requests(cmd_parms *cmd, void *pcfg, const char *arg) {
|
329
|
+
DirConfig *config = (DirConfig *) pcfg;
|
330
|
+
char *end;
|
331
|
+
long int result;
|
332
|
+
|
333
|
+
result = strtol(arg, &end, 10);
|
334
|
+
if (*end != '\0') {
|
335
|
+
return "Invalid number specified for PassengerMaxRequests.";
|
336
|
+
} else if (result < 0) {
|
337
|
+
return "Value for PassengerMaxRequests must be greater than or equal to 0.";
|
338
|
+
} else {
|
339
|
+
config->maxRequests = (unsigned long) result;
|
340
|
+
config->maxRequestsSpecified = true;
|
341
|
+
return NULL;
|
342
|
+
}
|
343
|
+
}
|
344
|
+
|
345
|
+
static const char *
|
346
|
+
cmd_passenger_high_performance(cmd_parms *cmd, void *pcfg, int arg) {
|
347
|
+
DirConfig *config = (DirConfig *) pcfg;
|
348
|
+
if (arg) {
|
349
|
+
config->highPerformance = DirConfig::ENABLED;
|
350
|
+
} else {
|
351
|
+
config->highPerformance = DirConfig::DISABLED;
|
352
|
+
}
|
353
|
+
return NULL;
|
354
|
+
}
|
355
|
+
|
356
|
+
static const char *
|
357
|
+
cmd_passenger_enabled(cmd_parms *cmd, void *pcfg, int arg) {
|
358
|
+
DirConfig *config = (DirConfig *) pcfg;
|
359
|
+
if (arg) {
|
360
|
+
config->enabled = DirConfig::ENABLED;
|
361
|
+
} else {
|
362
|
+
config->enabled = DirConfig::DISABLED;
|
363
|
+
}
|
364
|
+
return NULL;
|
365
|
+
}
|
366
|
+
|
367
|
+
static const char *
|
368
|
+
cmd_passenger_stat_throttle_rate(cmd_parms *cmd, void *pcfg, const char *arg) {
|
369
|
+
DirConfig *config = (DirConfig *) pcfg;
|
370
|
+
char *end;
|
371
|
+
long int result;
|
372
|
+
|
373
|
+
result = strtol(arg, &end, 10);
|
374
|
+
if (*end != '\0') {
|
375
|
+
return "Invalid number specified for PassengerStatThrottleRate.";
|
376
|
+
} else if (result < 0) {
|
377
|
+
return "Value for PassengerStatThrottleRate must be greater than or equal to 0.";
|
378
|
+
} else {
|
379
|
+
config->statThrottleRate = (unsigned long) result;
|
380
|
+
config->statThrottleRateSpecified = true;
|
381
|
+
return NULL;
|
382
|
+
}
|
383
|
+
}
|
384
|
+
|
385
|
+
static const char *
|
386
|
+
cmd_passenger_restart_dir(cmd_parms *cmd, void *pcfg, const char *arg) {
|
387
|
+
DirConfig *config = (DirConfig *) pcfg;
|
388
|
+
config->restartDir = arg;
|
389
|
+
return NULL;
|
390
|
+
}
|
391
|
+
|
392
|
+
static const char *
|
393
|
+
cmd_passenger_app_root(cmd_parms *cmd, void *pcfg, const char *arg) {
|
394
|
+
DirConfig *config = (DirConfig *) pcfg;
|
395
|
+
config->appRoot = arg;
|
396
|
+
return NULL;
|
397
|
+
}
|
398
|
+
|
291
399
|
|
292
400
|
/*************************************************
|
293
401
|
* Rails-specific settings
|
@@ -326,14 +434,50 @@ cmd_rails_spawn_method(cmd_parms *cmd, void *pcfg, const char *arg) {
|
|
326
434
|
DirConfig *config = (DirConfig *) pcfg;
|
327
435
|
if (strcmp(arg, "smart") == 0) {
|
328
436
|
config->spawnMethod = DirConfig::SM_SMART;
|
437
|
+
} else if (strcmp(arg, "smart-lv2") == 0) {
|
438
|
+
config->spawnMethod = DirConfig::SM_SMART_LV2;
|
329
439
|
} else if (strcmp(arg, "conservative") == 0) {
|
330
440
|
config->spawnMethod = DirConfig::SM_CONSERVATIVE;
|
331
441
|
} else {
|
332
|
-
return "RailsSpawnMethod may only be 'smart' or 'conservative'.";
|
442
|
+
return "RailsSpawnMethod may only be 'smart', 'smart-lv2' or 'conservative'.";
|
333
443
|
}
|
334
444
|
return NULL;
|
335
445
|
}
|
336
446
|
|
447
|
+
static const char *
|
448
|
+
cmd_rails_framework_spawner_idle_time(cmd_parms *cmd, void *pcfg, const char *arg) {
|
449
|
+
DirConfig *config = (DirConfig *) pcfg;
|
450
|
+
char *end;
|
451
|
+
long int result;
|
452
|
+
|
453
|
+
result = strtol(arg, &end, 10);
|
454
|
+
if (*end != '\0') {
|
455
|
+
return "Invalid number specified for RailsFrameworkSpawnerIdleTime.";
|
456
|
+
} else if (result < 0) {
|
457
|
+
return "Value for RailsFrameworkSpawnerIdleTime must be at least 0.";
|
458
|
+
} else {
|
459
|
+
config->frameworkSpawnerTimeout = result;
|
460
|
+
return NULL;
|
461
|
+
}
|
462
|
+
}
|
463
|
+
|
464
|
+
static const char *
|
465
|
+
cmd_rails_app_spawner_idle_time(cmd_parms *cmd, void *pcfg, const char *arg) {
|
466
|
+
DirConfig *config = (DirConfig *) pcfg;
|
467
|
+
char *end;
|
468
|
+
long int result;
|
469
|
+
|
470
|
+
result = strtol(arg, &end, 10);
|
471
|
+
if (*end != '\0') {
|
472
|
+
return "Invalid number specified for RailsAppSpawnerIdleTime.";
|
473
|
+
} else if (result < 0) {
|
474
|
+
return "Value for RailsAppSpawnerIdleTime must be at least 0.";
|
475
|
+
} else {
|
476
|
+
config->appSpawnerTimeout = result;
|
477
|
+
return NULL;
|
478
|
+
}
|
479
|
+
}
|
480
|
+
|
337
481
|
|
338
482
|
/*************************************************
|
339
483
|
* Rack-specific settings
|
@@ -387,7 +531,9 @@ cmd_rails_spawn_server(cmd_parms *cmd, void *pcfg, const char *arg) {
|
|
387
531
|
}
|
388
532
|
|
389
533
|
|
390
|
-
|
534
|
+
// Workaround for some weird C++-specific compiler error.
|
535
|
+
typedef const char * (*Take0Func)();
|
536
|
+
typedef const char * (*Take1Func)();
|
391
537
|
|
392
538
|
const command_rec passenger_commands[] = {
|
393
539
|
// Passenger settings.
|
@@ -424,7 +570,7 @@ const command_rec passenger_commands[] = {
|
|
424
570
|
AP_INIT_FLAG("PassengerUseGlobalQueue",
|
425
571
|
(Take1Func) cmd_passenger_use_global_queue,
|
426
572
|
NULL,
|
427
|
-
ACCESS_CONF | RSRC_CONF,
|
573
|
+
OR_OPTIONS | ACCESS_CONF | RSRC_CONF,
|
428
574
|
"Enable or disable Passenger's global queuing mode mode."),
|
429
575
|
AP_INIT_FLAG("PassengerUserSwitching",
|
430
576
|
(Take1Func) cmd_passenger_user_switching,
|
@@ -436,12 +582,47 @@ const command_rec passenger_commands[] = {
|
|
436
582
|
NULL,
|
437
583
|
RSRC_CONF,
|
438
584
|
"The user that Rails/Rack applications must run as when user switching fails or is disabled."),
|
585
|
+
AP_INIT_TAKE1("PassengerTempDir",
|
586
|
+
(Take1Func) cmd_passenger_temp_dir,
|
587
|
+
NULL,
|
588
|
+
RSRC_CONF,
|
589
|
+
"The temp directory that Passenger should use."),
|
590
|
+
AP_INIT_TAKE1("PassengerMaxRequests",
|
591
|
+
(Take1Func) cmd_passenger_max_requests,
|
592
|
+
NULL,
|
593
|
+
OR_LIMIT | ACCESS_CONF | RSRC_CONF,
|
594
|
+
"The maximum number of requests that an application instance may process."),
|
595
|
+
AP_INIT_FLAG("PassengerHighPerformance",
|
596
|
+
(Take1Func) cmd_passenger_high_performance,
|
597
|
+
NULL,
|
598
|
+
OR_ALL,
|
599
|
+
"Enable or disable Passenger's high performance mode."),
|
600
|
+
AP_INIT_FLAG("PassengerEnabled",
|
601
|
+
(Take1Func) cmd_passenger_enabled,
|
602
|
+
NULL,
|
603
|
+
OR_ALL,
|
604
|
+
"Enable or disable Phusion Passenger."),
|
605
|
+
AP_INIT_TAKE1("PassengerStatThrottleRate",
|
606
|
+
(Take1Func) cmd_passenger_stat_throttle_rate,
|
607
|
+
NULL,
|
608
|
+
OR_LIMIT | ACCESS_CONF | RSRC_CONF,
|
609
|
+
"Limit the number of stat calls to once per given seconds."),
|
610
|
+
AP_INIT_TAKE1("PassengerRestartDir",
|
611
|
+
(Take1Func) cmd_passenger_restart_dir,
|
612
|
+
NULL,
|
613
|
+
OR_OPTIONS | ACCESS_CONF | RSRC_CONF,
|
614
|
+
"The directory in which Passenger should look for restart.txt."),
|
615
|
+
AP_INIT_TAKE1("PassengerAppRoot",
|
616
|
+
(Take1Func) cmd_passenger_app_root,
|
617
|
+
NULL,
|
618
|
+
OR_OPTIONS | ACCESS_CONF | RSRC_CONF,
|
619
|
+
"The application's root directory."),
|
439
620
|
|
440
621
|
// Rails-specific settings.
|
441
622
|
AP_INIT_TAKE1("RailsBaseURI",
|
442
623
|
(Take1Func) cmd_rails_base_uri,
|
443
624
|
NULL,
|
444
|
-
RSRC_CONF,
|
625
|
+
OR_OPTIONS | ACCESS_CONF | RSRC_CONF,
|
445
626
|
"Reserve the given URI to a Rails application."),
|
446
627
|
AP_INIT_FLAG("RailsAutoDetect",
|
447
628
|
(Take1Func) cmd_rails_auto_detect,
|
@@ -456,19 +637,29 @@ const command_rec passenger_commands[] = {
|
|
456
637
|
AP_INIT_TAKE1("RailsEnv",
|
457
638
|
(Take1Func) cmd_rails_env,
|
458
639
|
NULL,
|
459
|
-
RSRC_CONF,
|
640
|
+
OR_OPTIONS | ACCESS_CONF | RSRC_CONF,
|
460
641
|
"The environment under which a Rails app must run."),
|
461
642
|
AP_INIT_TAKE1("RailsSpawnMethod",
|
462
643
|
(Take1Func) cmd_rails_spawn_method,
|
463
644
|
NULL,
|
464
645
|
RSRC_CONF,
|
465
646
|
"The spawn method to use."),
|
647
|
+
AP_INIT_TAKE1("RailsFrameworkSpawnerIdleTime", // TODO: document this
|
648
|
+
(Take1Func) cmd_rails_framework_spawner_idle_time,
|
649
|
+
NULL,
|
650
|
+
RSRC_CONF,
|
651
|
+
"The maximum number of seconds that a framework spawner may be idle before it is shutdown."),
|
652
|
+
AP_INIT_TAKE1("RailsAppSpawnerIdleTime", // TODO: document this
|
653
|
+
(Take1Func) cmd_rails_app_spawner_idle_time,
|
654
|
+
NULL,
|
655
|
+
RSRC_CONF,
|
656
|
+
"The maximum number of seconds that an application spawner may be idle before it is shutdown."),
|
466
657
|
|
467
658
|
// Rack-specific settings.
|
468
659
|
AP_INIT_TAKE1("RackBaseURI",
|
469
660
|
(Take1Func) cmd_rack_base_uri,
|
470
661
|
NULL,
|
471
|
-
RSRC_CONF,
|
662
|
+
OR_OPTIONS | ACCESS_CONF | RSRC_CONF,
|
472
663
|
"Reserve the given URI to a Rack application."),
|
473
664
|
AP_INIT_FLAG("RackAutoDetect",
|
474
665
|
(Take1Func) cmd_rack_auto_detect,
|
@@ -478,10 +669,10 @@ const command_rec passenger_commands[] = {
|
|
478
669
|
AP_INIT_TAKE1("RackEnv",
|
479
670
|
(Take1Func) cmd_rack_env,
|
480
671
|
NULL,
|
481
|
-
RSRC_CONF,
|
672
|
+
OR_OPTIONS | ACCESS_CONF | RSRC_CONF,
|
482
673
|
"The environment under which a Rack app must run."),
|
483
674
|
|
484
|
-
//
|
675
|
+
// WSGI-specific settings.
|
485
676
|
AP_INIT_FLAG("PassengerWSGIAutoDetect",
|
486
677
|
(Take1Func) cmd_wsgi_auto_detect,
|
487
678
|
NULL,
|
data/ext/apache2/Configuration.h
CHANGED
@@ -20,6 +20,16 @@
|
|
20
20
|
#ifndef _PASSENGER_CONFIGURATION_H_
|
21
21
|
#define _PASSENGER_CONFIGURATION_H_
|
22
22
|
|
23
|
+
#include "Utils.h"
|
24
|
+
#include "MessageChannel.h"
|
25
|
+
|
26
|
+
/* The APR headers must come after the Passenger headers. See Hooks.cpp
|
27
|
+
* to learn why.
|
28
|
+
*
|
29
|
+
* MessageChannel.h must be included -- even though we don't actually use
|
30
|
+
* MessageChannel.h in here, it's necessary to make sure that apr_want.h
|
31
|
+
* doesn't b0rk on 'struct iovec'.
|
32
|
+
*/
|
23
33
|
#include <apr_pools.h>
|
24
34
|
#include <httpd.h>
|
25
35
|
#include <http_config.h>
|
@@ -31,7 +41,7 @@
|
|
31
41
|
*/
|
32
42
|
|
33
43
|
/** Module version number. */
|
34
|
-
#define PASSENGER_VERSION "2.
|
44
|
+
#define PASSENGER_VERSION "2.1.2"
|
35
45
|
|
36
46
|
#ifdef __cplusplus
|
37
47
|
#include <set>
|
@@ -43,9 +53,15 @@
|
|
43
53
|
|
44
54
|
/**
|
45
55
|
* Per-directory configuration information.
|
56
|
+
*
|
57
|
+
* Use the getter methods to query information, because those will return
|
58
|
+
* the default value if the value is not specified.
|
46
59
|
*/
|
47
60
|
struct DirConfig {
|
48
61
|
enum Threeway { ENABLED, DISABLED, UNSET };
|
62
|
+
enum SpawnMethod { SM_UNSET, SM_SMART, SM_SMART_LV2, SM_CONSERVATIVE };
|
63
|
+
|
64
|
+
Threeway enabled;
|
49
65
|
|
50
66
|
std::set<std::string> railsBaseURIs;
|
51
67
|
std::set<std::string> rackBaseURIs;
|
@@ -66,17 +82,166 @@
|
|
66
82
|
* Rails applications should operate. */
|
67
83
|
const char *railsEnv;
|
68
84
|
|
85
|
+
/** The path to the application's root (for example: RAILS_ROOT
|
86
|
+
* for Rails applications, directory containing 'config.ru'
|
87
|
+
* for Rack applications). If this value is NULL, the default
|
88
|
+
* autodetected path will be used.
|
89
|
+
*/
|
90
|
+
const char *appRoot;
|
91
|
+
|
69
92
|
/** The environment (i.e. value for RACK_ENV) under which
|
70
93
|
* Rack applications should operate. */
|
71
94
|
const char *rackEnv;
|
72
95
|
|
73
|
-
enum SpawnMethod { SM_UNSET, SM_SMART, SM_CONSERVATIVE };
|
74
96
|
/** The Rails spawn method to use. */
|
75
97
|
SpawnMethod spawnMethod;
|
98
|
+
|
99
|
+
/**
|
100
|
+
* The idle timeout, in seconds, of Rails framework spawners.
|
101
|
+
* May also be 0 (which indicates that the framework spawner should
|
102
|
+
* never idle timeout) or -1 (which means that the value is not specified).
|
103
|
+
*/
|
104
|
+
long frameworkSpawnerTimeout;
|
105
|
+
|
106
|
+
/**
|
107
|
+
* The idle timeout, in seconds, of Rails application spawners.
|
108
|
+
* May also be 0 (which indicates that the application spawner should
|
109
|
+
* never idle timeout) or -1 (which means that the value is not specified).
|
110
|
+
*/
|
111
|
+
long appSpawnerTimeout;
|
112
|
+
|
113
|
+
/**
|
114
|
+
* The maximum number of requests that the spawned application may process
|
115
|
+
* before exiting. A value of 0 means unlimited.
|
116
|
+
*/
|
117
|
+
unsigned long maxRequests;
|
118
|
+
|
119
|
+
/** Indicates whether the maxRequests option was explicitly specified
|
120
|
+
* in the directory configuration. */
|
121
|
+
bool maxRequestsSpecified;
|
122
|
+
|
123
|
+
/**
|
124
|
+
* The maximum amount of memory (in MB) the spawned application may use.
|
125
|
+
* A value of 0 means unlimited.
|
126
|
+
*/
|
127
|
+
unsigned long memoryLimit;
|
128
|
+
|
129
|
+
/** Indicates whether the memoryLimit option was explicitly specified
|
130
|
+
* in the directory configuration. */
|
131
|
+
bool memoryLimitSpecified;
|
132
|
+
|
133
|
+
Threeway highPerformance;
|
134
|
+
|
135
|
+
/** Whether global queuing should be used. */
|
136
|
+
Threeway useGlobalQueue;
|
137
|
+
|
138
|
+
/**
|
139
|
+
* Throttle the number of stat() calls on files like
|
140
|
+
* restart.txt to the once per given number of seconds.
|
141
|
+
*/
|
142
|
+
unsigned long statThrottleRate;
|
143
|
+
|
144
|
+
/** Indicates whether the statThrottleRate option was
|
145
|
+
* explicitly specified in the directory configuration. */
|
146
|
+
bool statThrottleRateSpecified;
|
147
|
+
|
148
|
+
/** The directory in which Passenger should look for
|
149
|
+
* restart.txt. NULL means that the default directory
|
150
|
+
* should be used.
|
151
|
+
*/
|
152
|
+
const char *restartDir;
|
153
|
+
|
154
|
+
/*************************************/
|
155
|
+
|
156
|
+
bool isEnabled() const {
|
157
|
+
return enabled != DISABLED;
|
158
|
+
}
|
159
|
+
|
160
|
+
string getAppRoot(const char *documentRoot) const {
|
161
|
+
if (appRoot == NULL) {
|
162
|
+
return string(documentRoot).append("/..");
|
163
|
+
} else {
|
164
|
+
return appRoot;
|
165
|
+
}
|
166
|
+
}
|
167
|
+
|
168
|
+
const char *getRailsEnv() const {
|
169
|
+
if (railsEnv != NULL) {
|
170
|
+
return railsEnv;
|
171
|
+
} else {
|
172
|
+
return "production";
|
173
|
+
}
|
174
|
+
}
|
175
|
+
|
176
|
+
const char *getRackEnv() const {
|
177
|
+
if (rackEnv != NULL) {
|
178
|
+
return rackEnv;
|
179
|
+
} else {
|
180
|
+
return "production";
|
181
|
+
}
|
182
|
+
}
|
183
|
+
|
184
|
+
const char *getSpawnMethodString() {
|
185
|
+
switch (spawnMethod) {
|
186
|
+
case SM_SMART:
|
187
|
+
return "smart";
|
188
|
+
case SM_SMART_LV2:
|
189
|
+
return "smart-lv2";
|
190
|
+
case SM_CONSERVATIVE:
|
191
|
+
return "conservative";
|
192
|
+
default:
|
193
|
+
return "smart-lv2";
|
194
|
+
}
|
195
|
+
}
|
196
|
+
|
197
|
+
unsigned long getMaxRequests() {
|
198
|
+
if (maxRequestsSpecified) {
|
199
|
+
return maxRequests;
|
200
|
+
} else {
|
201
|
+
return 0;
|
202
|
+
}
|
203
|
+
}
|
204
|
+
|
205
|
+
unsigned long getMemoryLimit() {
|
206
|
+
if (memoryLimitSpecified) {
|
207
|
+
return memoryLimit;
|
208
|
+
} else {
|
209
|
+
return 200;
|
210
|
+
}
|
211
|
+
}
|
212
|
+
|
213
|
+
bool highPerformanceMode() const {
|
214
|
+
return highPerformance == ENABLED;
|
215
|
+
}
|
216
|
+
|
217
|
+
bool usingGlobalQueue() const {
|
218
|
+
return useGlobalQueue == ENABLED;
|
219
|
+
}
|
220
|
+
|
221
|
+
unsigned long getStatThrottleRate() const {
|
222
|
+
if (statThrottleRateSpecified) {
|
223
|
+
return statThrottleRate;
|
224
|
+
} else {
|
225
|
+
return 0;
|
226
|
+
}
|
227
|
+
}
|
228
|
+
|
229
|
+
const char *getRestartDir() const {
|
230
|
+
if (restartDir != NULL) {
|
231
|
+
return restartDir;
|
232
|
+
} else {
|
233
|
+
return "";
|
234
|
+
}
|
235
|
+
}
|
236
|
+
|
237
|
+
/*************************************/
|
76
238
|
};
|
77
239
|
|
78
240
|
/**
|
79
241
|
* Server-wide (global, not per-virtual host) configuration information.
|
242
|
+
*
|
243
|
+
* Use the getter methods to query information, because those will return
|
244
|
+
* the default value if the value is not specified.
|
80
245
|
*/
|
81
246
|
struct ServerConfig {
|
82
247
|
/** The filename of the Ruby interpreter to use. */
|
@@ -112,13 +277,6 @@
|
|
112
277
|
* this server config. */
|
113
278
|
bool poolIdleTimeSpecified;
|
114
279
|
|
115
|
-
/** Whether global queuing should be used. */
|
116
|
-
bool useGlobalQueue;
|
117
|
-
|
118
|
-
/** Whether the useGlobalQueue option was explicitly specified
|
119
|
-
* in this server config. */
|
120
|
-
bool useGlobalQueueSpecified;
|
121
|
-
|
122
280
|
/** Whether user switching support is enabled. */
|
123
281
|
bool userSwitching;
|
124
282
|
|
@@ -131,11 +289,16 @@
|
|
131
289
|
*/
|
132
290
|
const char *defaultUser;
|
133
291
|
|
134
|
-
|
135
|
-
|
136
|
-
|
292
|
+
/** The temp directory that Passenger should use. NULL
|
293
|
+
* means unspecified.
|
294
|
+
*/
|
295
|
+
const char *tempDir;
|
296
|
+
|
297
|
+
const char *getDefaultUser() const {
|
298
|
+
if (defaultUser != NULL) {
|
299
|
+
return defaultUser;
|
137
300
|
} else {
|
138
|
-
return
|
301
|
+
return "nobody";
|
139
302
|
}
|
140
303
|
}
|
141
304
|
};
|