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
data/ext/apache2/System.h
DELETED
@@ -1,228 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* Phusion Passenger - http://www.modrails.com/
|
3
|
-
* Copyright (C) 2008 Phusion
|
4
|
-
*
|
5
|
-
* Phusion Passenger is a trademark of Hongli Lai & Ninh Bui.
|
6
|
-
*
|
7
|
-
* This program is free software; you can redistribute it and/or modify
|
8
|
-
* it under the terms of the GNU General Public License as published by
|
9
|
-
* the Free Software Foundation; version 2 of the License.
|
10
|
-
*
|
11
|
-
* This program is distributed in the hope that it will be useful,
|
12
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
-
* GNU General Public License for more details.
|
15
|
-
*
|
16
|
-
* You should have received a copy of the GNU General Public License along
|
17
|
-
* with this program; if not, write to the Free Software Foundation, Inc.,
|
18
|
-
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
19
|
-
*/
|
20
|
-
#ifndef _PASSENGER_SYSTEM_H_
|
21
|
-
#define _PASSENGER_SYSTEM_H_
|
22
|
-
|
23
|
-
#include <boost/thread.hpp>
|
24
|
-
#include <boost/date_time/posix_time/posix_time_types.hpp>
|
25
|
-
#include <sys/types.h>
|
26
|
-
#include <sys/wait.h>
|
27
|
-
#include <sys/socket.h>
|
28
|
-
#include <pthread.h>
|
29
|
-
#include <unistd.h>
|
30
|
-
#include <signal.h>
|
31
|
-
#include <cstdio>
|
32
|
-
#include <ctime>
|
33
|
-
#include <cassert>
|
34
|
-
|
35
|
-
/**
|
36
|
-
* Support for interruption of blocking system calls and C library calls.
|
37
|
-
*
|
38
|
-
* This file provides a framework for writing multithreading code that can
|
39
|
-
* be interrupted, even when blocked on system calls or C library calls.
|
40
|
-
*
|
41
|
-
* One must first call Passenger::setupSysCallInterruptionSupport().
|
42
|
-
* Then one may use the functions in Passenger::InterruptableCalls
|
43
|
-
* as drop-in replacements for system calls or C library functions.
|
44
|
-
* Thread::interrupt() and Thread::interruptAndJoin() should be used
|
45
|
-
* for interrupting threads.
|
46
|
-
*
|
47
|
-
* By default, interruptions are caught.
|
48
|
-
*/
|
49
|
-
|
50
|
-
// This is one of the things that Java is good at and C++ sucks at. Sigh...
|
51
|
-
|
52
|
-
namespace Passenger {
|
53
|
-
|
54
|
-
using namespace boost;
|
55
|
-
|
56
|
-
static const int INTERRUPTION_SIGNAL = SIGINT;
|
57
|
-
|
58
|
-
/**
|
59
|
-
* Setup system call interruption support.
|
60
|
-
* This function may only be called once. It installs a signal handler
|
61
|
-
* for INTERRUPTION_SIGNAL, so one should not install a different signal
|
62
|
-
* handler for that signal after calling this function.
|
63
|
-
*/
|
64
|
-
void setupSyscallInterruptionSupport();
|
65
|
-
|
66
|
-
/**
|
67
|
-
* Thread class with system call interruption support.
|
68
|
-
*/
|
69
|
-
class Thread: public thread {
|
70
|
-
public:
|
71
|
-
template <class F>
|
72
|
-
explicit Thread(F f, unsigned int stackSize = 0)
|
73
|
-
: thread(f, stackSize) {}
|
74
|
-
|
75
|
-
/**
|
76
|
-
* Interrupt the thread. This method behaves just like
|
77
|
-
* boost::thread::interrupt(), but will also respect the interruption
|
78
|
-
* points defined in Passenger::InterruptableCalls.
|
79
|
-
*
|
80
|
-
* Note that an interruption request may get lost, depending on the
|
81
|
-
* current execution point of the thread. Thus, one should call this
|
82
|
-
* method in a loop, until a certain goal condition has been fulfilled.
|
83
|
-
* interruptAndJoin() is a convenience method that implements this
|
84
|
-
* pattern.
|
85
|
-
*/
|
86
|
-
void interrupt() {
|
87
|
-
int ret;
|
88
|
-
|
89
|
-
thread::interrupt();
|
90
|
-
do {
|
91
|
-
ret = pthread_kill(native_handle(),
|
92
|
-
INTERRUPTION_SIGNAL);
|
93
|
-
} while (ret == EINTR);
|
94
|
-
}
|
95
|
-
|
96
|
-
/**
|
97
|
-
* Keep interrupting the thread until it's done, then join it.
|
98
|
-
*
|
99
|
-
* @throws boost::thread_interrupted
|
100
|
-
*/
|
101
|
-
void interruptAndJoin() {
|
102
|
-
bool done = false;
|
103
|
-
while (!done) {
|
104
|
-
interrupt();
|
105
|
-
done = timed_join(posix_time::millisec(10));
|
106
|
-
}
|
107
|
-
}
|
108
|
-
};
|
109
|
-
|
110
|
-
/**
|
111
|
-
* System call and C library call wrappers with interruption support.
|
112
|
-
* These functions are interruption points, i.e. they throw boost::thread_interrupted
|
113
|
-
* whenever the calling thread is interrupted by Thread::interrupt() or
|
114
|
-
* Thread::interruptAndJoin().
|
115
|
-
*/
|
116
|
-
namespace InterruptableCalls {
|
117
|
-
ssize_t read(int fd, void *buf, size_t count);
|
118
|
-
ssize_t write(int fd, const void *buf, size_t count);
|
119
|
-
int close(int fd);
|
120
|
-
|
121
|
-
int socketpair(int d, int type, int protocol, int sv[2]);
|
122
|
-
ssize_t recvmsg(int s, struct msghdr *msg, int flags);
|
123
|
-
ssize_t sendmsg(int s, const struct msghdr *msg, int flags);
|
124
|
-
int shutdown(int s, int how);
|
125
|
-
|
126
|
-
FILE *fopen(const char *path, const char *mode);
|
127
|
-
int fclose(FILE *fp);
|
128
|
-
|
129
|
-
time_t time(time_t *t);
|
130
|
-
int usleep(useconds_t usec);
|
131
|
-
int nanosleep(const struct timespec *req, struct timespec *rem);
|
132
|
-
|
133
|
-
pid_t fork();
|
134
|
-
int kill(pid_t pid, int sig);
|
135
|
-
pid_t waitpid(pid_t pid, int *status, int options);
|
136
|
-
}
|
137
|
-
|
138
|
-
} // namespace Passenger
|
139
|
-
|
140
|
-
namespace boost {
|
141
|
-
namespace this_thread {
|
142
|
-
|
143
|
-
/**
|
144
|
-
* @intern
|
145
|
-
*/
|
146
|
-
extern thread_specific_ptr<bool> _syscalls_interruptable;
|
147
|
-
|
148
|
-
/**
|
149
|
-
* Check whether system calls should be interruptable in
|
150
|
-
* the calling thread.
|
151
|
-
*/
|
152
|
-
bool syscalls_interruptable();
|
153
|
-
|
154
|
-
class restore_syscall_interruption;
|
155
|
-
|
156
|
-
/**
|
157
|
-
* Create this struct on the stack to temporarily enable system
|
158
|
-
* call interruption, until the object goes out of scope.
|
159
|
-
*/
|
160
|
-
class enable_syscall_interruption {
|
161
|
-
private:
|
162
|
-
bool lastValue;
|
163
|
-
public:
|
164
|
-
enable_syscall_interruption() {
|
165
|
-
if (_syscalls_interruptable.get() == NULL) {
|
166
|
-
lastValue = true;
|
167
|
-
_syscalls_interruptable.reset(new bool(true));
|
168
|
-
} else {
|
169
|
-
lastValue = *_syscalls_interruptable;
|
170
|
-
*_syscalls_interruptable = true;
|
171
|
-
}
|
172
|
-
}
|
173
|
-
|
174
|
-
~enable_syscall_interruption() {
|
175
|
-
*_syscalls_interruptable = lastValue;
|
176
|
-
}
|
177
|
-
};
|
178
|
-
|
179
|
-
/**
|
180
|
-
* Create this struct on the stack to temporarily disable system
|
181
|
-
* call interruption, until the object goes out of scope.
|
182
|
-
* While system call interruption is disabled, the functions in
|
183
|
-
* InterruptableCalls will try until the return code is not EINTR.
|
184
|
-
*/
|
185
|
-
class disable_syscall_interruption {
|
186
|
-
private:
|
187
|
-
friend class restore_syscall_interruption;
|
188
|
-
bool lastValue;
|
189
|
-
public:
|
190
|
-
disable_syscall_interruption() {
|
191
|
-
if (_syscalls_interruptable.get() == NULL) {
|
192
|
-
lastValue = true;
|
193
|
-
_syscalls_interruptable.reset(new bool(false));
|
194
|
-
} else {
|
195
|
-
lastValue = *_syscalls_interruptable;
|
196
|
-
*_syscalls_interruptable = false;
|
197
|
-
}
|
198
|
-
}
|
199
|
-
|
200
|
-
~disable_syscall_interruption() {
|
201
|
-
*_syscalls_interruptable = lastValue;
|
202
|
-
}
|
203
|
-
};
|
204
|
-
|
205
|
-
/**
|
206
|
-
* Creating an object of this class on the stack will restore the
|
207
|
-
* system call interruption state to what it was before.
|
208
|
-
*/
|
209
|
-
class restore_syscall_interruption {
|
210
|
-
private:
|
211
|
-
int lastValue;
|
212
|
-
public:
|
213
|
-
restore_syscall_interruption(const disable_syscall_interruption &intr) {
|
214
|
-
assert(_syscalls_interruptable.get() != NULL);
|
215
|
-
lastValue = *_syscalls_interruptable;
|
216
|
-
*_syscalls_interruptable = intr.lastValue;
|
217
|
-
}
|
218
|
-
|
219
|
-
~restore_syscall_interruption() {
|
220
|
-
*_syscalls_interruptable = lastValue;
|
221
|
-
}
|
222
|
-
};
|
223
|
-
|
224
|
-
} // namespace this_thread
|
225
|
-
} // namespace boost
|
226
|
-
|
227
|
-
#endif /* _PASSENGER_SYSTEM_H_ */
|
228
|
-
|
@@ -1,302 +0,0 @@
|
|
1
|
-
# Phusion Passenger - http://www.modrails.com/
|
2
|
-
# Copyright (C) 2008 Phusion
|
3
|
-
#
|
4
|
-
# Phusion Passenger is a trademark of Hongli Lai & Ninh Bui.
|
5
|
-
#
|
6
|
-
# This program is free software; you can redistribute it and/or modify
|
7
|
-
# it under the terms of the GNU General Public License as published by
|
8
|
-
# the Free Software Foundation; version 2 of the License.
|
9
|
-
#
|
10
|
-
# This program is distributed in the hope that it will be useful,
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
-
# GNU General Public License for more details.
|
14
|
-
#
|
15
|
-
# You should have received a copy of the GNU General Public License along
|
16
|
-
# with this program; if not, write to the Free Software Foundation, Inc.,
|
17
|
-
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
18
|
-
|
19
|
-
require 'rbconfig'
|
20
|
-
|
21
|
-
# Wow, I can't believe in how many ways one can build Apache in OS
|
22
|
-
# X! We have to resort to all sorts of tricks to make Passenger build
|
23
|
-
# out of the box on OS X. :-(
|
24
|
-
#
|
25
|
-
# In the name of usability and the "end user is the king" line of thought,
|
26
|
-
# I shall suffer the horrible faith of writing tons of autodetection code!
|
27
|
-
|
28
|
-
# This module autodetects various platform-specific information, and
|
29
|
-
# provides that information through constants.
|
30
|
-
#
|
31
|
-
# Users can change the detection behavior by setting the environment variable
|
32
|
-
# <tt>APXS2</tt> to the correct 'apxs' (or 'apxs2') binary, as provided by
|
33
|
-
# Apache.
|
34
|
-
module PlatformInfo
|
35
|
-
private
|
36
|
-
def self.env_defined?(name)
|
37
|
-
return !ENV[name].nil? && !ENV[name].empty?
|
38
|
-
end
|
39
|
-
|
40
|
-
def self.determine_gem_command
|
41
|
-
gem_exe_in_path = find_command("gem")
|
42
|
-
correct_gem_exe = File.dirname(RUBY) + "/gem"
|
43
|
-
if gem_exe_in_path.nil? || gem_exe_in_path == correct_gem_exe
|
44
|
-
return "gem"
|
45
|
-
else
|
46
|
-
return correct_gem_exe
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def self.find_apxs2
|
51
|
-
if env_defined?("APXS2")
|
52
|
-
return ENV["APXS2"]
|
53
|
-
end
|
54
|
-
['apxs2', 'apxs'].each do |name|
|
55
|
-
command = find_command(name)
|
56
|
-
if !command.nil?
|
57
|
-
return command
|
58
|
-
end
|
59
|
-
end
|
60
|
-
return nil
|
61
|
-
end
|
62
|
-
|
63
|
-
def self.determine_apache2_bindir
|
64
|
-
if APXS2.nil?
|
65
|
-
return nil
|
66
|
-
else
|
67
|
-
return `#{APXS2} -q BINDIR 2>/dev/null`.strip
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
def self.determine_apache2_sbindir
|
72
|
-
if APXS2.nil?
|
73
|
-
return nil
|
74
|
-
else
|
75
|
-
return `#{APXS2} -q SBINDIR`.strip
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
def self.find_apache2_executable(*possible_names)
|
80
|
-
[APACHE2_BINDIR, APACHE2_SBINDIR].each do |bindir|
|
81
|
-
if bindir.nil?
|
82
|
-
next
|
83
|
-
end
|
84
|
-
possible_names.each do |name|
|
85
|
-
filename = "#{bindir}/#{name}"
|
86
|
-
if File.file?(filename) && File.executable?(filename)
|
87
|
-
return filename
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
return nil
|
92
|
-
end
|
93
|
-
|
94
|
-
def self.find_apache2ctl
|
95
|
-
return find_apache2_executable('apache2ctl', 'apachectl')
|
96
|
-
end
|
97
|
-
|
98
|
-
def self.find_httpd
|
99
|
-
if env_defined?('HTTPD')
|
100
|
-
return ENV['HTTPD']
|
101
|
-
elsif APXS2.nil?
|
102
|
-
["apache2", "httpd2", "apache", "httpd"].each do |name|
|
103
|
-
command = find_command(name)
|
104
|
-
if !command.nil?
|
105
|
-
return command
|
106
|
-
end
|
107
|
-
end
|
108
|
-
return nil
|
109
|
-
else
|
110
|
-
return find_apache2_executable(`#{APXS2} -q TARGET`.strip)
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
def self.determine_apxs2_flags
|
115
|
-
if APXS2.nil?
|
116
|
-
return nil
|
117
|
-
else
|
118
|
-
flags = `#{APXS2} -q CFLAGS`.strip << " -I" << `#{APXS2} -q INCLUDEDIR`
|
119
|
-
flags.strip!
|
120
|
-
flags.gsub!(/-O\d? /, '')
|
121
|
-
return flags
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
def self.find_apr_config
|
126
|
-
if env_defined?('APR_CONFIG')
|
127
|
-
apr_config = ENV['APR_CONFIG']
|
128
|
-
elsif RUBY_PLATFORM =~ /darwin/ && HTTPD == "/usr/sbin/httpd"
|
129
|
-
# If we're on MacOS X, and we're compiling against the
|
130
|
-
# default provided Apache, then we'll want to query the
|
131
|
-
# correct 'apr-1-config' command. However, that command
|
132
|
-
# is not in $PATH by default. Instead, it lives in
|
133
|
-
# /Developer/SDKs/MacOSX*sdk/usr/bin.
|
134
|
-
sdk_dir = Dir["/Developer/SDKs/MacOSX*sdk"].sort.last
|
135
|
-
if sdk_dir
|
136
|
-
apr_config = "#{sdk_dir}/usr/bin/apr-1-config"
|
137
|
-
if !File.executable?(apr_config)
|
138
|
-
apr_config = nil
|
139
|
-
end
|
140
|
-
end
|
141
|
-
else
|
142
|
-
apr_config = find_command('apr-1-config')
|
143
|
-
if apr_config.nil?
|
144
|
-
apr_config = find_command('apr-config')
|
145
|
-
end
|
146
|
-
end
|
147
|
-
return apr_config
|
148
|
-
end
|
149
|
-
|
150
|
-
def self.determine_apr_info
|
151
|
-
if APR_CONFIG.nil?
|
152
|
-
return nil
|
153
|
-
else
|
154
|
-
flags = `#{APR_CONFIG} --cppflags --includes`.strip
|
155
|
-
libs = `#{APR_CONFIG} --link-ld`.strip
|
156
|
-
flags.gsub!(/-O\d? /, '')
|
157
|
-
return [flags, libs]
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
def self.find_apu_config
|
162
|
-
if env_defined?('APU_CONFIG')
|
163
|
-
apu_config = ENV['APU_CONFIG']
|
164
|
-
elsif RUBY_PLATFORM =~ /darwin/ && HTTPD == "/usr/sbin/httpd"
|
165
|
-
# If we're on MacOS X, and we're compiling against the
|
166
|
-
# default provided Apache, then we'll want to query the
|
167
|
-
# correct 'apu-1-config' command. However, that command
|
168
|
-
# is not in $PATH by default. Instead, it lives in
|
169
|
-
# /Developer/SDKs/MacOSX*sdk/usr/bin.
|
170
|
-
sdk_dir = Dir["/Developer/SDKs/MacOSX*sdk"].sort.last
|
171
|
-
if sdk_dir
|
172
|
-
apu_config = "#{sdk_dir}/usr/bin/apu-1-config"
|
173
|
-
if !File.executable?(apu_config)
|
174
|
-
apu_config = nil
|
175
|
-
end
|
176
|
-
end
|
177
|
-
else
|
178
|
-
apu_config = find_command('apu-1-config')
|
179
|
-
if apu_config.nil?
|
180
|
-
apu_config = find_command('apu-config')
|
181
|
-
end
|
182
|
-
end
|
183
|
-
return apu_config
|
184
|
-
end
|
185
|
-
|
186
|
-
def self.determine_apu_info
|
187
|
-
if APU_CONFIG.nil?
|
188
|
-
return nil
|
189
|
-
else
|
190
|
-
flags = `#{APU_CONFIG} --includes`.strip
|
191
|
-
libs = `#{APU_CONFIG} --link-ld`.strip
|
192
|
-
flags.gsub!(/-O\d? /, '')
|
193
|
-
return [flags, libs]
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
def self.determine_multi_arch_flags
|
198
|
-
if RUBY_PLATFORM =~ /darwin/ && !HTTPD.nil?
|
199
|
-
architectures = []
|
200
|
-
`file "#{HTTPD}"`.split("\n").grep(/for architecture/).each do |line|
|
201
|
-
line =~ /for architecture (.*?)\)/
|
202
|
-
architectures << "-arch #{$1}"
|
203
|
-
end
|
204
|
-
return architectures.join(' ')
|
205
|
-
else
|
206
|
-
return ""
|
207
|
-
end
|
208
|
-
end
|
209
|
-
|
210
|
-
def self.determine_library_extension
|
211
|
-
if RUBY_PLATFORM =~ /darwin/
|
212
|
-
return "bundle"
|
213
|
-
else
|
214
|
-
return "so"
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
def self.read_file(filename)
|
219
|
-
return File.read(filename)
|
220
|
-
rescue
|
221
|
-
return ""
|
222
|
-
end
|
223
|
-
|
224
|
-
def self.determine_linux_distro
|
225
|
-
if RUBY_PLATFORM !~ /linux/
|
226
|
-
return nil
|
227
|
-
end
|
228
|
-
lsb_release = read_file("/etc/lsb-release")
|
229
|
-
if lsb_release =~ /Ubuntu/
|
230
|
-
return :ubuntu
|
231
|
-
elsif File.exist?("/etc/debian_version")
|
232
|
-
return :debian
|
233
|
-
elsif File.exist?("/etc/redhat-release")
|
234
|
-
redhat_release = read_file("/etc/redhat-release")
|
235
|
-
if redhat_release =~ /CentOS/
|
236
|
-
return :centos
|
237
|
-
elsif redhat_release =~ /Fedora/ # is this correct?
|
238
|
-
return :fedora
|
239
|
-
else
|
240
|
-
# On official RHEL distros, the content is in the form of
|
241
|
-
# "Red Hat Enterprise Linux Server release 5.1 (Tikanga)"
|
242
|
-
return :rhel
|
243
|
-
end
|
244
|
-
elsif File.exist?("/etc/suse-release")
|
245
|
-
return :suse
|
246
|
-
elsif File.exist?("/etc/gentoo-release")
|
247
|
-
return :gentoo
|
248
|
-
else
|
249
|
-
return :unknown
|
250
|
-
end
|
251
|
-
# TODO: Slackware, Mandrake/Mandriva
|
252
|
-
end
|
253
|
-
|
254
|
-
public
|
255
|
-
# Check whether the specified command is in $PATH, and return its
|
256
|
-
# absolute filename. Returns nil if the command is not found.
|
257
|
-
#
|
258
|
-
# This function exists because system('which') doesn't always behave
|
259
|
-
# correctly, for some weird reason.
|
260
|
-
def self.find_command(name)
|
261
|
-
ENV['PATH'].split(File::PATH_SEPARATOR).detect do |directory|
|
262
|
-
path = File.join(directory, name.to_s)
|
263
|
-
if File.executable?(path)
|
264
|
-
return path
|
265
|
-
end
|
266
|
-
end
|
267
|
-
return nil
|
268
|
-
end
|
269
|
-
|
270
|
-
# The absolute path to the current Ruby interpreter.
|
271
|
-
RUBY = Config::CONFIG['bindir'] + '/' + Config::CONFIG['RUBY_INSTALL_NAME'] + Config::CONFIG['EXEEXT']
|
272
|
-
# The correct 'gem' command for this Ruby interpreter.
|
273
|
-
GEM = determine_gem_command
|
274
|
-
|
275
|
-
# The absolute path to the 'apxs' or 'apxs2' executable.
|
276
|
-
APXS2 = find_apxs2
|
277
|
-
# The absolute path to the Apache 2 'bin' directory.
|
278
|
-
APACHE2_BINDIR = determine_apache2_bindir
|
279
|
-
# The absolute path to the Apache 2 'sbin' directory.
|
280
|
-
APACHE2_SBINDIR = determine_apache2_sbindir
|
281
|
-
# The absolute path to the 'apachectl' or 'apache2ctl' binary.
|
282
|
-
APACHE2CTL = find_apache2ctl
|
283
|
-
# The absolute path to the Apache binary (that is, 'httpd', 'httpd2', 'apache' or 'apache2').
|
284
|
-
HTTPD = find_httpd
|
285
|
-
# The absolute path to the 'apr-config' or 'apr-1-config' executable.
|
286
|
-
APR_CONFIG = find_apr_config
|
287
|
-
APU_CONFIG = find_apu_config
|
288
|
-
|
289
|
-
# The C compiler flags that are necessary to compile an Apache module.
|
290
|
-
APXS2_FLAGS = determine_apxs2_flags
|
291
|
-
# The C compiler flags that are necessary for programs that use APR.
|
292
|
-
APR_FLAGS, APR_LIBS = determine_apr_info
|
293
|
-
# The C compiler flags that are necessary for programs that use APR-Util.
|
294
|
-
APU_FLAGS, APU_LIBS = determine_apu_info
|
295
|
-
|
296
|
-
# The C compiler flags that are necessary for building binaries in the same architecture(s) as Apache.
|
297
|
-
MULTI_ARCH_FLAGS = determine_multi_arch_flags
|
298
|
-
# The current platform's shared library extension ('so' on most Unices).
|
299
|
-
LIBEXT = determine_library_extension
|
300
|
-
# An identifier for the current Linux distribution. nil if the operating system is not Linux.
|
301
|
-
LINUX_DISTRO = determine_linux_distro
|
302
|
-
end
|