passenger 4.0.20 → 4.0.21
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.
- checksums.yaml +8 -8
- checksums.yaml.gz.asc +7 -7
- data.tar.gz.asc +7 -7
- data/.gitignore +1 -0
- data/.travis.yml +1 -1
- data/NEWS +15 -0
- data/README.md +5 -3
- data/Rakefile +1 -0
- data/bin/passenger-config +1 -5
- data/bin/passenger-install-apache2-module +53 -5
- data/bin/passenger-install-nginx-module +19 -6
- data/bin/passenger-memory-stats +3 -3
- data/build/agents.rb +11 -8
- data/build/apache2.rb +9 -5
- data/build/basics.rb +15 -21
- data/build/common_library.rb +16 -6
- data/build/cplusplus_support.rb +5 -5
- data/build/cxx_tests.rb +3 -3
- data/build/documentation.rb +1 -1
- data/build/misc.rb +4 -37
- data/build/node_tests.rb +29 -0
- data/build/oxt_tests.rb +1 -1
- data/build/packaging.rb +29 -10
- data/build/preprocessor.rb +2 -1
- data/build/test_basics.rb +15 -6
- data/debian.template/locations.ini.template +1 -0
- data/debian.template/passenger.install.template +1 -0
- data/dev/copy_boost_headers.rb +7 -3
- data/dev/run_travis.sh +32 -16
- data/doc/Users guide Apache.idmap.txt +22 -34
- data/doc/Users guide Apache.txt +20 -234
- data/doc/Users guide Nginx.idmap.txt +84 -66
- data/doc/Users guide Nginx.txt +50 -1
- data/doc/Users guide Standalone.idmap.txt +74 -0
- data/doc/Users guide Standalone.txt +22 -9
- data/doc/Users guide.txt +51 -0
- data/doc/users_guide_snippets/environment_variables.txt +0 -3
- data/doc/users_guide_snippets/installation.txt +337 -380
- data/doc/users_guide_snippets/installation/run_installer.txt +58 -0
- data/doc/users_guide_snippets/installation/verify_running_epilogue.txt +6 -0
- data/doc/users_guide_snippets/support_information.txt +2 -9
- data/doc/users_guide_snippets/troubleshooting/default.txt +112 -0
- data/doc/users_guide_snippets/troubleshooting/rails.txt +56 -0
- data/doc/users_guide_snippets/where_to_get_support.txt +9 -0
- data/ext/apache2/Bucket.h +1 -1
- data/ext/apache2/Configuration.hpp +0 -44
- data/ext/apache2/CreateDirConfig.cpp +1 -1
- data/ext/apache2/CreateDirConfig.cpp.erb +1 -1
- data/ext/apache2/Hooks.cpp +28 -21
- data/ext/apache2/MergeDirConfig.cpp +1 -0
- data/ext/apache2/MergeDirConfig.cpp.erb +1 -1
- data/ext/apache2/SetHeaders.cpp +73 -0
- data/ext/apache2/SetHeaders.cpp.erb +88 -0
- data/ext/boost/algorithm/string/detail/find_format.hpp +5 -5
- data/ext/boost/algorithm/string/detail/find_format_all.hpp +5 -5
- data/ext/boost/algorithm/string/detail/finder.hpp +1 -1
- data/ext/boost/algorithm/string/formatter.hpp +2 -2
- data/ext/boost/assert.hpp +6 -1
- data/ext/boost/atomic.hpp +18 -0
- data/ext/boost/atomic/atomic.hpp +241 -0
- data/ext/boost/atomic/detail/base.hpp +585 -0
- data/ext/boost/atomic/detail/cas32strong.hpp +885 -0
- data/ext/boost/atomic/detail/cas32weak.hpp +947 -0
- data/ext/boost/atomic/detail/cas64strong.hpp +443 -0
- data/ext/boost/atomic/detail/config.hpp +54 -0
- data/ext/boost/atomic/detail/gcc-alpha.hpp +368 -0
- data/ext/boost/atomic/detail/gcc-armv6plus.hpp +252 -0
- data/ext/boost/atomic/detail/gcc-cas.hpp +157 -0
- data/ext/boost/atomic/detail/gcc-ppc.hpp +2850 -0
- data/ext/boost/atomic/detail/gcc-sparcv9.hpp +1259 -0
- data/ext/boost/atomic/detail/gcc-x86.hpp +1766 -0
- data/ext/boost/atomic/detail/generic-cas.hpp +206 -0
- data/ext/boost/atomic/detail/interlocked.hpp +200 -0
- data/ext/boost/atomic/detail/linux-arm.hpp +189 -0
- data/ext/boost/atomic/detail/lockpool.hpp +97 -0
- data/ext/boost/atomic/detail/platform.hpp +62 -0
- data/ext/boost/atomic/detail/type-classification.hpp +45 -0
- data/ext/boost/chrono/config.hpp +8 -3
- data/ext/boost/chrono/duration.hpp +9 -10
- data/ext/boost/chrono/system_clocks.hpp +1 -1
- data/ext/boost/chrono/time_point.hpp +4 -3
- data/ext/boost/config/auto_link.hpp +53 -52
- data/ext/boost/config/compiler/borland.hpp +1 -0
- data/ext/boost/config/compiler/clang.hpp +24 -1
- data/ext/boost/config/compiler/codegear.hpp +1 -0
- data/ext/boost/config/compiler/common_edg.hpp +1 -0
- data/ext/boost/config/compiler/cray.hpp +1 -0
- data/ext/boost/config/compiler/digitalmars.hpp +1 -0
- data/ext/boost/config/compiler/gcc.hpp +29 -3
- data/ext/boost/config/compiler/gcc_xml.hpp +2 -1
- data/ext/boost/config/compiler/hp_acc.hpp +1 -0
- data/ext/boost/config/compiler/intel.hpp +1 -1
- data/ext/boost/config/compiler/metrowerks.hpp +1 -0
- data/ext/boost/config/compiler/mpw.hpp +1 -0
- data/ext/boost/config/compiler/pathscale.hpp +1 -0
- data/ext/boost/config/compiler/pgi.hpp +1 -0
- data/ext/boost/config/compiler/sunpro_cc.hpp +1 -0
- data/ext/boost/config/compiler/vacpp.hpp +3 -2
- data/ext/boost/config/compiler/visualc.hpp +25 -11
- data/ext/boost/config/platform/vxworks.hpp +353 -15
- data/ext/boost/config/select_compiler_config.hpp +4 -4
- data/ext/boost/config/stdlib/dinkumware.hpp +10 -3
- data/ext/boost/config/stdlib/libstdcpp3.hpp +2 -1
- data/ext/boost/config/suffix.hpp +45 -19
- data/ext/boost/date_time/format_date_parser.hpp +1 -11
- data/ext/boost/date_time/strings_from_facet.hpp +5 -3
- data/ext/boost/detail/atomic_redef_macros.hpp +19 -0
- data/ext/boost/detail/atomic_undef_macros.hpp +39 -0
- data/ext/boost/detail/endian.hpp +52 -4
- data/ext/boost/detail/scoped_enum_emulation.hpp +10 -10
- data/ext/boost/detail/select_type.hpp +36 -0
- data/ext/boost/exception/current_exception_cast.hpp +1 -1
- data/ext/boost/exception/detail/error_info_impl.hpp +3 -5
- data/ext/boost/exception/detail/exception_ptr.hpp +3 -3
- data/ext/boost/exception/detail/is_output_streamable.hpp +1 -1
- data/ext/boost/exception/detail/object_hex_dump.hpp +1 -1
- data/ext/boost/exception/detail/type_info.hpp +1 -1
- data/ext/boost/exception/diagnostic_information.hpp +15 -14
- data/ext/boost/exception/exception.hpp +1 -1
- data/ext/boost/exception/get_error_info.hpp +1 -1
- data/ext/boost/exception/info.hpp +12 -13
- data/ext/boost/exception/to_string.hpp +6 -1
- data/ext/boost/exception/to_string_stub.hpp +9 -1
- data/ext/boost/foreach.hpp +5 -5
- data/ext/boost/function/function_template.hpp +6 -6
- data/ext/boost/functional/hash/detail/float_functions.hpp +90 -0
- data/ext/boost/functional/hash/detail/hash_float.hpp +11 -2
- data/ext/boost/functional/hash/extensions.hpp +14 -2
- data/ext/boost/functional/hash/hash.hpp +26 -5
- data/ext/boost/get_pointer.hpp +17 -2
- data/ext/boost/integer_traits.hpp +1 -1
- data/ext/boost/lexical_cast.hpp +615 -395
- data/ext/boost/libs/atomic/lockpool.cpp +24 -0
- data/ext/boost/libs/system/src/error_code.cpp +25 -18
- data/ext/boost/libs/thread/src/future.cpp +7 -5
- data/ext/boost/libs/thread/src/pthread/once.cpp +9 -3
- data/ext/boost/libs/thread/src/pthread/once_atomic.cpp +90 -0
- data/ext/boost/libs/thread/src/pthread/thread.cpp +129 -95
- data/ext/boost/libs/thread/src/pthread/timeconv.inl +20 -1
- data/ext/boost/limits.hpp +1 -1
- data/ext/boost/math/policies/policy.hpp +10 -0
- data/ext/boost/math/special_functions/detail/round_fwd.hpp +17 -4
- data/ext/boost/math/special_functions/fpclassify.hpp +114 -45
- data/ext/boost/math/special_functions/math_fwd.hpp +195 -83
- data/ext/boost/math/special_functions/sign.hpp +13 -8
- data/ext/boost/math/tools/config.hpp +38 -16
- data/ext/boost/move/algorithm.hpp +275 -0
- data/ext/boost/move/core.hpp +332 -0
- data/ext/boost/move/detail/config_begin.hpp +23 -0
- data/ext/boost/move/detail/config_end.hpp +20 -0
- data/ext/boost/move/detail/meta_utils.hpp +158 -0
- data/ext/boost/move/iterator.hpp +298 -0
- data/ext/boost/move/move.hpp +10 -1256
- data/ext/boost/move/traits.hpp +142 -0
- data/ext/boost/move/utility.hpp +194 -0
- data/ext/boost/mpl/assert.hpp +72 -4
- data/ext/boost/noncopyable.hpp +15 -3
- data/ext/boost/pointer_to_other.hpp +55 -0
- data/ext/boost/range/concepts.hpp +4 -4
- data/ext/boost/range/detail/extract_optional_type.hpp +1 -1
- data/ext/boost/range/empty.hpp +1 -1
- data/ext/boost/range/iterator_range_core.hpp +4 -1
- data/ext/boost/range/iterator_range_io.hpp +2 -2
- data/ext/boost/ratio/config.hpp +6 -0
- data/ext/boost/ratio/detail/overflow_helpers.hpp +2 -2
- data/ext/boost/smart_ptr/allocate_shared_array.hpp +250 -0
- data/ext/boost/smart_ptr/detail/allocate_array_helper.hpp +169 -0
- data/ext/boost/smart_ptr/detail/array_deleter.hpp +124 -0
- data/ext/boost/smart_ptr/detail/array_traits.hpp +53 -0
- data/ext/boost/smart_ptr/detail/array_utility.hpp +178 -0
- data/ext/boost/smart_ptr/detail/make_array_helper.hpp +157 -0
- data/ext/boost/smart_ptr/detail/operator_bool.hpp +16 -9
- data/ext/boost/smart_ptr/detail/shared_count.hpp +78 -7
- data/ext/boost/smart_ptr/detail/sp_convertible.hpp +15 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base.hpp +12 -6
- data/ext/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_aix.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_nt.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_pt.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +162 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_solaris.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_spin.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_sync.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_impl.hpp +15 -0
- data/ext/boost/smart_ptr/detail/sp_forward.hpp +39 -0
- data/ext/boost/smart_ptr/detail/sp_has_sync.hpp +19 -3
- data/ext/boost/smart_ptr/detail/sp_if_array.hpp +31 -0
- data/ext/boost/smart_ptr/detail/sp_nullptr_t.hpp +45 -0
- data/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +5 -12
- data/ext/boost/smart_ptr/enable_shared_from_this.hpp +4 -4
- data/ext/boost/smart_ptr/make_shared.hpp +5 -1060
- data/ext/boost/smart_ptr/make_shared_array.hpp +247 -0
- data/ext/boost/smart_ptr/make_shared_object.hpp +1128 -0
- data/ext/boost/smart_ptr/scoped_array.hpp +32 -7
- data/ext/boost/smart_ptr/scoped_ptr.hpp +31 -5
- data/ext/boost/smart_ptr/shared_array.hpp +135 -20
- data/ext/boost/smart_ptr/shared_ptr.hpp +444 -126
- data/ext/boost/smart_ptr/weak_ptr.hpp +39 -28
- data/ext/boost/static_assert.hpp +74 -17
- data/ext/boost/system/error_code.hpp +76 -68
- data/ext/boost/system/system_error.hpp +5 -1
- data/ext/boost/thread/barrier.hpp +6 -2
- data/ext/boost/thread/completion_latch.hpp +233 -0
- data/ext/boost/thread/condition.hpp +6 -1
- data/ext/boost/thread/detail/async_func.hpp +571 -0
- data/ext/boost/thread/detail/config.hpp +248 -40
- data/ext/boost/thread/detail/counter.hpp +93 -0
- data/ext/boost/thread/detail/delete.hpp +12 -0
- data/ext/boost/thread/detail/invoke.hpp +1351 -0
- data/ext/boost/thread/detail/is_convertible.hpp +48 -0
- data/ext/boost/thread/detail/lockable_wrapper.hpp +45 -0
- data/ext/boost/thread/detail/log.hpp +83 -0
- data/ext/boost/thread/detail/make_tuple_indices.hpp +224 -0
- data/ext/boost/thread/detail/move.hpp +32 -16
- data/ext/boost/thread/detail/thread.hpp +236 -41
- data/ext/boost/thread/detail/thread_group.hpp +55 -9
- data/ext/boost/thread/detail/thread_interruption.hpp +4 -1
- data/ext/boost/thread/exceptions.hpp +2 -0
- data/ext/boost/thread/externally_locked.hpp +351 -0
- data/ext/boost/thread/externally_locked_stream.hpp +170 -0
- data/ext/boost/thread/future.hpp +2517 -455
- data/ext/boost/thread/future_error_code.hpp +61 -0
- data/ext/boost/thread/is_locked_by_this_thread.hpp +39 -0
- data/ext/boost/thread/latch.hpp +142 -0
- data/ext/boost/thread/lock_algorithms.hpp +468 -0
- data/ext/boost/thread/lock_concepts.hpp +197 -0
- data/ext/boost/thread/lock_factories.hpp +78 -0
- data/ext/boost/thread/lock_guard.hpp +88 -0
- data/ext/boost/thread/lock_options.hpp +31 -0
- data/ext/boost/thread/lock_traits.hpp +45 -0
- data/ext/boost/thread/lock_types.hpp +1226 -0
- data/ext/boost/thread/lockable_adapter.hpp +226 -0
- data/ext/boost/thread/lockable_concepts.hpp +157 -0
- data/ext/boost/thread/lockable_traits.hpp +207 -0
- data/ext/boost/thread/locks.hpp +5 -1816
- data/ext/boost/thread/mutex.hpp +33 -1
- data/ext/boost/thread/null_mutex.hpp +243 -0
- data/ext/boost/thread/once.hpp +10 -1
- data/ext/boost/thread/poly_lockable.hpp +68 -0
- data/ext/boost/thread/poly_lockable_adapter.hpp +89 -0
- data/ext/boost/thread/poly_shared_lockable.hpp +135 -0
- data/ext/boost/thread/poly_shared_lockable_adapter.hpp +170 -0
- data/ext/boost/thread/pthread/condition_variable.hpp +74 -26
- data/ext/boost/thread/pthread/condition_variable_fwd.hpp +54 -27
- data/ext/boost/thread/pthread/mutex.hpp +101 -38
- data/ext/boost/thread/pthread/once.hpp +459 -44
- data/ext/boost/thread/pthread/once_atomic.hpp +313 -0
- data/ext/boost/thread/pthread/recursive_mutex.hpp +19 -10
- data/ext/boost/thread/pthread/shared_mutex.hpp +226 -61
- data/ext/boost/thread/pthread/shared_mutex_assert.hpp +724 -0
- data/ext/boost/thread/pthread/thread_data.hpp +53 -50
- data/ext/boost/thread/pthread/timespec.hpp +96 -12
- data/ext/boost/thread/recursive_mutex.hpp +44 -1
- data/ext/boost/thread/reverse_lock.hpp +3 -2
- data/ext/boost/thread/scoped_thread.hpp +285 -0
- data/ext/boost/thread/shared_lock_guard.hpp +2 -1
- data/ext/boost/thread/shared_mutex.hpp +23 -0
- data/ext/boost/thread/strict_lock.hpp +235 -0
- data/ext/boost/thread/sync_bounded_queue.hpp +594 -0
- data/ext/boost/thread/sync_queue.hpp +516 -0
- data/ext/boost/thread/synchronized_value.hpp +1001 -0
- data/ext/boost/thread/testable_mutex.hpp +148 -0
- data/ext/boost/thread/thread.hpp +1 -13
- data/ext/boost/thread/thread_functors.hpp +57 -0
- data/ext/boost/thread/thread_guard.hpp +46 -0
- data/ext/boost/thread/thread_only.hpp +29 -0
- data/ext/boost/thread/v2/shared_mutex.hpp +1062 -0
- data/ext/boost/thread/v2/thread.hpp +37 -10
- data/ext/boost/thread/xtime.hpp +2 -1
- data/ext/boost/token_functions.hpp +16 -16
- data/ext/boost/type_traits/add_lvalue_reference.hpp +26 -0
- data/ext/boost/type_traits/add_reference.hpp +1 -1
- data/ext/boost/type_traits/add_rvalue_reference.hpp +4 -4
- data/ext/boost/type_traits/aligned_storage.hpp +13 -0
- data/ext/boost/type_traits/common_type.hpp +11 -12
- data/ext/boost/type_traits/config.hpp +1 -1
- data/ext/boost/type_traits/detail/common_type_imp.hpp +1 -1
- data/ext/boost/type_traits/detail/has_binary_operator.hpp +1 -1
- data/ext/boost/type_traits/detail/is_function_ptr_tester.hpp +1 -1
- data/ext/boost/type_traits/has_left_shift.hpp +49 -0
- data/ext/boost/type_traits/has_right_shift.hpp +49 -0
- data/ext/boost/type_traits/has_trivial_move_assign.hpp +57 -0
- data/ext/boost/type_traits/has_trivial_move_constructor.hpp +57 -0
- data/ext/boost/type_traits/intrinsics.hpp +18 -2
- data/ext/boost/type_traits/is_abstract.hpp +1 -1
- data/ext/boost/type_traits/is_array.hpp +1 -1
- data/ext/boost/type_traits/is_const.hpp +1 -1
- data/ext/boost/type_traits/is_convertible.hpp +78 -17
- data/ext/boost/type_traits/is_function.hpp +6 -1
- data/ext/boost/type_traits/is_integral.hpp +6 -1
- data/ext/boost/type_traits/is_nothrow_move_assignable.hpp +84 -0
- data/ext/boost/type_traits/is_nothrow_move_constructible.hpp +84 -0
- data/ext/boost/type_traits/is_pod.hpp +3 -1
- data/ext/boost/type_traits/is_rvalue_reference.hpp +1 -1
- data/ext/boost/type_traits/is_volatile.hpp +1 -1
- data/ext/boost/type_traits/make_signed.hpp +153 -0
- data/ext/boost/type_traits/make_unsigned.hpp +16 -0
- data/ext/boost/type_traits/remove_const.hpp +1 -1
- data/ext/boost/type_traits/remove_cv.hpp +1 -1
- data/ext/boost/type_traits/remove_reference.hpp +1 -1
- data/ext/boost/type_traits/remove_volatile.hpp +1 -1
- data/ext/boost/unordered/detail/allocate.hpp +1120 -0
- data/ext/boost/unordered/detail/buckets.hpp +876 -0
- data/ext/boost/unordered/detail/equivalent.hpp +680 -0
- data/ext/boost/unordered/detail/extract_key.hpp +183 -0
- data/ext/boost/unordered/detail/fwd.hpp +23 -0
- data/ext/boost/unordered/detail/table.hpp +861 -0
- data/ext/boost/unordered/detail/unique.hpp +622 -0
- data/ext/boost/unordered/detail/util.hpp +260 -0
- data/ext/boost/unordered/unordered_map.hpp +1652 -0
- data/ext/boost/unordered/unordered_map_fwd.hpp +65 -0
- data/ext/boost/unordered/unordered_set.hpp +1549 -0
- data/ext/boost/unordered/unordered_set_fwd.hpp +63 -0
- data/ext/boost/unordered_map.hpp +18 -0
- data/ext/boost/unordered_set.hpp +18 -0
- data/ext/boost/utility/addressof.hpp +2 -2
- data/ext/boost/utility/result_of.hpp +8 -1
- data/ext/boost/version.hpp +2 -2
- data/ext/common/Account.h +1 -1
- data/ext/common/AccountsDatabase.h +1 -1
- data/ext/common/AgentsStarter.cpp +3 -1
- data/ext/common/AgentsStarter.h +2 -2
- data/ext/common/ApplicationPool2/AppTypes.cpp +24 -6
- data/ext/common/ApplicationPool2/AppTypes.h +17 -8
- data/ext/common/ApplicationPool2/Common.h +12 -12
- data/ext/common/ApplicationPool2/DirectSpawner.h +2 -2
- data/ext/common/ApplicationPool2/DummySpawner.h +3 -3
- data/ext/common/ApplicationPool2/Group.h +6 -6
- data/ext/common/ApplicationPool2/Implementation.cpp +19 -19
- data/ext/common/ApplicationPool2/PipeWatcher.h +5 -5
- data/ext/common/ApplicationPool2/Pool.h +21 -21
- data/ext/common/ApplicationPool2/Process.h +6 -6
- data/ext/common/ApplicationPool2/Session.h +1 -1
- data/ext/common/ApplicationPool2/SmartSpawner.h +24 -12
- data/ext/common/ApplicationPool2/Socket.h +2 -2
- data/ext/common/ApplicationPool2/Spawner.h +64 -14
- data/ext/common/ApplicationPool2/SpawnerFactory.h +7 -7
- data/ext/common/ApplicationPool2/SuperGroup.h +5 -5
- data/ext/common/BackgroundEventLoop.cpp +4 -4
- data/ext/common/BackgroundEventLoop.h +1 -1
- data/ext/common/Constants.h +13 -1
- data/ext/common/EventedBufferedInput.h +8 -8
- data/ext/common/Exceptions.cpp +71 -0
- data/ext/common/Exceptions.h +60 -7
- data/ext/common/FileDescriptor.h +4 -4
- data/ext/common/MessageClient.h +1 -1
- data/ext/common/MessageServer.h +5 -5
- data/ext/common/MultiLibeio.cpp +3 -3
- data/ext/common/MultiLibeio.h +2 -2
- data/ext/common/RandomGenerator.h +11 -11
- data/ext/common/ResourceLocator.h +8 -1
- data/ext/common/SafeLibev.h +12 -12
- data/ext/common/ServerInstanceDir.h +11 -3
- data/ext/common/UnionStation.h +10 -10
- data/ext/common/Utils.cpp +11 -13
- data/ext/common/Utils.h +9 -9
- data/ext/common/Utils/BlockingQueue.h +10 -10
- data/ext/common/Utils/BufferedIO.h +1 -1
- data/ext/common/Utils/CachedFileStat.hpp +2 -2
- data/ext/common/Utils/FileChangeChecker.h +1 -1
- data/ext/common/Utils/HashMap.h +13 -4
- data/ext/common/Utils/IOUtils.cpp +33 -10
- data/ext/common/Utils/IniFile.h +3 -3
- data/ext/common/Utils/Lock.h +2 -2
- data/ext/common/Utils/MessagePassing.h +10 -10
- data/ext/common/Utils/ProcessMetricsCollector.h +24 -6
- data/ext/common/Utils/ScopeGuard.h +5 -5
- data/ext/common/Utils/jsoncpp.cpp +2 -0
- data/ext/common/agents/HelperAgent/FileBackedPipe.h +26 -26
- data/ext/common/agents/HelperAgent/Main.cpp +18 -18
- data/ext/common/agents/HelperAgent/RequestHandler.cpp +4 -4
- data/ext/common/agents/HelperAgent/RequestHandler.h +30 -21
- data/ext/common/agents/LoggingAgent/AdminController.h +1 -1
- data/ext/common/agents/LoggingAgent/FilterSupport.h +13 -11
- data/ext/common/agents/LoggingAgent/LoggingServer.h +11 -11
- data/ext/common/agents/LoggingAgent/Main.cpp +9 -9
- data/ext/common/agents/LoggingAgent/RemoteSender.h +3 -3
- data/ext/common/agents/SpawnPreparer.cpp +1 -0
- data/ext/common/agents/Watchdog/AgentWatcher.cpp +8 -7
- data/ext/common/agents/Watchdog/Main.cpp +81 -73
- data/ext/common/agents/Watchdog/ServerInstanceDirToucher.cpp +1 -1
- data/ext/libev/Changes +57 -0
- data/ext/libev/LICENSE +2 -1
- data/ext/libev/Makefile.in +110 -50
- data/ext/libev/README +8 -8
- data/ext/libev/aclocal.m4 +1503 -861
- data/ext/libev/config.guess +290 -304
- data/ext/libev/config.sub +77 -198
- data/ext/libev/configure +1735 -890
- data/ext/libev/configure.ac +3 -2
- data/ext/libev/ev++.h +6 -6
- data/ext/libev/ev.c +541 -214
- data/ext/libev/ev.h +106 -100
- data/ext/libev/ev_epoll.c +1 -1
- data/ext/libev/ev_kqueue.c +20 -4
- data/ext/libev/ev_vars.h +15 -16
- data/ext/libev/ev_win32.c +12 -2
- data/ext/libev/ev_wrap.h +162 -160
- data/ext/libev/event.c +29 -6
- data/ext/libev/event.h +9 -2
- data/ext/libev/ltmain.sh +2632 -1384
- data/ext/nginx/ConfigurationCommands.c +1 -1
- data/ext/nginx/ConfigurationCommands.c.erb +3 -1
- data/ext/nginx/ContentHandler.c +25 -2
- data/ext/nginx/CreateLocationConfig.c +1 -0
- data/ext/nginx/CreateLocationConfig.c.erb +1 -1
- data/ext/nginx/MergeLocationConfig.c +1 -0
- data/ext/nginx/MergeLocationConfig.c.erb +1 -1
- data/ext/nginx/config +12 -0
- data/ext/oxt/dynamic_thread_group.hpp +7 -4
- data/ext/oxt/system_calls.cpp +5 -1
- data/ext/oxt/system_calls.hpp +3 -0
- data/helper-scripts/node-loader.js +117 -249
- data/lib/phusion_passenger.rb +27 -5
- data/lib/phusion_passenger/abstract_installer.rb +104 -9
- data/lib/phusion_passenger/admin_tools/memory_stats.rb +10 -9
- data/lib/phusion_passenger/apache2/config_options.rb +6 -3
- data/lib/phusion_passenger/common_library.rb +7 -1
- data/lib/phusion_passenger/constants.rb +6 -0
- data/lib/phusion_passenger/loader_shared_helpers.rb +7 -4
- data/lib/phusion_passenger/nginx/config_options.rb +2 -1
- data/lib/phusion_passenger/packaging.rb +3 -0
- data/lib/phusion_passenger/platform_info/apache.rb +43 -6
- data/lib/phusion_passenger/platform_info/apache_detector.rb +15 -5
- data/lib/phusion_passenger/platform_info/compiler.rb +167 -32
- data/lib/phusion_passenger/platform_info/cxx_portability.rb +133 -77
- data/lib/phusion_passenger/platform_info/depcheck.rb +17 -7
- data/lib/phusion_passenger/platform_info/depcheck_specs/apache2.rb +3 -3
- data/lib/phusion_passenger/platform_info/depcheck_specs/compiler_toolchain.rb +4 -4
- data/lib/phusion_passenger/platform_info/depcheck_specs/ruby.rb +5 -6
- data/lib/phusion_passenger/platform_info/linux.rb +2 -1
- data/lib/phusion_passenger/platform_info/operating_system.rb +1 -1
- data/lib/phusion_passenger/platform_info/ruby.rb +18 -3
- data/lib/phusion_passenger/standalone/runtime_installer.rb +6 -2
- data/lib/phusion_passenger/standalone/start_command.rb +8 -2
- data/lib/phusion_passenger/utils/ansi_colors.rb +9 -0
- data/lib/phusion_passenger/utils/hosts_file_parser.rb +4 -2
- data/node_lib/phusion_passenger/httplib_emulation.js +141 -0
- data/node_lib/phusion_passenger/line_reader.js +154 -0
- data/node_lib/phusion_passenger/request_handler.js +65 -0
- data/node_lib/phusion_passenger/session_protocol_parser.js +113 -0
- data/resources/templates/apache2/deployment_example.txt.erb +2 -1
- data/resources/templates/apache2/installing_against_a_different_apache.txt.erb +14 -0
- data/resources/templates/apache2/multiple_apache_installations_detected.txt.erb +15 -0
- data/resources/templates/apache2/possible_solutions_for_compilation_and_installation_problems.txt.erb +4 -5
- data/resources/templates/general_error_with_html.html.template +1 -1
- data/resources/templates/installer_common/gem_install_permission_problems.txt.erb +17 -0
- data/resources/templates/installer_common/low_amount_of_memory_warning.txt.erb +6 -4
- data/resources/templates/installer_common/world_inaccessible_directories.txt.erb +16 -0
- data/resources/templates/nginx/deployment_example.txt.erb +2 -1
- data/resources/templates/nginx/possible_solutions_for_compilation_and_installation_problems.txt.erb +4 -5
- data/resources/templates/standalone/config.erb +1 -0
- data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +3 -3
- data/test/cxx/ApplicationPool2/PoolTest.cpp +4 -4
- data/test/cxx/ApplicationPool2/ProcessTest.cpp +5 -5
- data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +5 -5
- data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +1 -1
- data/test/cxx/EventedBufferedInputTest.cpp +6 -6
- data/test/cxx/FileBackedPipeTest.cpp +1 -1
- data/test/cxx/MessagePassingTest.cpp +1 -1
- data/test/cxx/MessageServerTest.cpp +4 -4
- data/test/cxx/RequestHandlerTest.cpp +7 -7
- data/test/cxx/UnionStationTest.cpp +2 -2
- data/test/node/line_reader_spec.js +338 -0
- data/test/node/spec_helper.js +27 -0
- data/test/ruby/standalone/runtime_installer_spec.rb +2 -1
- metadata +131 -22
- metadata.gz.asc +7 -7
- data/ext/boost/functional/hash/detail/container_fwd_0x.hpp +0 -29
- data/ext/boost/lambda/core.hpp +0 -79
- data/ext/boost/lambda/detail/actions.hpp +0 -174
- data/ext/boost/lambda/detail/arity_code.hpp +0 -110
- data/ext/boost/lambda/detail/function_adaptors.hpp +0 -789
- data/ext/boost/lambda/detail/is_instance_of.hpp +0 -104
- data/ext/boost/lambda/detail/lambda_config.hpp +0 -48
- data/ext/boost/lambda/detail/lambda_functor_base.hpp +0 -615
- data/ext/boost/lambda/detail/lambda_functors.hpp +0 -324
- data/ext/boost/lambda/detail/lambda_fwd.hpp +0 -74
- data/ext/boost/lambda/detail/lambda_traits.hpp +0 -578
- data/ext/boost/lambda/detail/member_ptr.hpp +0 -737
- data/ext/boost/lambda/detail/operator_actions.hpp +0 -139
- data/ext/boost/lambda/detail/operator_lambda_func_base.hpp +0 -271
- data/ext/boost/lambda/detail/operator_return_type_traits.hpp +0 -917
- data/ext/boost/lambda/detail/operators.hpp +0 -370
- data/ext/boost/lambda/detail/ret.hpp +0 -325
- data/ext/boost/lambda/detail/return_type_traits.hpp +0 -282
- data/ext/boost/lambda/detail/select_functions.hpp +0 -74
- data/ext/boost/lambda/lambda.hpp +0 -34
@@ -0,0 +1,58 @@
|
|
1
|
+
ifdef::apache[]
|
2
|
+
The Phusion Passenger gem only contains source files. In this step we will use the installer to compile the Phusion Passenger binaries, which include the various Phusion Passenger agent executables and the Apache module.
|
3
|
+
|
4
|
+
Run the following command and follow the on-screen instructions.
|
5
|
+
|
6
|
+
ifdef::gem[]
|
7
|
+
----------------------------------
|
8
|
+
passenger-install-apache2-module
|
9
|
+
----------------------------------
|
10
|
+
endif::[]
|
11
|
+
ifdef::tarball[]
|
12
|
+
----------------------------------
|
13
|
+
./bin/passenger-install-apache2-module
|
14
|
+
----------------------------------
|
15
|
+
endif::[]
|
16
|
+
|
17
|
+
At the end of the installation process, you will be asked to copy and paste a configuration snippet (containing `LoadModule`, `PassengerRoot`, etc.) into your Apache configuration file. If you're upgrading, then you already had a similar configuration snippet. Be sure to remove the old one before pasting the new one.
|
18
|
+
|
19
|
+
Different operating systems and Apache installations have different conventions with regard to where the Apache configuration file is and how it is organized. Please read <<working_with_apache_conf,Working with the Apache configuration file>> if you're not familiar with it. That section is especially of interest for OS X Server >= 10.8 users because the configuration file may not be at a surprising location.
|
20
|
+
|
21
|
+
If compilation doesn't succeed, then please consult the <<troubleshooting,Troubleshooting>> section.
|
22
|
+
|
23
|
+
.What does the installer do?
|
24
|
+
|
25
|
+
Despite the name, this "installer" doesn't actually install anything. The installer checks whether all required dependencies are installed, invokes the compiler, and tells you how to modify the Apache
|
26
|
+
configuration file. However, it doesn't copy any files to outside the Phusion Passenger source directory.
|
27
|
+
|
28
|
+
`passenger-install-apache2-module` is actually just a user-friendly frontend around the command `rake apache2`, which performs the actual compilation of Phusion Passenger.
|
29
|
+
endif::[]
|
30
|
+
ifdef::nginx[]
|
31
|
+
Nginx is a different from other web servers in that it does not support loadable modules. The only way to extend Nginx is to recompile it entirely from source. Since Phusion Passenger consists of some external executables plus an Nginx module, you must recompile Nginx when first installing Phusion Passenger, but also when upgrading Nginx itself or when upgrading the Phusion Passenger version.
|
32
|
+
|
33
|
+
Recompiling Nginx and the Phusion Passenger executables is what we will do in this step. The good news is that Phusion Passenger provides a tool to make this easy for you.
|
34
|
+
|
35
|
+
If you've already installed Nginx before, but without Phusion Passenger support, then you *should* uninstall it first. You don't have to, because you can also install another Nginx with Phusion Passenger support, in parallel to the existing Nginx. We merely recommend uninstalling the existing in order to avoid user confusion, but the choice is yours.
|
36
|
+
|
37
|
+
If you had previously installed Nginx with Phusion Passenger support, and you are upgrading, then you don't have to uninstall your existing Nginx first. Instead we'll overwrite it this step. But it is important that you recompile Nginx with the configure parameters that you used last time.
|
38
|
+
|
39
|
+
Here's how you can uninstall the original Nginx:
|
40
|
+
|
41
|
+
- If you installed the existing Nginx through APT, run: `sudo apt-get remove nginx nginx-full nginx-light nginx-naxsi nginx-common`
|
42
|
+
- If you installed the existing Nginx through YUM, run `yum remove nginx` as root.
|
43
|
+
|
44
|
+
To proceed with installing or upgrading Phusion Passenger, run the Phusion Passenger Nginx installer and follow the on-screen instructions:
|
45
|
+
|
46
|
+
ifdef::gem[]
|
47
|
+
----------------------------------
|
48
|
+
passenger-install-nginx-module
|
49
|
+
----------------------------------
|
50
|
+
endif::[]
|
51
|
+
ifdef::tarball[]
|
52
|
+
----------------------------------
|
53
|
+
./bin/passenger-install-nginx-module
|
54
|
+
----------------------------------
|
55
|
+
endif::[]
|
56
|
+
|
57
|
+
At some point it will ask you which prefix to install Nginx to. If you're upgrading, then specify the same prefix that you used last time, as well as the same configuration parameters that you used last time.
|
58
|
+
endif::[]
|
@@ -0,0 +1,6 @@
|
|
1
|
+
You should see the web server processes as well as a number of Phusion Passenger processes (e.g. PassengerWatchdog, PassengerHelperAgent). Congratulations, Phusion Passenger is now installed and running!
|
2
|
+
ifdef::nginx[]
|
3
|
+
At this point you may be interested in <<nginx_init_script,creating an Nginx init script>>.
|
4
|
+
endif::[]
|
5
|
+
|
6
|
+
If the output is not as expected, then please refer to the <<troubleshooting,Troubleshooting>> section.
|
@@ -14,14 +14,7 @@ or
|
|
14
14
|
link:http://groups.google.com/group/phusion-passenger[join our discussion forum]
|
15
15
|
if it doesn't work on your POSIX-compliant operating system.
|
16
16
|
|
17
|
+
[[where_to_get_support]]
|
17
18
|
=== Where to get support ===
|
18
19
|
|
19
|
-
|
20
|
-
message here if you're experiencing problems. Support on this forum is provided by the community on a best-effort basis, so a (timely) response is not guaranteed.
|
21
|
-
* link:http://code.google.com/p/phusion-passenger/issues/list[Issue tracker] - report
|
22
|
-
bugs here.
|
23
|
-
* Email support@phusion.nl if you are a link:https://www.phusionpassenger.com/enterprise[Phusion Passenger Enterprise] customer. Please mention your order reference. If you are not an Enterprise customer, we kindly redirect you to the community discussion forum instead.
|
24
|
-
* link:https://www.phusionpassenger.com/commercial_support[Commercial support contracts] are also available.
|
25
|
-
* Report security vulnerabilities to security@phusion.nl. We will do our best to respond to you as quickly as we can, so please do not disclose the vulnerability until then.
|
26
|
-
|
27
|
-
Please consult link:https://www.phusionpassenger.com/support[the Phusion Passenger website] for a full list of support resources.
|
20
|
+
include::where_to_get_support.txt[]
|
@@ -0,0 +1,112 @@
|
|
1
|
+
=== Generic troubleshooting tips
|
2
|
+
|
3
|
+
One of the first things you should do upon encountering a problem, is to check
|
4
|
+
ifdef::apache[]
|
5
|
+
the *global* (not the per-vhost) Apache error log file. This is typically located in /var/log/apache2/error_log. You can find out the exact location of the error log by running `passenger-config --detect-apache2`.
|
6
|
+
endif::[]
|
7
|
+
ifdef::nginx[]
|
8
|
+
the global Nginx error log file. This is one specified by the `error_log` directive in the main context (*not* the one inside the `http` context). The file is typically located in /var/log/nginx/error.log.
|
9
|
+
endif::[]
|
10
|
+
ifdef::standalone[]
|
11
|
+
Phusion Passenger Standalone log file. This is typically located in `log/passenger.[PORT NUMBER].log`.
|
12
|
+
endif::[]
|
13
|
+
Most problems are logged to this file.
|
14
|
+
|
15
|
+
ifndef::standalone[]
|
16
|
+
If you're using Ruby on Rails, then you should be aware that Phusion Passenger runs your app under the 'production' environment by default, not 'development'. You can change this using the
|
17
|
+
ifdef::apache[]
|
18
|
+
<<RailsEnv,RailsEnv>>
|
19
|
+
endif::[]
|
20
|
+
ifdef::nginx[]
|
21
|
+
<<RailsEnv,rails_env>>
|
22
|
+
endif::[]
|
23
|
+
option.
|
24
|
+
endif::[]
|
25
|
+
|
26
|
+
If neither the logs nor this troubleshooting guide can help you, then please check out our <<where_to_get_support,support resources>>.
|
27
|
+
|
28
|
+
|
29
|
+
ifndef::standalone[]
|
30
|
+
=== Why does the first request take a long time?
|
31
|
+
|
32
|
+
**Symptoms**::
|
33
|
+
The first request to your application takes more time than usual. Subsequent requests have the normal speed.
|
34
|
+
|
35
|
+
**Cause**::
|
36
|
+
Phusion Passenger starts your application the first time it is accessed, not during web server startup. Some applications can take several seconds to start. If you're using Ruby on Rails, then needing 10 seconds to start your application is normal. On slow or heavily loaded servers, or in case of large and heavy applications, the startup time may be even longer.
|
37
|
+
|
38
|
+
**Solution**::
|
39
|
+
Use the
|
40
|
+
ifdef::nginx[]
|
41
|
+
<<PassengerPreStart,passenger_pre_start>>
|
42
|
+
endif::[]
|
43
|
+
ifdef::apache[]
|
44
|
+
<<PassengerPreStart,PassengerPreStart>>
|
45
|
+
endif::[]
|
46
|
+
configuration option.
|
47
|
+
endif::[]
|
48
|
+
|
49
|
+
|
50
|
+
ifdef::nginx[]
|
51
|
+
=== Upon accessing the web app, Nginx reports a "Permission denied" error
|
52
|
+
|
53
|
+
**Symptoms**::
|
54
|
+
A typical error message looks like this:
|
55
|
+
+
|
56
|
+
---------------------------------------------
|
57
|
+
2013/10/21 17:16:03 [alert] 98687#0: *1 Cannot stat
|
58
|
+
'/Users/phusion/Sites/rack.test/config.ru': Permission denied (errno=13); This
|
59
|
+
error means that the Nginx worker process (PID 99064, running as UID 70) does
|
60
|
+
not have permission to access this file. Please read the manual to learn how to
|
61
|
+
fix this problem: section 'Troubleshooting' -> 'Upon accessing the web app,
|
62
|
+
Nginx reports a "Permission denied" error'; Extra info, client: 127.0.0.1,
|
63
|
+
server: www.foo.com, request: "GET / HTTP/1.1", host: "www.foo.com"
|
64
|
+
---------------------------------------------
|
65
|
+
|
66
|
+
**Cause**::
|
67
|
+
Phusion Passenger tries to access your application directory in order to find out what language it's written in. This access is initiated from inside an Nginx worker process. This error indicates that the Nginx worker process does not have the proper permissions to access your application's root directory.
|
68
|
+
|
69
|
+
**Solution**::
|
70
|
+
You need to relax permissions to that the Nginx worker process can access your application directory, by making the directory group- and world-*executable*:
|
71
|
+
+
|
72
|
+
---------------------------------------------------
|
73
|
+
sudo chmod g+x,o+x /Users/phusion/Sites/rack.test
|
74
|
+
---------------------------------------------------
|
75
|
+
+
|
76
|
+
You *also* need to ensure that all parent directories are also 'executable' by the Nginx process:
|
77
|
+
+
|
78
|
+
---------------------------------------------------
|
79
|
+
sudo chmod g+x,o+x /Users/phusion/Sites
|
80
|
+
sudo chmod g+x,o+x /Users/phusion
|
81
|
+
sudo chmod g+x,o+x /Users
|
82
|
+
---------------------------------------------------
|
83
|
+
+
|
84
|
+
.Why 'executable' permission and not 'readable'?
|
85
|
+
[NOTE]
|
86
|
+
On Unix, the 'executable' permission on directories dictates whether a process is allowed to *access* files or subdirectories within that directory. The 'readable' permission dictates whether a process is allowed to see what files are inside the directory, but does not necessarily allow access to them. You can learn more at link:http://en.wikipedia.org/wiki/File_system_permissions#Permissions[Wikipedia].
|
87
|
+
endif::[]
|
88
|
+
|
89
|
+
|
90
|
+
ifdef::standalone[]
|
91
|
+
=== Upon uploading a file, Phusion Passenger reports "client_body_temp/00000000xx failed (2: No such file or directory)"
|
92
|
+
|
93
|
+
**Symptoms**::
|
94
|
+
When performing an HTTP POST call, the request sometimes fails, with Phusion Passenger reporting an error along the lines of:
|
95
|
+
+
|
96
|
+
-------------------------
|
97
|
+
/tmp/passenger-standalone.8583/client_body_temp/0000000022" failed (2: No such
|
98
|
+
file or directory), client: 127.0.0.1, server: www.foo.com
|
99
|
+
-------------------------
|
100
|
+
|
101
|
+
**Cause**::
|
102
|
+
Phusion Passenger buffers HTTP POST bodies (file uploads) to a temporary directory, by default `/tmp/passenger-standalone.xxx`. This error means that Phusion Passenger that that directory has been removed, probably by some other program.
|
103
|
+
|
104
|
+
**Solution**::
|
105
|
+
Tell Phusion Passenger to use a different directory to store its temporary files passing the `--temp-dir` command line option. For example:
|
106
|
+
+
|
107
|
+
---------------------------------------
|
108
|
+
mkdir $HOME/tmp
|
109
|
+
cd /path-to-your-app
|
110
|
+
passenger start --temp-dir=$HOME/tmp
|
111
|
+
---------------------------------------
|
112
|
+
endif::[]
|
@@ -0,0 +1,56 @@
|
|
1
|
+
=== Ruby on Rails-specific troubleshooting
|
2
|
+
|
3
|
+
==== The "About your application's environment" link does not work
|
4
|
+
|
5
|
+
The "About your application's environment" link only works if the application is started in the 'development' environment. Phusion Passenger starts the application in the 'production' environment by default. Please use
|
6
|
+
ifdef::apache[]
|
7
|
+
<<RailsEnv,RailsEnv>>
|
8
|
+
endif::[]
|
9
|
+
ifdef::nginx[]
|
10
|
+
<<RailsEnv,rails_env>>
|
11
|
+
endif::[]
|
12
|
+
to change it.
|
13
|
+
|
14
|
+
|
15
|
+
==== The Rails application reports that it's unable to start because of a permission error
|
16
|
+
|
17
|
+
Please check whether your Rails application's folder has the correct
|
18
|
+
permissions. By default, Rails applications are started as the owner of the
|
19
|
+
file `config.ru`, except if the file is owned by root. If the
|
20
|
+
file is owned by root, then the Rails application will be started as 'nobody'
|
21
|
+
(or as the user specify by <<RailsDefaultUser,RailsDefaultUser>>, if that's
|
22
|
+
specified).
|
23
|
+
|
24
|
+
Please read <<user_switching,User switching (security)>> for details.
|
25
|
+
|
26
|
+
|
27
|
+
==== The Rails application's log file is not being written to
|
28
|
+
|
29
|
+
There are a couple things that you should be aware of:
|
30
|
+
|
31
|
+
- By default, Phusion Passenger runs Rails applications in 'production' mode,
|
32
|
+
so please be sure to check `production.log` instead of `development.log`.
|
33
|
+
+
|
34
|
+
See
|
35
|
+
ifdef::apache[]
|
36
|
+
<<RailsEnv,RailsEnv>>
|
37
|
+
endif::[]
|
38
|
+
ifdef::nginx[]
|
39
|
+
<<RailsEnv,rails_env>>
|
40
|
+
endif::[]
|
41
|
+
for configuration.
|
42
|
+
- By default, Phusion Passenger runs Rails applications as the owner of `config.ru`.
|
43
|
+
So the log file can only be written to if that user has write permission to the
|
44
|
+
log file. Please `chmod` or `chown` your log file accordingly.
|
45
|
+
+
|
46
|
+
See <<User_switching,User switching (security)>> for details.
|
47
|
+
|
48
|
+
If you're using a RedHat-derived Linux distribution (such as Fedora or CentOS)
|
49
|
+
then it is link:http://code.google.com/p/phusion-passenger/issues/detail?id=4[possible
|
50
|
+
that SELinux is interfering]. RedHat's SELinux policy only allows Apache to read/write
|
51
|
+
directories that have the 'httpd_sys_content_t' security context. Please run the
|
52
|
+
following command to give your Rails application folder that context:
|
53
|
+
|
54
|
+
-----------------------------------------------------------
|
55
|
+
chcon -R -h -t httpd_sys_content_t /path/to/your/rails/app
|
56
|
+
-----------------------------------------------------------
|
@@ -0,0 +1,9 @@
|
|
1
|
+
* link:http://groups.google.com/group/phusion-passenger[Community discussion forum] - post a
|
2
|
+
message here if you're experiencing problems. Support on this forum is provided by the community on a best-effort basis, so a (timely) response is not guaranteed.
|
3
|
+
* link:http://code.google.com/p/phusion-passenger/issues/list[Issue tracker] - report
|
4
|
+
bugs here.
|
5
|
+
* Email support@phusion.nl if you are a link:https://www.phusionpassenger.com/enterprise[Phusion Passenger Enterprise] customer. Please mention your order reference. If you are not an Enterprise customer, we kindly redirect you to the community discussion forum instead.
|
6
|
+
* link:https://www.phusionpassenger.com/commercial_support[Commercial support contracts] are also available.
|
7
|
+
* Report security vulnerabilities to security@phusion.nl. We will do our best to respond to you as quickly as we can, so please do not disclose the vulnerability until then.
|
8
|
+
|
9
|
+
Please consult link:https://www.phusionpassenger.com/support[the Phusion Passenger website] for a full list of support resources.
|
data/ext/apache2/Bucket.h
CHANGED
@@ -62,7 +62,7 @@ struct PassengerBucketState {
|
|
62
62
|
}
|
63
63
|
};
|
64
64
|
|
65
|
-
typedef shared_ptr<PassengerBucketState> PassengerBucketStatePtr;
|
65
|
+
typedef boost::shared_ptr<PassengerBucketState> PassengerBucketStatePtr;
|
66
66
|
|
67
67
|
/**
|
68
68
|
* We used to use an apr_bucket_pipe for forwarding the backend process's
|
@@ -158,22 +158,6 @@ struct DirConfig {
|
|
158
158
|
return enabled != DISABLED;
|
159
159
|
}
|
160
160
|
|
161
|
-
StaticString getUser() const {
|
162
|
-
if (user != NULL) {
|
163
|
-
return user;
|
164
|
-
} else {
|
165
|
-
return "";
|
166
|
-
}
|
167
|
-
}
|
168
|
-
|
169
|
-
StaticString getGroup() const {
|
170
|
-
if (group != NULL) {
|
171
|
-
return group;
|
172
|
-
} else {
|
173
|
-
return "";
|
174
|
-
}
|
175
|
-
}
|
176
|
-
|
177
161
|
StaticString getEnvironment() const {
|
178
162
|
if (environment != NULL) {
|
179
163
|
return environment;
|
@@ -201,34 +185,6 @@ struct DirConfig {
|
|
201
185
|
}
|
202
186
|
}
|
203
187
|
|
204
|
-
bool getLoadShellEnvvars() const {
|
205
|
-
return loadShellEnvvars != DISABLED;
|
206
|
-
}
|
207
|
-
|
208
|
-
unsigned long getMinInstances() const {
|
209
|
-
if (minInstances != UNSET_INT_VALUE) {
|
210
|
-
return minInstances;
|
211
|
-
} else {
|
212
|
-
return 1;
|
213
|
-
}
|
214
|
-
}
|
215
|
-
|
216
|
-
unsigned long getMaxRequests() const {
|
217
|
-
if (maxRequests != UNSET_INT_VALUE) {
|
218
|
-
return maxRequests;
|
219
|
-
} else {
|
220
|
-
return 0;
|
221
|
-
}
|
222
|
-
}
|
223
|
-
|
224
|
-
unsigned long getStartTimeout() const {
|
225
|
-
if (startTimeout != UNSET_INT_VALUE) {
|
226
|
-
return startTimeout;
|
227
|
-
} else {
|
228
|
-
return DEFAULT_START_TIMEOUT / 1000;
|
229
|
-
}
|
230
|
-
}
|
231
|
-
|
232
188
|
bool highPerformanceMode() const {
|
233
189
|
return highPerformance == ENABLED;
|
234
190
|
}
|
data/ext/apache2/Hooks.cpp
CHANGED
@@ -542,7 +542,7 @@ private:
|
|
542
542
|
this_thread::disable_syscall_interruption dsi;
|
543
543
|
bool expectingUploadData;
|
544
544
|
string uploadDataMemory;
|
545
|
-
shared_ptr<BufferedUpload> uploadDataFile;
|
545
|
+
boost::shared_ptr<BufferedUpload> uploadDataFile;
|
546
546
|
const char *contentLength;
|
547
547
|
|
548
548
|
expectingUploadData = ap_should_client_block(r);
|
@@ -641,7 +641,7 @@ private:
|
|
641
641
|
/* Setup the bucket brigade. */
|
642
642
|
bb = apr_brigade_create(r->connection->pool, r->connection->bucket_alloc);
|
643
643
|
|
644
|
-
bucketState = make_shared<PassengerBucketState>(conn);
|
644
|
+
bucketState = boost::make_shared<PassengerBucketState>(conn);
|
645
645
|
b = passenger_bucket_create(bucketState, r->connection->bucket_alloc, config->getBufferResponse());
|
646
646
|
APR_BRIGADE_INSERT_TAIL(bb, b);
|
647
647
|
|
@@ -884,6 +884,26 @@ private:
|
|
884
884
|
headers.append(1, '\0');
|
885
885
|
}
|
886
886
|
}
|
887
|
+
|
888
|
+
void addHeader(request_rec *r, string &headers, const char *name, int value) {
|
889
|
+
if (value != UNSET_INT_VALUE) {
|
890
|
+
headers.append(name);
|
891
|
+
headers.append(1, '\0');
|
892
|
+
headers.append(apr_psprintf(r->pool, "%d", value));
|
893
|
+
headers.append(1, '\0');
|
894
|
+
}
|
895
|
+
}
|
896
|
+
|
897
|
+
void addHeader(request_rec *r, string &headers, const char *name, DirConfig::Threeway value) {
|
898
|
+
if (value != DirConfig::UNSET) {
|
899
|
+
headers.append(name);
|
900
|
+
if (value == DirConfig::ENABLED) {
|
901
|
+
headers.append("\0true\0", 6);
|
902
|
+
} else {
|
903
|
+
headers.append("\0false\0", 7);
|
904
|
+
}
|
905
|
+
}
|
906
|
+
}
|
887
907
|
|
888
908
|
unsigned int constructHeaders(request_rec *r, DirConfig *config,
|
889
909
|
vector<StaticString> &requestData, DirectoryMapper &mapper,
|
@@ -898,7 +918,7 @@ private:
|
|
898
918
|
*/
|
899
919
|
size_t uriLen = strlen(r->uri);
|
900
920
|
unsigned int escaped = escapeUri(NULL, (const unsigned char *) r->uri, uriLen);
|
901
|
-
char escapedUri
|
921
|
+
char *escapedUri = (char *) apr_palloc(r->pool, uriLen + 2 * escaped + 1);
|
902
922
|
escapeUri((unsigned char *) escapedUri, (const unsigned char *) r->uri, uriLen);
|
903
923
|
escapedUri[uriLen + 2 * escaped] = '\0';
|
904
924
|
|
@@ -984,29 +1004,16 @@ private:
|
|
984
1004
|
addHeader(output, "PASSENGER_STATUS_LINE", "false");
|
985
1005
|
addHeader(output, "PASSENGER_APP_ROOT", mapper.getAppRoot());
|
986
1006
|
addHeader(output, "PASSENGER_APP_GROUP_NAME", config->getAppGroupName(mapper.getAppRoot()));
|
987
|
-
|
1007
|
+
#include "SetHeaders.cpp"
|
988
1008
|
addHeader(output, "PASSENGER_PYTHON", config->python);
|
989
1009
|
addHeader(output, "PASSENGER_ENV", config->getEnvironment());
|
990
1010
|
addHeader(output, "PASSENGER_SPAWN_METHOD", config->getSpawnMethodString());
|
991
|
-
addHeader(output, "
|
992
|
-
addHeader(output, "PASSENGER_GROUP", config->getGroup());
|
993
|
-
if (config->maxRequestQueueSize != UNSET_INT_VALUE) {
|
994
|
-
addHeader(output, "PASSENGER_MAX_REQUEST_QUEUE_SIZE",
|
995
|
-
apr_psprintf(r->pool, "%d", config->maxRequestQueueSize));
|
996
|
-
}
|
1011
|
+
addHeader(r, output, "PASSENGER_MAX_REQUEST_QUEUE_SIZE", config->maxRequestQueueSize);
|
997
1012
|
addHeader(output, "PASSENGER_APP_TYPE", mapper.getApplicationTypeName());
|
998
|
-
addHeader(output, "PASSENGER_MIN_INSTANCES",
|
999
|
-
apr_psprintf(r->pool, "%ld", config->getMinInstances()));
|
1000
1013
|
addHeader(output, "PASSENGER_MAX_PRELOADER_IDLE_TIME",
|
1001
1014
|
apr_psprintf(r->pool, "%ld", config->maxPreloaderIdleTime));
|
1002
|
-
addHeader(output, "PASSENGER_LOAD_SHELL_ENVVARS",
|
1003
|
-
config->getLoadShellEnvvars() ? "true" : "false");
|
1004
1015
|
addHeader(output, "PASSENGER_DEBUGGER", "false");
|
1005
1016
|
addHeader(output, "PASSENGER_SHOW_VERSION_IN_HEADER", "true");
|
1006
|
-
addHeader(output, "PASSENGER_MAX_REQUESTS",
|
1007
|
-
apr_psprintf(r->pool, "%ld", config->getMaxRequests()));
|
1008
|
-
addHeader(output, "PASSENGER_START_TIMEOUT",
|
1009
|
-
apr_psprintf(r->pool, "%ld", config->getStartTimeout()));
|
1010
1017
|
addHeader(output, "PASSENGER_STAT_THROTTLE_RATE",
|
1011
1018
|
apr_psprintf(r->pool, "%ld", config->getStatThrottleRate()));
|
1012
1019
|
addHeader(output, "PASSENGER_RESTART_DIR", config->getRestartDir());
|
@@ -1200,10 +1207,10 @@ private:
|
|
1200
1207
|
* @throws SystemException
|
1201
1208
|
* @throws IOException
|
1202
1209
|
*/
|
1203
|
-
shared_ptr<BufferedUpload> receiveRequestBody(request_rec *r) {
|
1210
|
+
boost::shared_ptr<BufferedUpload> receiveRequestBody(request_rec *r) {
|
1204
1211
|
TRACE_POINT();
|
1205
1212
|
DirConfig *config = getDirConfig(r);
|
1206
|
-
shared_ptr<BufferedUpload> tempFile;
|
1213
|
+
boost::shared_ptr<BufferedUpload> tempFile;
|
1207
1214
|
try {
|
1208
1215
|
ServerInstanceDir::GenerationPtr generation = agentsStarter.getGeneration();
|
1209
1216
|
string uploadBufferDir = config->getUploadBufferDir(generation);
|
@@ -1259,7 +1266,7 @@ private:
|
|
1259
1266
|
}
|
1260
1267
|
}
|
1261
1268
|
|
1262
|
-
void sendRequestBody(const FileDescriptor &fd, shared_ptr<BufferedUpload> &uploadData) {
|
1269
|
+
void sendRequestBody(const FileDescriptor &fd, boost::shared_ptr<BufferedUpload> &uploadData) {
|
1263
1270
|
TRACE_POINT();
|
1264
1271
|
rewind(uploadData->handle);
|
1265
1272
|
while (!feof(uploadData->handle)) {
|