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.

Files changed (496) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.asc +7 -7
  3. data.tar.gz.asc +7 -7
  4. data/.gitignore +1 -0
  5. data/.travis.yml +1 -1
  6. data/NEWS +15 -0
  7. data/README.md +5 -3
  8. data/Rakefile +1 -0
  9. data/bin/passenger-config +1 -5
  10. data/bin/passenger-install-apache2-module +53 -5
  11. data/bin/passenger-install-nginx-module +19 -6
  12. data/bin/passenger-memory-stats +3 -3
  13. data/build/agents.rb +11 -8
  14. data/build/apache2.rb +9 -5
  15. data/build/basics.rb +15 -21
  16. data/build/common_library.rb +16 -6
  17. data/build/cplusplus_support.rb +5 -5
  18. data/build/cxx_tests.rb +3 -3
  19. data/build/documentation.rb +1 -1
  20. data/build/misc.rb +4 -37
  21. data/build/node_tests.rb +29 -0
  22. data/build/oxt_tests.rb +1 -1
  23. data/build/packaging.rb +29 -10
  24. data/build/preprocessor.rb +2 -1
  25. data/build/test_basics.rb +15 -6
  26. data/debian.template/locations.ini.template +1 -0
  27. data/debian.template/passenger.install.template +1 -0
  28. data/dev/copy_boost_headers.rb +7 -3
  29. data/dev/run_travis.sh +32 -16
  30. data/doc/Users guide Apache.idmap.txt +22 -34
  31. data/doc/Users guide Apache.txt +20 -234
  32. data/doc/Users guide Nginx.idmap.txt +84 -66
  33. data/doc/Users guide Nginx.txt +50 -1
  34. data/doc/Users guide Standalone.idmap.txt +74 -0
  35. data/doc/Users guide Standalone.txt +22 -9
  36. data/doc/Users guide.txt +51 -0
  37. data/doc/users_guide_snippets/environment_variables.txt +0 -3
  38. data/doc/users_guide_snippets/installation.txt +337 -380
  39. data/doc/users_guide_snippets/installation/run_installer.txt +58 -0
  40. data/doc/users_guide_snippets/installation/verify_running_epilogue.txt +6 -0
  41. data/doc/users_guide_snippets/support_information.txt +2 -9
  42. data/doc/users_guide_snippets/troubleshooting/default.txt +112 -0
  43. data/doc/users_guide_snippets/troubleshooting/rails.txt +56 -0
  44. data/doc/users_guide_snippets/where_to_get_support.txt +9 -0
  45. data/ext/apache2/Bucket.h +1 -1
  46. data/ext/apache2/Configuration.hpp +0 -44
  47. data/ext/apache2/CreateDirConfig.cpp +1 -1
  48. data/ext/apache2/CreateDirConfig.cpp.erb +1 -1
  49. data/ext/apache2/Hooks.cpp +28 -21
  50. data/ext/apache2/MergeDirConfig.cpp +1 -0
  51. data/ext/apache2/MergeDirConfig.cpp.erb +1 -1
  52. data/ext/apache2/SetHeaders.cpp +73 -0
  53. data/ext/apache2/SetHeaders.cpp.erb +88 -0
  54. data/ext/boost/algorithm/string/detail/find_format.hpp +5 -5
  55. data/ext/boost/algorithm/string/detail/find_format_all.hpp +5 -5
  56. data/ext/boost/algorithm/string/detail/finder.hpp +1 -1
  57. data/ext/boost/algorithm/string/formatter.hpp +2 -2
  58. data/ext/boost/assert.hpp +6 -1
  59. data/ext/boost/atomic.hpp +18 -0
  60. data/ext/boost/atomic/atomic.hpp +241 -0
  61. data/ext/boost/atomic/detail/base.hpp +585 -0
  62. data/ext/boost/atomic/detail/cas32strong.hpp +885 -0
  63. data/ext/boost/atomic/detail/cas32weak.hpp +947 -0
  64. data/ext/boost/atomic/detail/cas64strong.hpp +443 -0
  65. data/ext/boost/atomic/detail/config.hpp +54 -0
  66. data/ext/boost/atomic/detail/gcc-alpha.hpp +368 -0
  67. data/ext/boost/atomic/detail/gcc-armv6plus.hpp +252 -0
  68. data/ext/boost/atomic/detail/gcc-cas.hpp +157 -0
  69. data/ext/boost/atomic/detail/gcc-ppc.hpp +2850 -0
  70. data/ext/boost/atomic/detail/gcc-sparcv9.hpp +1259 -0
  71. data/ext/boost/atomic/detail/gcc-x86.hpp +1766 -0
  72. data/ext/boost/atomic/detail/generic-cas.hpp +206 -0
  73. data/ext/boost/atomic/detail/interlocked.hpp +200 -0
  74. data/ext/boost/atomic/detail/linux-arm.hpp +189 -0
  75. data/ext/boost/atomic/detail/lockpool.hpp +97 -0
  76. data/ext/boost/atomic/detail/platform.hpp +62 -0
  77. data/ext/boost/atomic/detail/type-classification.hpp +45 -0
  78. data/ext/boost/chrono/config.hpp +8 -3
  79. data/ext/boost/chrono/duration.hpp +9 -10
  80. data/ext/boost/chrono/system_clocks.hpp +1 -1
  81. data/ext/boost/chrono/time_point.hpp +4 -3
  82. data/ext/boost/config/auto_link.hpp +53 -52
  83. data/ext/boost/config/compiler/borland.hpp +1 -0
  84. data/ext/boost/config/compiler/clang.hpp +24 -1
  85. data/ext/boost/config/compiler/codegear.hpp +1 -0
  86. data/ext/boost/config/compiler/common_edg.hpp +1 -0
  87. data/ext/boost/config/compiler/cray.hpp +1 -0
  88. data/ext/boost/config/compiler/digitalmars.hpp +1 -0
  89. data/ext/boost/config/compiler/gcc.hpp +29 -3
  90. data/ext/boost/config/compiler/gcc_xml.hpp +2 -1
  91. data/ext/boost/config/compiler/hp_acc.hpp +1 -0
  92. data/ext/boost/config/compiler/intel.hpp +1 -1
  93. data/ext/boost/config/compiler/metrowerks.hpp +1 -0
  94. data/ext/boost/config/compiler/mpw.hpp +1 -0
  95. data/ext/boost/config/compiler/pathscale.hpp +1 -0
  96. data/ext/boost/config/compiler/pgi.hpp +1 -0
  97. data/ext/boost/config/compiler/sunpro_cc.hpp +1 -0
  98. data/ext/boost/config/compiler/vacpp.hpp +3 -2
  99. data/ext/boost/config/compiler/visualc.hpp +25 -11
  100. data/ext/boost/config/platform/vxworks.hpp +353 -15
  101. data/ext/boost/config/select_compiler_config.hpp +4 -4
  102. data/ext/boost/config/stdlib/dinkumware.hpp +10 -3
  103. data/ext/boost/config/stdlib/libstdcpp3.hpp +2 -1
  104. data/ext/boost/config/suffix.hpp +45 -19
  105. data/ext/boost/date_time/format_date_parser.hpp +1 -11
  106. data/ext/boost/date_time/strings_from_facet.hpp +5 -3
  107. data/ext/boost/detail/atomic_redef_macros.hpp +19 -0
  108. data/ext/boost/detail/atomic_undef_macros.hpp +39 -0
  109. data/ext/boost/detail/endian.hpp +52 -4
  110. data/ext/boost/detail/scoped_enum_emulation.hpp +10 -10
  111. data/ext/boost/detail/select_type.hpp +36 -0
  112. data/ext/boost/exception/current_exception_cast.hpp +1 -1
  113. data/ext/boost/exception/detail/error_info_impl.hpp +3 -5
  114. data/ext/boost/exception/detail/exception_ptr.hpp +3 -3
  115. data/ext/boost/exception/detail/is_output_streamable.hpp +1 -1
  116. data/ext/boost/exception/detail/object_hex_dump.hpp +1 -1
  117. data/ext/boost/exception/detail/type_info.hpp +1 -1
  118. data/ext/boost/exception/diagnostic_information.hpp +15 -14
  119. data/ext/boost/exception/exception.hpp +1 -1
  120. data/ext/boost/exception/get_error_info.hpp +1 -1
  121. data/ext/boost/exception/info.hpp +12 -13
  122. data/ext/boost/exception/to_string.hpp +6 -1
  123. data/ext/boost/exception/to_string_stub.hpp +9 -1
  124. data/ext/boost/foreach.hpp +5 -5
  125. data/ext/boost/function/function_template.hpp +6 -6
  126. data/ext/boost/functional/hash/detail/float_functions.hpp +90 -0
  127. data/ext/boost/functional/hash/detail/hash_float.hpp +11 -2
  128. data/ext/boost/functional/hash/extensions.hpp +14 -2
  129. data/ext/boost/functional/hash/hash.hpp +26 -5
  130. data/ext/boost/get_pointer.hpp +17 -2
  131. data/ext/boost/integer_traits.hpp +1 -1
  132. data/ext/boost/lexical_cast.hpp +615 -395
  133. data/ext/boost/libs/atomic/lockpool.cpp +24 -0
  134. data/ext/boost/libs/system/src/error_code.cpp +25 -18
  135. data/ext/boost/libs/thread/src/future.cpp +7 -5
  136. data/ext/boost/libs/thread/src/pthread/once.cpp +9 -3
  137. data/ext/boost/libs/thread/src/pthread/once_atomic.cpp +90 -0
  138. data/ext/boost/libs/thread/src/pthread/thread.cpp +129 -95
  139. data/ext/boost/libs/thread/src/pthread/timeconv.inl +20 -1
  140. data/ext/boost/limits.hpp +1 -1
  141. data/ext/boost/math/policies/policy.hpp +10 -0
  142. data/ext/boost/math/special_functions/detail/round_fwd.hpp +17 -4
  143. data/ext/boost/math/special_functions/fpclassify.hpp +114 -45
  144. data/ext/boost/math/special_functions/math_fwd.hpp +195 -83
  145. data/ext/boost/math/special_functions/sign.hpp +13 -8
  146. data/ext/boost/math/tools/config.hpp +38 -16
  147. data/ext/boost/move/algorithm.hpp +275 -0
  148. data/ext/boost/move/core.hpp +332 -0
  149. data/ext/boost/move/detail/config_begin.hpp +23 -0
  150. data/ext/boost/move/detail/config_end.hpp +20 -0
  151. data/ext/boost/move/detail/meta_utils.hpp +158 -0
  152. data/ext/boost/move/iterator.hpp +298 -0
  153. data/ext/boost/move/move.hpp +10 -1256
  154. data/ext/boost/move/traits.hpp +142 -0
  155. data/ext/boost/move/utility.hpp +194 -0
  156. data/ext/boost/mpl/assert.hpp +72 -4
  157. data/ext/boost/noncopyable.hpp +15 -3
  158. data/ext/boost/pointer_to_other.hpp +55 -0
  159. data/ext/boost/range/concepts.hpp +4 -4
  160. data/ext/boost/range/detail/extract_optional_type.hpp +1 -1
  161. data/ext/boost/range/empty.hpp +1 -1
  162. data/ext/boost/range/iterator_range_core.hpp +4 -1
  163. data/ext/boost/range/iterator_range_io.hpp +2 -2
  164. data/ext/boost/ratio/config.hpp +6 -0
  165. data/ext/boost/ratio/detail/overflow_helpers.hpp +2 -2
  166. data/ext/boost/smart_ptr/allocate_shared_array.hpp +250 -0
  167. data/ext/boost/smart_ptr/detail/allocate_array_helper.hpp +169 -0
  168. data/ext/boost/smart_ptr/detail/array_deleter.hpp +124 -0
  169. data/ext/boost/smart_ptr/detail/array_traits.hpp +53 -0
  170. data/ext/boost/smart_ptr/detail/array_utility.hpp +178 -0
  171. data/ext/boost/smart_ptr/detail/make_array_helper.hpp +157 -0
  172. data/ext/boost/smart_ptr/detail/operator_bool.hpp +16 -9
  173. data/ext/boost/smart_ptr/detail/shared_count.hpp +78 -7
  174. data/ext/boost/smart_ptr/detail/sp_convertible.hpp +15 -0
  175. data/ext/boost/smart_ptr/detail/sp_counted_base.hpp +12 -6
  176. data/ext/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +1 -0
  177. data/ext/boost/smart_ptr/detail/sp_counted_base_aix.hpp +1 -0
  178. data/ext/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +1 -0
  179. data/ext/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp +1 -0
  180. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +1 -0
  181. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +1 -0
  182. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +1 -0
  183. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +1 -0
  184. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +1 -0
  185. data/ext/boost/smart_ptr/detail/sp_counted_base_nt.hpp +1 -0
  186. data/ext/boost/smart_ptr/detail/sp_counted_base_pt.hpp +1 -0
  187. data/ext/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +162 -0
  188. data/ext/boost/smart_ptr/detail/sp_counted_base_solaris.hpp +1 -0
  189. data/ext/boost/smart_ptr/detail/sp_counted_base_spin.hpp +1 -0
  190. data/ext/boost/smart_ptr/detail/sp_counted_base_sync.hpp +1 -0
  191. data/ext/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +1 -0
  192. data/ext/boost/smart_ptr/detail/sp_counted_impl.hpp +15 -0
  193. data/ext/boost/smart_ptr/detail/sp_forward.hpp +39 -0
  194. data/ext/boost/smart_ptr/detail/sp_has_sync.hpp +19 -3
  195. data/ext/boost/smart_ptr/detail/sp_if_array.hpp +31 -0
  196. data/ext/boost/smart_ptr/detail/sp_nullptr_t.hpp +45 -0
  197. data/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +5 -12
  198. data/ext/boost/smart_ptr/enable_shared_from_this.hpp +4 -4
  199. data/ext/boost/smart_ptr/make_shared.hpp +5 -1060
  200. data/ext/boost/smart_ptr/make_shared_array.hpp +247 -0
  201. data/ext/boost/smart_ptr/make_shared_object.hpp +1128 -0
  202. data/ext/boost/smart_ptr/scoped_array.hpp +32 -7
  203. data/ext/boost/smart_ptr/scoped_ptr.hpp +31 -5
  204. data/ext/boost/smart_ptr/shared_array.hpp +135 -20
  205. data/ext/boost/smart_ptr/shared_ptr.hpp +444 -126
  206. data/ext/boost/smart_ptr/weak_ptr.hpp +39 -28
  207. data/ext/boost/static_assert.hpp +74 -17
  208. data/ext/boost/system/error_code.hpp +76 -68
  209. data/ext/boost/system/system_error.hpp +5 -1
  210. data/ext/boost/thread/barrier.hpp +6 -2
  211. data/ext/boost/thread/completion_latch.hpp +233 -0
  212. data/ext/boost/thread/condition.hpp +6 -1
  213. data/ext/boost/thread/detail/async_func.hpp +571 -0
  214. data/ext/boost/thread/detail/config.hpp +248 -40
  215. data/ext/boost/thread/detail/counter.hpp +93 -0
  216. data/ext/boost/thread/detail/delete.hpp +12 -0
  217. data/ext/boost/thread/detail/invoke.hpp +1351 -0
  218. data/ext/boost/thread/detail/is_convertible.hpp +48 -0
  219. data/ext/boost/thread/detail/lockable_wrapper.hpp +45 -0
  220. data/ext/boost/thread/detail/log.hpp +83 -0
  221. data/ext/boost/thread/detail/make_tuple_indices.hpp +224 -0
  222. data/ext/boost/thread/detail/move.hpp +32 -16
  223. data/ext/boost/thread/detail/thread.hpp +236 -41
  224. data/ext/boost/thread/detail/thread_group.hpp +55 -9
  225. data/ext/boost/thread/detail/thread_interruption.hpp +4 -1
  226. data/ext/boost/thread/exceptions.hpp +2 -0
  227. data/ext/boost/thread/externally_locked.hpp +351 -0
  228. data/ext/boost/thread/externally_locked_stream.hpp +170 -0
  229. data/ext/boost/thread/future.hpp +2517 -455
  230. data/ext/boost/thread/future_error_code.hpp +61 -0
  231. data/ext/boost/thread/is_locked_by_this_thread.hpp +39 -0
  232. data/ext/boost/thread/latch.hpp +142 -0
  233. data/ext/boost/thread/lock_algorithms.hpp +468 -0
  234. data/ext/boost/thread/lock_concepts.hpp +197 -0
  235. data/ext/boost/thread/lock_factories.hpp +78 -0
  236. data/ext/boost/thread/lock_guard.hpp +88 -0
  237. data/ext/boost/thread/lock_options.hpp +31 -0
  238. data/ext/boost/thread/lock_traits.hpp +45 -0
  239. data/ext/boost/thread/lock_types.hpp +1226 -0
  240. data/ext/boost/thread/lockable_adapter.hpp +226 -0
  241. data/ext/boost/thread/lockable_concepts.hpp +157 -0
  242. data/ext/boost/thread/lockable_traits.hpp +207 -0
  243. data/ext/boost/thread/locks.hpp +5 -1816
  244. data/ext/boost/thread/mutex.hpp +33 -1
  245. data/ext/boost/thread/null_mutex.hpp +243 -0
  246. data/ext/boost/thread/once.hpp +10 -1
  247. data/ext/boost/thread/poly_lockable.hpp +68 -0
  248. data/ext/boost/thread/poly_lockable_adapter.hpp +89 -0
  249. data/ext/boost/thread/poly_shared_lockable.hpp +135 -0
  250. data/ext/boost/thread/poly_shared_lockable_adapter.hpp +170 -0
  251. data/ext/boost/thread/pthread/condition_variable.hpp +74 -26
  252. data/ext/boost/thread/pthread/condition_variable_fwd.hpp +54 -27
  253. data/ext/boost/thread/pthread/mutex.hpp +101 -38
  254. data/ext/boost/thread/pthread/once.hpp +459 -44
  255. data/ext/boost/thread/pthread/once_atomic.hpp +313 -0
  256. data/ext/boost/thread/pthread/recursive_mutex.hpp +19 -10
  257. data/ext/boost/thread/pthread/shared_mutex.hpp +226 -61
  258. data/ext/boost/thread/pthread/shared_mutex_assert.hpp +724 -0
  259. data/ext/boost/thread/pthread/thread_data.hpp +53 -50
  260. data/ext/boost/thread/pthread/timespec.hpp +96 -12
  261. data/ext/boost/thread/recursive_mutex.hpp +44 -1
  262. data/ext/boost/thread/reverse_lock.hpp +3 -2
  263. data/ext/boost/thread/scoped_thread.hpp +285 -0
  264. data/ext/boost/thread/shared_lock_guard.hpp +2 -1
  265. data/ext/boost/thread/shared_mutex.hpp +23 -0
  266. data/ext/boost/thread/strict_lock.hpp +235 -0
  267. data/ext/boost/thread/sync_bounded_queue.hpp +594 -0
  268. data/ext/boost/thread/sync_queue.hpp +516 -0
  269. data/ext/boost/thread/synchronized_value.hpp +1001 -0
  270. data/ext/boost/thread/testable_mutex.hpp +148 -0
  271. data/ext/boost/thread/thread.hpp +1 -13
  272. data/ext/boost/thread/thread_functors.hpp +57 -0
  273. data/ext/boost/thread/thread_guard.hpp +46 -0
  274. data/ext/boost/thread/thread_only.hpp +29 -0
  275. data/ext/boost/thread/v2/shared_mutex.hpp +1062 -0
  276. data/ext/boost/thread/v2/thread.hpp +37 -10
  277. data/ext/boost/thread/xtime.hpp +2 -1
  278. data/ext/boost/token_functions.hpp +16 -16
  279. data/ext/boost/type_traits/add_lvalue_reference.hpp +26 -0
  280. data/ext/boost/type_traits/add_reference.hpp +1 -1
  281. data/ext/boost/type_traits/add_rvalue_reference.hpp +4 -4
  282. data/ext/boost/type_traits/aligned_storage.hpp +13 -0
  283. data/ext/boost/type_traits/common_type.hpp +11 -12
  284. data/ext/boost/type_traits/config.hpp +1 -1
  285. data/ext/boost/type_traits/detail/common_type_imp.hpp +1 -1
  286. data/ext/boost/type_traits/detail/has_binary_operator.hpp +1 -1
  287. data/ext/boost/type_traits/detail/is_function_ptr_tester.hpp +1 -1
  288. data/ext/boost/type_traits/has_left_shift.hpp +49 -0
  289. data/ext/boost/type_traits/has_right_shift.hpp +49 -0
  290. data/ext/boost/type_traits/has_trivial_move_assign.hpp +57 -0
  291. data/ext/boost/type_traits/has_trivial_move_constructor.hpp +57 -0
  292. data/ext/boost/type_traits/intrinsics.hpp +18 -2
  293. data/ext/boost/type_traits/is_abstract.hpp +1 -1
  294. data/ext/boost/type_traits/is_array.hpp +1 -1
  295. data/ext/boost/type_traits/is_const.hpp +1 -1
  296. data/ext/boost/type_traits/is_convertible.hpp +78 -17
  297. data/ext/boost/type_traits/is_function.hpp +6 -1
  298. data/ext/boost/type_traits/is_integral.hpp +6 -1
  299. data/ext/boost/type_traits/is_nothrow_move_assignable.hpp +84 -0
  300. data/ext/boost/type_traits/is_nothrow_move_constructible.hpp +84 -0
  301. data/ext/boost/type_traits/is_pod.hpp +3 -1
  302. data/ext/boost/type_traits/is_rvalue_reference.hpp +1 -1
  303. data/ext/boost/type_traits/is_volatile.hpp +1 -1
  304. data/ext/boost/type_traits/make_signed.hpp +153 -0
  305. data/ext/boost/type_traits/make_unsigned.hpp +16 -0
  306. data/ext/boost/type_traits/remove_const.hpp +1 -1
  307. data/ext/boost/type_traits/remove_cv.hpp +1 -1
  308. data/ext/boost/type_traits/remove_reference.hpp +1 -1
  309. data/ext/boost/type_traits/remove_volatile.hpp +1 -1
  310. data/ext/boost/unordered/detail/allocate.hpp +1120 -0
  311. data/ext/boost/unordered/detail/buckets.hpp +876 -0
  312. data/ext/boost/unordered/detail/equivalent.hpp +680 -0
  313. data/ext/boost/unordered/detail/extract_key.hpp +183 -0
  314. data/ext/boost/unordered/detail/fwd.hpp +23 -0
  315. data/ext/boost/unordered/detail/table.hpp +861 -0
  316. data/ext/boost/unordered/detail/unique.hpp +622 -0
  317. data/ext/boost/unordered/detail/util.hpp +260 -0
  318. data/ext/boost/unordered/unordered_map.hpp +1652 -0
  319. data/ext/boost/unordered/unordered_map_fwd.hpp +65 -0
  320. data/ext/boost/unordered/unordered_set.hpp +1549 -0
  321. data/ext/boost/unordered/unordered_set_fwd.hpp +63 -0
  322. data/ext/boost/unordered_map.hpp +18 -0
  323. data/ext/boost/unordered_set.hpp +18 -0
  324. data/ext/boost/utility/addressof.hpp +2 -2
  325. data/ext/boost/utility/result_of.hpp +8 -1
  326. data/ext/boost/version.hpp +2 -2
  327. data/ext/common/Account.h +1 -1
  328. data/ext/common/AccountsDatabase.h +1 -1
  329. data/ext/common/AgentsStarter.cpp +3 -1
  330. data/ext/common/AgentsStarter.h +2 -2
  331. data/ext/common/ApplicationPool2/AppTypes.cpp +24 -6
  332. data/ext/common/ApplicationPool2/AppTypes.h +17 -8
  333. data/ext/common/ApplicationPool2/Common.h +12 -12
  334. data/ext/common/ApplicationPool2/DirectSpawner.h +2 -2
  335. data/ext/common/ApplicationPool2/DummySpawner.h +3 -3
  336. data/ext/common/ApplicationPool2/Group.h +6 -6
  337. data/ext/common/ApplicationPool2/Implementation.cpp +19 -19
  338. data/ext/common/ApplicationPool2/PipeWatcher.h +5 -5
  339. data/ext/common/ApplicationPool2/Pool.h +21 -21
  340. data/ext/common/ApplicationPool2/Process.h +6 -6
  341. data/ext/common/ApplicationPool2/Session.h +1 -1
  342. data/ext/common/ApplicationPool2/SmartSpawner.h +24 -12
  343. data/ext/common/ApplicationPool2/Socket.h +2 -2
  344. data/ext/common/ApplicationPool2/Spawner.h +64 -14
  345. data/ext/common/ApplicationPool2/SpawnerFactory.h +7 -7
  346. data/ext/common/ApplicationPool2/SuperGroup.h +5 -5
  347. data/ext/common/BackgroundEventLoop.cpp +4 -4
  348. data/ext/common/BackgroundEventLoop.h +1 -1
  349. data/ext/common/Constants.h +13 -1
  350. data/ext/common/EventedBufferedInput.h +8 -8
  351. data/ext/common/Exceptions.cpp +71 -0
  352. data/ext/common/Exceptions.h +60 -7
  353. data/ext/common/FileDescriptor.h +4 -4
  354. data/ext/common/MessageClient.h +1 -1
  355. data/ext/common/MessageServer.h +5 -5
  356. data/ext/common/MultiLibeio.cpp +3 -3
  357. data/ext/common/MultiLibeio.h +2 -2
  358. data/ext/common/RandomGenerator.h +11 -11
  359. data/ext/common/ResourceLocator.h +8 -1
  360. data/ext/common/SafeLibev.h +12 -12
  361. data/ext/common/ServerInstanceDir.h +11 -3
  362. data/ext/common/UnionStation.h +10 -10
  363. data/ext/common/Utils.cpp +11 -13
  364. data/ext/common/Utils.h +9 -9
  365. data/ext/common/Utils/BlockingQueue.h +10 -10
  366. data/ext/common/Utils/BufferedIO.h +1 -1
  367. data/ext/common/Utils/CachedFileStat.hpp +2 -2
  368. data/ext/common/Utils/FileChangeChecker.h +1 -1
  369. data/ext/common/Utils/HashMap.h +13 -4
  370. data/ext/common/Utils/IOUtils.cpp +33 -10
  371. data/ext/common/Utils/IniFile.h +3 -3
  372. data/ext/common/Utils/Lock.h +2 -2
  373. data/ext/common/Utils/MessagePassing.h +10 -10
  374. data/ext/common/Utils/ProcessMetricsCollector.h +24 -6
  375. data/ext/common/Utils/ScopeGuard.h +5 -5
  376. data/ext/common/Utils/jsoncpp.cpp +2 -0
  377. data/ext/common/agents/HelperAgent/FileBackedPipe.h +26 -26
  378. data/ext/common/agents/HelperAgent/Main.cpp +18 -18
  379. data/ext/common/agents/HelperAgent/RequestHandler.cpp +4 -4
  380. data/ext/common/agents/HelperAgent/RequestHandler.h +30 -21
  381. data/ext/common/agents/LoggingAgent/AdminController.h +1 -1
  382. data/ext/common/agents/LoggingAgent/FilterSupport.h +13 -11
  383. data/ext/common/agents/LoggingAgent/LoggingServer.h +11 -11
  384. data/ext/common/agents/LoggingAgent/Main.cpp +9 -9
  385. data/ext/common/agents/LoggingAgent/RemoteSender.h +3 -3
  386. data/ext/common/agents/SpawnPreparer.cpp +1 -0
  387. data/ext/common/agents/Watchdog/AgentWatcher.cpp +8 -7
  388. data/ext/common/agents/Watchdog/Main.cpp +81 -73
  389. data/ext/common/agents/Watchdog/ServerInstanceDirToucher.cpp +1 -1
  390. data/ext/libev/Changes +57 -0
  391. data/ext/libev/LICENSE +2 -1
  392. data/ext/libev/Makefile.in +110 -50
  393. data/ext/libev/README +8 -8
  394. data/ext/libev/aclocal.m4 +1503 -861
  395. data/ext/libev/config.guess +290 -304
  396. data/ext/libev/config.sub +77 -198
  397. data/ext/libev/configure +1735 -890
  398. data/ext/libev/configure.ac +3 -2
  399. data/ext/libev/ev++.h +6 -6
  400. data/ext/libev/ev.c +541 -214
  401. data/ext/libev/ev.h +106 -100
  402. data/ext/libev/ev_epoll.c +1 -1
  403. data/ext/libev/ev_kqueue.c +20 -4
  404. data/ext/libev/ev_vars.h +15 -16
  405. data/ext/libev/ev_win32.c +12 -2
  406. data/ext/libev/ev_wrap.h +162 -160
  407. data/ext/libev/event.c +29 -6
  408. data/ext/libev/event.h +9 -2
  409. data/ext/libev/ltmain.sh +2632 -1384
  410. data/ext/nginx/ConfigurationCommands.c +1 -1
  411. data/ext/nginx/ConfigurationCommands.c.erb +3 -1
  412. data/ext/nginx/ContentHandler.c +25 -2
  413. data/ext/nginx/CreateLocationConfig.c +1 -0
  414. data/ext/nginx/CreateLocationConfig.c.erb +1 -1
  415. data/ext/nginx/MergeLocationConfig.c +1 -0
  416. data/ext/nginx/MergeLocationConfig.c.erb +1 -1
  417. data/ext/nginx/config +12 -0
  418. data/ext/oxt/dynamic_thread_group.hpp +7 -4
  419. data/ext/oxt/system_calls.cpp +5 -1
  420. data/ext/oxt/system_calls.hpp +3 -0
  421. data/helper-scripts/node-loader.js +117 -249
  422. data/lib/phusion_passenger.rb +27 -5
  423. data/lib/phusion_passenger/abstract_installer.rb +104 -9
  424. data/lib/phusion_passenger/admin_tools/memory_stats.rb +10 -9
  425. data/lib/phusion_passenger/apache2/config_options.rb +6 -3
  426. data/lib/phusion_passenger/common_library.rb +7 -1
  427. data/lib/phusion_passenger/constants.rb +6 -0
  428. data/lib/phusion_passenger/loader_shared_helpers.rb +7 -4
  429. data/lib/phusion_passenger/nginx/config_options.rb +2 -1
  430. data/lib/phusion_passenger/packaging.rb +3 -0
  431. data/lib/phusion_passenger/platform_info/apache.rb +43 -6
  432. data/lib/phusion_passenger/platform_info/apache_detector.rb +15 -5
  433. data/lib/phusion_passenger/platform_info/compiler.rb +167 -32
  434. data/lib/phusion_passenger/platform_info/cxx_portability.rb +133 -77
  435. data/lib/phusion_passenger/platform_info/depcheck.rb +17 -7
  436. data/lib/phusion_passenger/platform_info/depcheck_specs/apache2.rb +3 -3
  437. data/lib/phusion_passenger/platform_info/depcheck_specs/compiler_toolchain.rb +4 -4
  438. data/lib/phusion_passenger/platform_info/depcheck_specs/ruby.rb +5 -6
  439. data/lib/phusion_passenger/platform_info/linux.rb +2 -1
  440. data/lib/phusion_passenger/platform_info/operating_system.rb +1 -1
  441. data/lib/phusion_passenger/platform_info/ruby.rb +18 -3
  442. data/lib/phusion_passenger/standalone/runtime_installer.rb +6 -2
  443. data/lib/phusion_passenger/standalone/start_command.rb +8 -2
  444. data/lib/phusion_passenger/utils/ansi_colors.rb +9 -0
  445. data/lib/phusion_passenger/utils/hosts_file_parser.rb +4 -2
  446. data/node_lib/phusion_passenger/httplib_emulation.js +141 -0
  447. data/node_lib/phusion_passenger/line_reader.js +154 -0
  448. data/node_lib/phusion_passenger/request_handler.js +65 -0
  449. data/node_lib/phusion_passenger/session_protocol_parser.js +113 -0
  450. data/resources/templates/apache2/deployment_example.txt.erb +2 -1
  451. data/resources/templates/apache2/installing_against_a_different_apache.txt.erb +14 -0
  452. data/resources/templates/apache2/multiple_apache_installations_detected.txt.erb +15 -0
  453. data/resources/templates/apache2/possible_solutions_for_compilation_and_installation_problems.txt.erb +4 -5
  454. data/resources/templates/general_error_with_html.html.template +1 -1
  455. data/resources/templates/installer_common/gem_install_permission_problems.txt.erb +17 -0
  456. data/resources/templates/installer_common/low_amount_of_memory_warning.txt.erb +6 -4
  457. data/resources/templates/installer_common/world_inaccessible_directories.txt.erb +16 -0
  458. data/resources/templates/nginx/deployment_example.txt.erb +2 -1
  459. data/resources/templates/nginx/possible_solutions_for_compilation_and_installation_problems.txt.erb +4 -5
  460. data/resources/templates/standalone/config.erb +1 -0
  461. data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +3 -3
  462. data/test/cxx/ApplicationPool2/PoolTest.cpp +4 -4
  463. data/test/cxx/ApplicationPool2/ProcessTest.cpp +5 -5
  464. data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +5 -5
  465. data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +1 -1
  466. data/test/cxx/EventedBufferedInputTest.cpp +6 -6
  467. data/test/cxx/FileBackedPipeTest.cpp +1 -1
  468. data/test/cxx/MessagePassingTest.cpp +1 -1
  469. data/test/cxx/MessageServerTest.cpp +4 -4
  470. data/test/cxx/RequestHandlerTest.cpp +7 -7
  471. data/test/cxx/UnionStationTest.cpp +2 -2
  472. data/test/node/line_reader_spec.js +338 -0
  473. data/test/node/spec_helper.js +27 -0
  474. data/test/ruby/standalone/runtime_installer_spec.rb +2 -1
  475. metadata +131 -22
  476. metadata.gz.asc +7 -7
  477. data/ext/boost/functional/hash/detail/container_fwd_0x.hpp +0 -29
  478. data/ext/boost/lambda/core.hpp +0 -79
  479. data/ext/boost/lambda/detail/actions.hpp +0 -174
  480. data/ext/boost/lambda/detail/arity_code.hpp +0 -110
  481. data/ext/boost/lambda/detail/function_adaptors.hpp +0 -789
  482. data/ext/boost/lambda/detail/is_instance_of.hpp +0 -104
  483. data/ext/boost/lambda/detail/lambda_config.hpp +0 -48
  484. data/ext/boost/lambda/detail/lambda_functor_base.hpp +0 -615
  485. data/ext/boost/lambda/detail/lambda_functors.hpp +0 -324
  486. data/ext/boost/lambda/detail/lambda_fwd.hpp +0 -74
  487. data/ext/boost/lambda/detail/lambda_traits.hpp +0 -578
  488. data/ext/boost/lambda/detail/member_ptr.hpp +0 -737
  489. data/ext/boost/lambda/detail/operator_actions.hpp +0 -139
  490. data/ext/boost/lambda/detail/operator_lambda_func_base.hpp +0 -271
  491. data/ext/boost/lambda/detail/operator_return_type_traits.hpp +0 -917
  492. data/ext/boost/lambda/detail/operators.hpp +0 -370
  493. data/ext/boost/lambda/detail/ret.hpp +0 -325
  494. data/ext/boost/lambda/detail/return_type_traits.hpp +0 -282
  495. data/ext/boost/lambda/detail/select_functions.hpp +0 -74
  496. 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
- * link:http://groups.google.com/group/phusion-passenger[Discussion forum] - post a
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.
@@ -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
  }
@@ -48,4 +48,4 @@
48
48
  config->enabled = DirConfig::UNSET;
49
49
  config->maxRequestQueueSize = UNSET_INT_VALUE;
50
50
  config->loadShellEnvvars = DirConfig::UNSET;
51
-
51
+
@@ -68,4 +68,4 @@ end
68
68
  <% else
69
69
  raise "Unknown option type #{option[:type].inspect} for option #{option[:name]}"
70
70
  end -%>
71
- <% end %>
71
+ <% end %>
@@ -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[uriLen + 2 * escaped + 1];
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
- addHeader(output, "PASSENGER_RUBY", config->ruby ? config->ruby : serverConfig.defaultRuby);
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, "PASSENGER_USER", config->getUser());
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)) {