passenger 3.0.21 → 3.9.1.beta

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 (835) hide show
  1. data/DEVELOPERS.TXT +4 -10
  2. data/NEWS +19 -27
  3. data/Rakefile +20 -19
  4. data/bin/passenger +3 -2
  5. data/bin/passenger-config +35 -5
  6. data/bin/passenger-install-apache2-module +12 -12
  7. data/bin/passenger-install-nginx-module +55 -38
  8. data/bin/passenger-memory-stats +3 -1
  9. data/bin/passenger-status +7 -35
  10. data/build/agents.rb +107 -21
  11. data/build/apache2.rb +11 -46
  12. data/build/basics.rb +61 -9
  13. data/build/common_library.rb +59 -142
  14. data/build/cxx_tests.rb +111 -110
  15. data/build/documentation.rb +33 -0
  16. data/build/misc.rb +30 -12
  17. data/build/nginx.rb +10 -39
  18. data/build/oxt_tests.rb +1 -0
  19. data/build/ruby_extension.rb +1 -5
  20. data/build/test_basics.rb +3 -2
  21. data/dev/copy_boost_headers.rb +2 -1
  22. data/doc/Architectural overview.html +49 -90
  23. data/doc/DebuggingAndStressTesting.txt.md +49 -0
  24. data/doc/Packaging.txt.md +254 -0
  25. data/doc/Security of user switching support.html +35 -66
  26. data/doc/Users guide Apache.html +588 -758
  27. data/doc/Users guide Apache.idmap.txt +253 -136
  28. data/doc/Users guide Apache.txt +154 -109
  29. data/doc/Users guide Nginx.html +544 -660
  30. data/doc/Users guide Nginx.idmap.txt +179 -91
  31. data/doc/Users guide Nginx.txt +192 -118
  32. data/doc/Users guide Standalone.html +65 -48
  33. data/doc/Users guide Standalone.idmap.txt +10 -2
  34. data/doc/Users guide Standalone.txt +4 -0
  35. data/doc/images/glyphicons-halflings-white.png +0 -0
  36. data/doc/images/glyphicons-halflings.png +0 -0
  37. data/doc/images/phusion_banner_small.png +0 -0
  38. data/doc/images/{smart-lv2.png → smart.png} +0 -0
  39. data/doc/images/{smart-lv2.svg → smart.svg} +0 -0
  40. data/doc/templates/bootstrap.min.css +397 -0
  41. data/doc/templates/markdown.html.erb +117 -0
  42. data/doc/users_guide_snippets/analysis_and_system_maintenance.txt +2 -1
  43. data/doc/users_guide_snippets/appendix_c_spawning_methods.txt +26 -48
  44. data/doc/users_guide_snippets/passenger_spawn_method.txt +18 -30
  45. data/doc/users_guide_snippets/support_information.txt +30 -0
  46. data/ext/apache2/Bucket.cpp +9 -26
  47. data/ext/apache2/Bucket.h +13 -10
  48. data/ext/apache2/Configuration.cpp +70 -58
  49. data/ext/apache2/Configuration.hpp +19 -47
  50. data/ext/apache2/DirectoryMapper.h +7 -7
  51. data/ext/apache2/Hooks.cpp +150 -313
  52. data/ext/boost/algorithm/string/detail/case_conv.hpp +4 -2
  53. data/ext/boost/algorithm/string/detail/find_format.hpp +20 -20
  54. data/ext/boost/algorithm/string/detail/find_format_all.hpp +23 -23
  55. data/ext/boost/algorithm/string/detail/find_format_store.hpp +2 -2
  56. data/ext/boost/algorithm/string/detail/formatter.hpp +25 -0
  57. data/ext/boost/algorithm/string/formatter.hpp +20 -3
  58. data/ext/boost/assert.hpp +85 -4
  59. data/ext/boost/bind/bind.hpp +1 -1
  60. data/ext/boost/concept/detail/backward_compatibility.hpp +1 -1
  61. data/ext/boost/concept_check.hpp +140 -64
  62. data/ext/boost/config.hpp +1 -1
  63. data/ext/boost/config/auto_link.hpp +8 -6
  64. data/ext/boost/config/compiler/borland.hpp +12 -2
  65. data/ext/boost/config/compiler/clang.hpp +89 -30
  66. data/ext/boost/config/compiler/codegear.hpp +3 -2
  67. data/ext/boost/config/compiler/common_edg.hpp +7 -5
  68. data/ext/boost/config/compiler/cray.hpp +61 -0
  69. data/ext/boost/config/compiler/digitalmars.hpp +9 -1
  70. data/ext/boost/config/compiler/gcc.hpp +33 -24
  71. data/ext/boost/config/compiler/gcc_xml.hpp +4 -0
  72. data/ext/boost/config/compiler/hp_acc.hpp +12 -1
  73. data/ext/boost/config/compiler/intel.hpp +78 -4
  74. data/ext/boost/config/compiler/metrowerks.hpp +4 -1
  75. data/ext/boost/config/compiler/mpw.hpp +4 -1
  76. data/ext/boost/config/compiler/nvcc.hpp +8 -66
  77. data/ext/boost/config/compiler/pathscale.hpp +80 -0
  78. data/ext/boost/config/compiler/pgi.hpp +5 -5
  79. data/ext/boost/config/compiler/sunpro_cc.hpp +4 -1
  80. data/ext/boost/config/compiler/vacpp.hpp +37 -13
  81. data/ext/boost/config/compiler/visualc.hpp +24 -11
  82. data/ext/boost/config/platform/bsd.hpp +1 -1
  83. data/ext/boost/config/platform/cray.hpp +18 -0
  84. data/ext/boost/config/platform/cygwin.hpp +10 -0
  85. data/ext/boost/config/platform/linux.hpp +5 -0
  86. data/ext/boost/config/platform/macos.hpp +5 -4
  87. data/ext/boost/config/platform/symbian.hpp +5 -2
  88. data/ext/boost/config/platform/vms.hpp +25 -0
  89. data/ext/boost/config/platform/win32.hpp +7 -1
  90. data/ext/boost/config/select_compiler_config.hpp +8 -25
  91. data/ext/boost/config/select_platform_config.hpp +8 -1
  92. data/ext/boost/config/select_stdlib_config.hpp +9 -1
  93. data/ext/boost/config/stdlib/dinkumware.hpp +6 -9
  94. data/ext/boost/config/stdlib/libcomo.hpp +1 -4
  95. data/ext/boost/config/stdlib/libcpp.hpp +36 -0
  96. data/ext/boost/config/stdlib/libstdcpp3.hpp +37 -11
  97. data/ext/boost/config/stdlib/modena.hpp +1 -4
  98. data/ext/boost/config/stdlib/msl.hpp +1 -4
  99. data/ext/boost/config/stdlib/roguewave.hpp +9 -6
  100. data/ext/boost/config/stdlib/sgi.hpp +12 -4
  101. data/ext/boost/config/stdlib/stlport.hpp +11 -4
  102. data/ext/boost/config/stdlib/vacpp.hpp +11 -4
  103. data/ext/boost/config/suffix.hpp +71 -6
  104. data/ext/boost/config/warning_disable.hpp +1 -1
  105. data/ext/boost/container/container_fwd.hpp +177 -0
  106. data/ext/boost/cstdint.hpp +17 -12
  107. data/ext/boost/current_function.hpp +2 -1
  108. data/ext/boost/date_time/c_time.hpp +17 -1
  109. data/ext/boost/date_time/compiler_config.hpp +13 -15
  110. data/ext/boost/date_time/date_formatting.hpp +7 -1
  111. data/ext/boost/date_time/filetime_functions.hpp +4 -4
  112. data/ext/boost/date_time/gregorian_calendar.ipp +2 -2
  113. data/ext/boost/date_time/strings_from_facet.hpp +3 -3
  114. data/ext/boost/date_time/time_facet.hpp +101 -101
  115. data/ext/boost/detail/endian.hpp +4 -2
  116. data/ext/boost/detail/fenv.hpp +74 -0
  117. data/ext/boost/detail/sp_typeinfo.hpp +6 -0
  118. data/ext/boost/exception/detail/clone_current_exception.hpp +47 -0
  119. data/ext/boost/exception/detail/exception_ptr.hpp +194 -122
  120. data/ext/boost/exception/detail/type_info.hpp +3 -3
  121. data/ext/boost/exception/diagnostic_information.hpp +37 -21
  122. data/ext/boost/exception/exception.hpp +21 -1
  123. data/ext/boost/exception/info.hpp +0 -1
  124. data/ext/boost/function.hpp +2 -2
  125. data/ext/boost/function/function_base.hpp +15 -9
  126. data/ext/boost/function/function_template.hpp +26 -48
  127. data/ext/boost/integer_fwd.hpp +0 -16
  128. data/ext/boost/integer_traits.hpp +2 -2
  129. data/ext/boost/iterator.hpp +1 -1
  130. data/ext/boost/iterator/iterator_adaptor.hpp +1 -7
  131. data/ext/boost/iterator/iterator_facade.hpp +13 -13
  132. data/ext/boost/iterator/transform_iterator.hpp +5 -20
  133. data/ext/boost/lexical_cast.hpp +1655 -673
  134. data/ext/boost/math/policies/policy.hpp +982 -0
  135. data/ext/boost/math/special_functions/detail/fp_traits.hpp +570 -0
  136. data/ext/boost/math/special_functions/detail/round_fwd.hpp +80 -0
  137. data/ext/boost/math/special_functions/fpclassify.hpp +533 -0
  138. data/ext/boost/math/special_functions/math_fwd.hpp +1070 -0
  139. data/ext/boost/math/special_functions/sign.hpp +145 -0
  140. data/ext/boost/math/tools/config.hpp +321 -0
  141. data/ext/boost/math/tools/promotion.hpp +150 -0
  142. data/ext/boost/math/tools/real_cast.hpp +29 -0
  143. data/ext/boost/math/tools/user.hpp +97 -0
  144. data/ext/boost/move/move.hpp +1222 -0
  145. data/ext/boost/mpl/O1_size.hpp +40 -0
  146. data/ext/boost/mpl/O1_size_fwd.hpp +24 -0
  147. data/ext/boost/mpl/advance.hpp +76 -0
  148. data/ext/boost/mpl/advance_fwd.hpp +28 -0
  149. data/ext/boost/mpl/at.hpp +52 -0
  150. data/ext/boost/mpl/at_fwd.hpp +24 -0
  151. data/ext/boost/mpl/aux_/O1_size_impl.hpp +87 -0
  152. data/ext/boost/mpl/aux_/advance_backward.hpp +128 -0
  153. data/ext/boost/mpl/aux_/advance_forward.hpp +127 -0
  154. data/ext/boost/mpl/aux_/arithmetic_op.hpp +92 -0
  155. data/ext/boost/mpl/aux_/at_impl.hpp +45 -0
  156. data/ext/boost/mpl/aux_/begin_end_impl.hpp +101 -0
  157. data/ext/boost/mpl/aux_/clear_impl.hpp +35 -0
  158. data/ext/boost/mpl/aux_/comparison_op.hpp +83 -0
  159. data/ext/boost/mpl/aux_/config/forwarding.hpp +27 -0
  160. data/ext/boost/mpl/aux_/config/typeof.hpp +38 -0
  161. data/ext/boost/mpl/aux_/contains_impl.hpp +61 -0
  162. data/ext/boost/mpl/aux_/find_if_pred.hpp +31 -0
  163. data/ext/boost/mpl/aux_/fold_impl.hpp +43 -0
  164. data/ext/boost/mpl/aux_/has_begin.hpp +23 -0
  165. data/ext/boost/mpl/aux_/has_size.hpp +23 -0
  166. data/ext/boost/mpl/aux_/has_tag.hpp +23 -0
  167. data/ext/boost/mpl/aux_/inserter_algorithm.hpp +159 -0
  168. data/ext/boost/mpl/aux_/is_msvc_eti_arg.hpp +64 -0
  169. data/ext/boost/mpl/aux_/iter_apply.hpp +47 -0
  170. data/ext/boost/mpl/aux_/iter_fold_if_impl.hpp +210 -0
  171. data/ext/boost/mpl/aux_/iter_fold_impl.hpp +42 -0
  172. data/ext/boost/mpl/aux_/lambda_spec.hpp +49 -0
  173. data/ext/boost/mpl/aux_/largest_int.hpp +63 -0
  174. data/ext/boost/mpl/aux_/msvc_eti_base.hpp +77 -0
  175. data/ext/boost/mpl/aux_/msvc_type.hpp +62 -0
  176. data/ext/boost/mpl/aux_/numeric_cast_utils.hpp +77 -0
  177. data/ext/boost/mpl/aux_/numeric_op.hpp +315 -0
  178. data/ext/boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp +97 -0
  179. data/ext/boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp +97 -0
  180. data/ext/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp +94 -0
  181. data/ext/boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp +180 -0
  182. data/ext/boost/mpl/aux_/preprocessed/gcc/greater.hpp +94 -0
  183. data/ext/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp +94 -0
  184. data/ext/boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp +133 -0
  185. data/ext/boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp +180 -0
  186. data/ext/boost/mpl/aux_/preprocessed/gcc/less.hpp +94 -0
  187. data/ext/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp +94 -0
  188. data/ext/boost/mpl/aux_/preprocessed/gcc/list.hpp +323 -0
  189. data/ext/boost/mpl/aux_/preprocessed/gcc/minus.hpp +146 -0
  190. data/ext/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp +94 -0
  191. data/ext/boost/mpl/aux_/preprocessed/gcc/plus.hpp +146 -0
  192. data/ext/boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp +231 -0
  193. data/ext/boost/mpl/aux_/preprocessed/gcc/times.hpp +146 -0
  194. data/ext/boost/mpl/aux_/preprocessed/gcc/vector.hpp +323 -0
  195. data/ext/boost/mpl/aux_/preprocessor/default_params.hpp +67 -0
  196. data/ext/boost/mpl/aux_/push_back_impl.hpp +70 -0
  197. data/ext/boost/mpl/aux_/push_front_impl.hpp +71 -0
  198. data/ext/boost/mpl/aux_/reverse_fold_impl.hpp +44 -0
  199. data/ext/boost/mpl/aux_/size_impl.hpp +52 -0
  200. data/ext/boost/mpl/aux_/traits_lambda_spec.hpp +63 -0
  201. data/ext/boost/mpl/back_fwd.hpp +24 -0
  202. data/ext/boost/mpl/back_inserter.hpp +34 -0
  203. data/ext/boost/mpl/begin_end.hpp +57 -0
  204. data/ext/boost/mpl/begin_end_fwd.hpp +27 -0
  205. data/ext/boost/mpl/clear.hpp +39 -0
  206. data/ext/boost/mpl/clear_fwd.hpp +24 -0
  207. data/ext/boost/mpl/comparison.hpp +24 -0
  208. data/ext/boost/mpl/contains.hpp +41 -0
  209. data/ext/boost/mpl/contains_fwd.hpp +25 -0
  210. data/ext/boost/mpl/deref.hpp +41 -0
  211. data/ext/boost/mpl/distance.hpp +78 -0
  212. data/ext/boost/mpl/distance_fwd.hpp +28 -0
  213. data/ext/boost/mpl/empty_fwd.hpp +24 -0
  214. data/ext/boost/mpl/equal_to.hpp +21 -0
  215. data/ext/boost/mpl/find.hpp +38 -0
  216. data/ext/boost/mpl/find_if.hpp +50 -0
  217. data/ext/boost/mpl/fold.hpp +48 -0
  218. data/ext/boost/mpl/front_fwd.hpp +24 -0
  219. data/ext/boost/mpl/front_inserter.hpp +33 -0
  220. data/ext/boost/mpl/greater.hpp +21 -0
  221. data/ext/boost/mpl/greater_equal.hpp +21 -0
  222. data/ext/boost/mpl/inserter.hpp +32 -0
  223. data/ext/boost/mpl/iter_fold.hpp +49 -0
  224. data/ext/boost/mpl/iter_fold_if.hpp +117 -0
  225. data/ext/boost/mpl/iterator_range.hpp +42 -0
  226. data/ext/boost/mpl/iterator_tags.hpp +27 -0
  227. data/ext/boost/mpl/less.hpp +21 -0
  228. data/ext/boost/mpl/less_equal.hpp +21 -0
  229. data/ext/boost/mpl/limits/list.hpp +21 -0
  230. data/ext/boost/mpl/limits/vector.hpp +21 -0
  231. data/ext/boost/mpl/list.hpp +57 -0
  232. data/ext/boost/mpl/list/aux_/O1_size.hpp +33 -0
  233. data/ext/boost/mpl/list/aux_/begin_end.hpp +44 -0
  234. data/ext/boost/mpl/list/aux_/clear.hpp +34 -0
  235. data/ext/boost/mpl/list/aux_/empty.hpp +34 -0
  236. data/ext/boost/mpl/list/aux_/front.hpp +33 -0
  237. data/ext/boost/mpl/list/aux_/include_preprocessed.hpp +35 -0
  238. data/ext/boost/mpl/list/aux_/item.hpp +55 -0
  239. data/ext/boost/mpl/list/aux_/iterator.hpp +76 -0
  240. data/ext/boost/mpl/list/aux_/pop_front.hpp +34 -0
  241. data/ext/boost/mpl/list/aux_/preprocessed/plain/list10.hpp +149 -0
  242. data/ext/boost/mpl/list/aux_/preprocessed/plain/list20.hpp +169 -0
  243. data/ext/boost/mpl/list/aux_/push_back.hpp +36 -0
  244. data/ext/boost/mpl/list/aux_/push_front.hpp +39 -0
  245. data/ext/boost/mpl/list/aux_/size.hpp +33 -0
  246. data/ext/boost/mpl/list/aux_/tag.hpp +24 -0
  247. data/ext/boost/mpl/list/list0.hpp +42 -0
  248. data/ext/boost/mpl/list/list10.hpp +43 -0
  249. data/ext/boost/mpl/list/list20.hpp +43 -0
  250. data/ext/boost/mpl/long.hpp +22 -0
  251. data/ext/boost/mpl/long_fwd.hpp +27 -0
  252. data/ext/boost/mpl/minus.hpp +21 -0
  253. data/ext/boost/mpl/multiplies.hpp +53 -0
  254. data/ext/boost/mpl/negate.hpp +81 -0
  255. data/ext/boost/mpl/not_equal_to.hpp +21 -0
  256. data/ext/boost/mpl/numeric_cast.hpp +41 -0
  257. data/ext/boost/mpl/pair.hpp +70 -0
  258. data/ext/boost/mpl/plus.hpp +21 -0
  259. data/ext/boost/mpl/pop_back_fwd.hpp +24 -0
  260. data/ext/boost/mpl/pop_front_fwd.hpp +24 -0
  261. data/ext/boost/mpl/prior.hpp +19 -0
  262. data/ext/boost/mpl/push_back.hpp +53 -0
  263. data/ext/boost/mpl/push_back_fwd.hpp +24 -0
  264. data/ext/boost/mpl/push_front.hpp +52 -0
  265. data/ext/boost/mpl/push_front_fwd.hpp +24 -0
  266. data/ext/boost/mpl/remove_if.hpp +83 -0
  267. data/ext/boost/mpl/reverse_fold.hpp +50 -0
  268. data/ext/boost/mpl/same_as.hpp +55 -0
  269. data/ext/boost/mpl/sequence_tag.hpp +124 -0
  270. data/ext/boost/mpl/sequence_tag_fwd.hpp +26 -0
  271. data/ext/boost/mpl/size.hpp +42 -0
  272. data/ext/boost/mpl/size_fwd.hpp +24 -0
  273. data/ext/boost/mpl/tag.hpp +52 -0
  274. data/ext/boost/mpl/times.hpp +21 -0
  275. data/ext/boost/mpl/vector.hpp +57 -0
  276. data/ext/boost/mpl/vector/aux_/O1_size.hpp +56 -0
  277. data/ext/boost/mpl/vector/aux_/at.hpp +116 -0
  278. data/ext/boost/mpl/vector/aux_/back.hpp +59 -0
  279. data/ext/boost/mpl/vector/aux_/begin_end.hpp +49 -0
  280. data/ext/boost/mpl/vector/aux_/clear.hpp +55 -0
  281. data/ext/boost/mpl/vector/aux_/empty.hpp +68 -0
  282. data/ext/boost/mpl/vector/aux_/front.hpp +56 -0
  283. data/ext/boost/mpl/vector/aux_/include_preprocessed.hpp +55 -0
  284. data/ext/boost/mpl/vector/aux_/item.hpp +103 -0
  285. data/ext/boost/mpl/vector/aux_/iterator.hpp +130 -0
  286. data/ext/boost/mpl/vector/aux_/pop_back.hpp +40 -0
  287. data/ext/boost/mpl/vector/aux_/pop_front.hpp +40 -0
  288. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector10.hpp +829 -0
  289. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector20.hpp +1144 -0
  290. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10.hpp +139 -0
  291. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20.hpp +159 -0
  292. data/ext/boost/mpl/vector/aux_/push_back.hpp +40 -0
  293. data/ext/boost/mpl/vector/aux_/push_front.hpp +40 -0
  294. data/ext/boost/mpl/vector/aux_/size.hpp +49 -0
  295. data/ext/boost/mpl/vector/aux_/tag.hpp +32 -0
  296. data/ext/boost/mpl/vector/aux_/vector0.hpp +52 -0
  297. data/ext/boost/mpl/vector/vector0.hpp +34 -0
  298. data/ext/boost/mpl/vector/vector10.hpp +45 -0
  299. data/ext/boost/mpl/vector/vector20.hpp +45 -0
  300. data/ext/boost/none.hpp +1 -1
  301. data/ext/boost/numeric/conversion/bounds.hpp +24 -0
  302. data/ext/boost/numeric/conversion/cast.hpp +61 -0
  303. data/ext/boost/numeric/conversion/conversion_traits.hpp +39 -0
  304. data/ext/boost/numeric/conversion/converter.hpp +68 -0
  305. data/ext/boost/numeric/conversion/converter_policies.hpp +186 -0
  306. data/ext/boost/numeric/conversion/detail/bounds.hpp +58 -0
  307. data/ext/boost/numeric/conversion/detail/conversion_traits.hpp +97 -0
  308. data/ext/boost/numeric/conversion/detail/converter.hpp +602 -0
  309. data/ext/boost/numeric/conversion/detail/int_float_mixture.hpp +72 -0
  310. data/ext/boost/numeric/conversion/detail/is_subranged.hpp +234 -0
  311. data/ext/boost/numeric/conversion/detail/meta.hpp +120 -0
  312. data/ext/boost/numeric/conversion/detail/numeric_cast_traits.hpp +138 -0
  313. data/ext/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp +1741 -0
  314. data/ext/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp +347 -0
  315. data/ext/boost/numeric/conversion/detail/sign_mixture.hpp +72 -0
  316. data/ext/boost/numeric/conversion/detail/udt_builtin_mixture.hpp +69 -0
  317. data/ext/boost/numeric/conversion/int_float_mixture_enum.hpp +29 -0
  318. data/ext/boost/numeric/conversion/numeric_cast_traits.hpp +31 -0
  319. data/ext/boost/numeric/conversion/sign_mixture_enum.hpp +29 -0
  320. data/ext/boost/numeric/conversion/udt_builtin_mixture_enum.hpp +26 -0
  321. data/ext/boost/operators.hpp +3 -1
  322. data/ext/boost/optional/optional.hpp +146 -79
  323. data/ext/boost/optional/optional_fwd.hpp +8 -1
  324. data/ext/boost/preprocessor/cat.hpp +2 -2
  325. data/ext/boost/preprocessor/config/config.hpp +39 -4
  326. data/ext/boost/preprocessor/facilities/intercept.hpp +277 -0
  327. data/ext/boost/preprocessor/facilities/overload.hpp +25 -0
  328. data/ext/boost/preprocessor/iteration/detail/iter/forward1.hpp +3 -3
  329. data/ext/boost/preprocessor/iteration/iterate.hpp +3 -3
  330. data/ext/boost/preprocessor/punctuation/paren.hpp +23 -0
  331. data/ext/boost/preprocessor/repetition/enum_shifted_params.hpp +44 -0
  332. data/ext/boost/preprocessor/seq/cat.hpp +5 -4
  333. data/ext/boost/preprocessor/seq/size.hpp +0 -1
  334. data/ext/boost/preprocessor/tuple/eat.hpp +83 -34
  335. data/ext/boost/preprocessor/tuple/elem.hpp +161 -355
  336. data/ext/boost/preprocessor/tuple/rem.hpp +110 -48
  337. data/ext/boost/preprocessor/tuple/to_list.hpp +90 -36
  338. data/ext/boost/preprocessor/variadic/elem.hpp +94 -0
  339. data/ext/boost/preprocessor/variadic/size.hpp +30 -0
  340. data/ext/boost/range/begin.hpp +17 -6
  341. data/ext/boost/range/concepts.hpp +37 -2
  342. data/ext/boost/range/detail/safe_bool.hpp +72 -0
  343. data/ext/boost/range/end.hpp +14 -9
  344. data/ext/boost/range/iterator_range_core.hpp +120 -12
  345. data/ext/boost/range/size.hpp +21 -5
  346. data/ext/boost/smart_ptr/detail/shared_count.hpp +88 -0
  347. data/ext/boost/smart_ptr/detail/sp_counted_base.hpp +3 -0
  348. data/ext/boost/smart_ptr/detail/sp_counted_base_aix.hpp +142 -0
  349. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +9 -0
  350. data/ext/boost/smart_ptr/detail/sp_counted_impl.hpp +10 -2
  351. data/ext/boost/smart_ptr/detail/sp_has_sync.hpp +5 -1
  352. data/ext/boost/smart_ptr/detail/spinlock.hpp +4 -1
  353. data/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +20 -3
  354. data/ext/boost/smart_ptr/detail/spinlock_pool.hpp +4 -0
  355. data/ext/boost/smart_ptr/make_shared.hpp +591 -22
  356. data/ext/boost/smart_ptr/shared_array.hpp +29 -1
  357. data/ext/boost/smart_ptr/shared_ptr.hpp +29 -13
  358. data/ext/boost/smart_ptr/weak_ptr.hpp +24 -12
  359. data/ext/boost/src/pthread/once.cpp +9 -7
  360. data/ext/boost/src/pthread/thread.cpp +32 -28
  361. data/ext/boost/src/pthread/timeconv.inl +4 -5
  362. data/ext/boost/src/tss_null.cpp +5 -1
  363. data/ext/boost/static_assert.hpp +8 -2
  364. data/ext/boost/thread/detail/config.hpp +19 -4
  365. data/ext/boost/thread/detail/move.hpp +11 -5
  366. data/ext/boost/thread/detail/thread.hpp +59 -43
  367. data/ext/boost/thread/exceptions.hpp +9 -9
  368. data/ext/boost/thread/future.hpp +150 -82
  369. data/ext/boost/thread/locks.hpp +101 -60
  370. data/ext/boost/thread/pthread/condition_variable.hpp +79 -32
  371. data/ext/boost/thread/pthread/condition_variable_fwd.hpp +12 -3
  372. data/ext/boost/thread/pthread/mutex.hpp +17 -14
  373. data/ext/boost/thread/pthread/once.hpp +3 -4
  374. data/ext/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +12 -2
  375. data/ext/boost/thread/pthread/recursive_mutex.hpp +19 -19
  376. data/ext/boost/thread/pthread/shared_mutex.hpp +13 -13
  377. data/ext/boost/thread/pthread/thread_data.hpp +40 -12
  378. data/ext/boost/thread/thread_time.hpp +5 -0
  379. data/ext/boost/throw_exception.hpp +1 -1
  380. data/ext/boost/token_functions.hpp +34 -10
  381. data/ext/boost/type_traits/add_rvalue_reference.hpp +66 -0
  382. data/ext/boost/type_traits/alignment_of.hpp +1 -1
  383. data/ext/boost/type_traits/detail/bool_trait_def.hpp +26 -3
  384. data/ext/boost/type_traits/detail/bool_trait_undef.hpp +3 -2
  385. data/ext/boost/type_traits/detail/cv_traits_impl.hpp +1 -1
  386. data/ext/boost/type_traits/detail/size_t_trait_def.hpp +6 -4
  387. data/ext/boost/type_traits/detail/type_trait_def.hpp +8 -2
  388. data/ext/boost/type_traits/function_traits.hpp +1 -1
  389. data/ext/boost/type_traits/has_nothrow_constructor.hpp +53 -0
  390. data/ext/boost/type_traits/has_nothrow_copy.hpp +19 -5
  391. data/ext/boost/type_traits/has_trivial_constructor.hpp +51 -0
  392. data/ext/boost/type_traits/has_trivial_copy.hpp +20 -5
  393. data/ext/boost/type_traits/has_trivial_destructor.hpp +12 -5
  394. data/ext/boost/type_traits/intrinsics.hpp +119 -71
  395. data/ext/boost/type_traits/is_const.hpp +5 -5
  396. data/ext/boost/type_traits/is_convertible.hpp +14 -13
  397. data/ext/boost/type_traits/is_enum.hpp +1 -1
  398. data/ext/boost/type_traits/is_floating_point.hpp +27 -0
  399. data/ext/boost/type_traits/is_function.hpp +3 -3
  400. data/ext/boost/type_traits/is_fundamental.hpp +1 -1
  401. data/ext/boost/type_traits/is_member_function_pointer.hpp +2 -2
  402. data/ext/boost/type_traits/is_member_pointer.hpp +2 -2
  403. data/ext/boost/type_traits/is_pod.hpp +11 -3
  404. data/ext/boost/type_traits/is_pointer.hpp +2 -2
  405. data/ext/boost/type_traits/is_signed.hpp +8 -3
  406. data/ext/boost/type_traits/is_union.hpp +8 -0
  407. data/ext/boost/type_traits/is_unsigned.hpp +9 -4
  408. data/ext/boost/type_traits/is_volatile.hpp +5 -5
  409. data/ext/boost/type_traits/remove_cv.hpp +4 -3
  410. data/ext/boost/type_traits/remove_pointer.hpp +51 -2
  411. data/ext/boost/type_traits/remove_reference.hpp +2 -2
  412. data/ext/boost/type_traits/type_with_alignment.hpp +8 -2
  413. data/ext/boost/utility/declval.hpp +44 -0
  414. data/ext/boost/utility/detail/in_place_factory_prefix.hpp +36 -0
  415. data/ext/boost/utility/detail/in_place_factory_suffix.hpp +23 -0
  416. data/ext/boost/utility/detail/result_of_iterate.hpp +142 -0
  417. data/ext/boost/utility/in_place_factory.hpp +88 -0
  418. data/ext/boost/utility/result_of.hpp +103 -0
  419. data/ext/boost/utility/swap.hpp +55 -0
  420. data/ext/common/AnsiColorConstants.h +36 -0
  421. data/ext/common/ApplicationPool2/Common.h +87 -0
  422. data/ext/common/ApplicationPool2/ComponentInfo.h +53 -0
  423. data/ext/common/ApplicationPool2/Group.h +648 -0
  424. data/ext/common/ApplicationPool2/Implementation.cpp +580 -0
  425. data/ext/common/ApplicationPool2/Options.h +576 -0
  426. data/ext/common/ApplicationPool2/PipeWatcher.h +61 -0
  427. data/ext/common/ApplicationPool2/Pool.h +1181 -0
  428. data/ext/common/ApplicationPool2/Process.h +425 -0
  429. data/ext/common/ApplicationPool2/README.md +96 -0
  430. data/ext/common/ApplicationPool2/Session.h +158 -0
  431. data/ext/common/ApplicationPool2/Socket.h +246 -0
  432. data/ext/common/ApplicationPool2/Spawner.h +2212 -0
  433. data/ext/common/ApplicationPool2/SuperGroup.h +749 -0
  434. data/ext/common/BackgroundEventLoop.cpp +129 -0
  435. data/ext/common/BackgroundEventLoop.h +61 -0
  436. data/ext/common/Constants.h +3 -1
  437. data/ext/common/EventedBufferedInput.h +331 -0
  438. data/ext/common/EventedMessageServer.h +17 -34
  439. data/ext/common/EventedServer.h +2 -2
  440. data/ext/common/Exceptions.h +71 -19
  441. data/ext/common/FileDescriptor.h +8 -6
  442. data/ext/common/HttpConstants.h +167 -0
  443. data/ext/common/IniFile.h +24 -0
  444. data/ext/common/Logging.h +62 -849
  445. data/ext/common/MessageReadersWriters.h +19 -0
  446. data/ext/common/MessageServer.h +11 -14
  447. data/ext/common/MultiLibeio.cpp +198 -0
  448. data/ext/common/MultiLibeio.h +67 -0
  449. data/ext/common/ResourceLocator.h +24 -41
  450. data/ext/common/SafeLibev.h +186 -14
  451. data/ext/common/StaticString.h +23 -3
  452. data/ext/common/UnionStation.h +972 -0
  453. data/ext/common/Utils.cpp +168 -24
  454. data/ext/common/Utils.h +25 -3
  455. data/ext/common/Utils/CachedFileStat.hpp +4 -3
  456. data/ext/common/Utils/FileChangeChecker.h +2 -2
  457. data/ext/common/Utils/HashMap.h +50 -0
  458. data/ext/common/Utils/IOUtils.cpp +229 -68
  459. data/ext/common/Utils/IOUtils.h +134 -3
  460. data/ext/common/Utils/Lock.h +28 -0
  461. data/ext/common/Utils/MemoryBarrier.h +52 -0
  462. data/ext/common/Utils/PriorityQueue.h +54 -0
  463. data/ext/common/Utils/ProcessMetricsCollector.h +9 -11
  464. data/ext/common/Utils/ScopeGuard.h +50 -1
  465. data/ext/common/Utils/SmallVector.h +653 -0
  466. data/ext/common/Utils/StrIntUtils.cpp +26 -2
  467. data/ext/common/Utils/StrIntUtils.h +18 -2
  468. data/ext/common/Utils/StringMap.h +125 -8
  469. data/ext/common/Utils/Template.h +212 -0
  470. data/ext/common/Utils/fib.c +699 -0
  471. data/ext/common/Utils/fib.h +101 -0
  472. data/ext/common/Utils/fibpriv.h +67 -0
  473. data/ext/common/Utils/json-forwards.h +249 -0
  474. data/ext/common/Utils/json.h +1855 -0
  475. data/ext/common/Utils/jsoncpp.cpp +4230 -0
  476. data/ext/common/agents/Base.cpp +1126 -0
  477. data/ext/common/{AgentBase.h → agents/Base.h} +5 -1
  478. data/ext/common/agents/EnvPrinter.c +16 -0
  479. data/ext/common/agents/HelperAgent/AgentOptions.h +81 -0
  480. data/ext/common/{HelperAgent → agents/HelperAgent}/BacktracesServer.h +3 -2
  481. data/ext/common/agents/HelperAgent/FileBackedPipe.h +732 -0
  482. data/ext/common/agents/HelperAgent/Main.cpp +497 -0
  483. data/ext/common/agents/HelperAgent/RequestHandler.cpp +283 -0
  484. data/ext/common/agents/HelperAgent/RequestHandler.h +2139 -0
  485. data/ext/common/agents/HelperAgent/ScgiRequestParser.h +451 -0
  486. data/ext/common/{LoggingAgent → agents/LoggingAgent}/DataStoreId.h +1 -1
  487. data/ext/common/{LoggingAgent → agents/LoggingAgent}/FilterSupport.cpp +1 -1
  488. data/ext/common/{LoggingAgent → agents/LoggingAgent}/FilterSupport.h +0 -0
  489. data/ext/common/{LoggingAgent → agents/LoggingAgent}/LoggingServer.h +18 -16
  490. data/ext/common/{LoggingAgent → agents/LoggingAgent}/Main.cpp +15 -13
  491. data/ext/common/{LoggingAgent → agents/LoggingAgent}/RemoteSender.h +6 -6
  492. data/ext/common/agents/SpawnPreparer.cpp +127 -0
  493. data/ext/common/{Watchdog.cpp → agents/Watchdog/Main.cpp} +63 -25
  494. data/ext/libeio/Changes +72 -0
  495. data/ext/{google/COPYING → libeio/LICENSE} +17 -9
  496. data/ext/libeio/Makefile.am +15 -0
  497. data/ext/libeio/Makefile.in +694 -0
  498. data/ext/libeio/aclocal.m4 +9418 -0
  499. data/ext/libeio/autogen.sh +3 -0
  500. data/ext/libeio/config.guess +1501 -0
  501. data/ext/libeio/config.h.in +136 -0
  502. data/ext/libeio/config.sub +1705 -0
  503. data/ext/libeio/configure +14822 -0
  504. data/ext/libeio/configure.ac +22 -0
  505. data/ext/libeio/demo.c +194 -0
  506. data/ext/libeio/ecb.h +457 -0
  507. data/ext/libeio/eio.c +2816 -0
  508. data/ext/libeio/eio.h +411 -0
  509. data/ext/libeio/install-sh +520 -0
  510. data/ext/libeio/libeio.m4 +211 -0
  511. data/ext/libeio/ltmain.sh +9636 -0
  512. data/ext/libeio/missing +376 -0
  513. data/ext/libeio/xthread.h +166 -0
  514. data/ext/libev/Changes +125 -7
  515. data/ext/libev/Makefile.am +5 -3
  516. data/ext/libev/Makefile.in +209 -120
  517. data/ext/libev/aclocal.m4 +6027 -4619
  518. data/ext/libev/autogen.sh +1 -4
  519. data/ext/libev/config.h.in +11 -7
  520. data/ext/libev/configure +7312 -14993
  521. data/ext/libev/configure.ac +12 -5
  522. data/ext/libev/depcomp +630 -0
  523. data/ext/libev/ev++.h +48 -32
  524. data/ext/libev/ev.c +1173 -391
  525. data/ext/libev/ev.h +315 -181
  526. data/ext/libev/ev_epoll.c +66 -15
  527. data/ext/libev/ev_kqueue.c +20 -18
  528. data/ext/libev/ev_poll.c +27 -23
  529. data/ext/libev/ev_port.c +39 -19
  530. data/ext/libev/ev_select.c +23 -17
  531. data/ext/libev/ev_vars.h +25 -8
  532. data/ext/libev/ev_win32.c +6 -6
  533. data/ext/libev/ev_wrap.h +22 -2
  534. data/ext/libev/event.c +18 -17
  535. data/ext/libev/event.h +16 -4
  536. data/ext/libev/libev.m4 +10 -6
  537. data/ext/libev/ltmain.sh +7353 -5811
  538. data/ext/nginx/Configuration.c +74 -42
  539. data/ext/nginx/Configuration.h +3 -5
  540. data/ext/nginx/ContentHandler.c +26 -83
  541. data/ext/nginx/ContentHandler.h +1 -1
  542. data/ext/nginx/config +13 -9
  543. data/ext/nginx/ngx_http_passenger_module.c +3 -7
  544. data/ext/oxt/detail/backtrace_enabled.hpp +5 -102
  545. data/ext/oxt/detail/context.hpp +90 -0
  546. data/ext/oxt/detail/spin_lock_darwin.hpp +4 -0
  547. data/ext/oxt/detail/spin_lock_gcc_x86.hpp +4 -0
  548. data/ext/oxt/detail/spin_lock_pthreads.hpp +14 -0
  549. data/ext/oxt/detail/tracable_exception_enabled.hpp +2 -2
  550. data/ext/oxt/dynamic_thread_group.hpp +27 -1
  551. data/ext/oxt/implementation.cpp +415 -0
  552. data/ext/oxt/{thread.cpp → initialize.hpp} +13 -6
  553. data/ext/oxt/macros.hpp +32 -1
  554. data/ext/oxt/spin_lock.hpp +6 -11
  555. data/ext/oxt/system_calls.cpp +204 -16
  556. data/ext/oxt/system_calls.hpp +85 -45
  557. data/ext/oxt/thread.hpp +13 -117
  558. data/ext/ruby/passenger_native_support.c +82 -237
  559. data/helper-scripts/backtrace-sanitizer.rb +114 -0
  560. data/helper-scripts/classic-rails-loader.rb +135 -0
  561. data/helper-scripts/classic-rails-preloader.rb +161 -0
  562. data/helper-scripts/node-loader.js +314 -0
  563. data/helper-scripts/rack-loader.rb +104 -0
  564. data/helper-scripts/rack-preloader.rb +132 -0
  565. data/helper-scripts/wsgi-loader.py +231 -0
  566. data/helper-scripts/wsgi-preloader.py +1 -0
  567. data/lib/phusion_passenger.rb +159 -61
  568. data/lib/phusion_passenger/abstract_installer.rb +182 -87
  569. data/lib/phusion_passenger/admin_tools/server_instance.rb +25 -19
  570. data/lib/phusion_passenger/analytics_logger.rb +5 -4
  571. data/lib/phusion_passenger/classic_rails/{request_handler.rb → thread_handler_extension.rb} +4 -40
  572. data/lib/phusion_passenger/classic_rails_extensions/init.rb +5 -3
  573. data/lib/phusion_passenger/common_library.rb +441 -0
  574. data/lib/phusion_passenger/console_text_template.rb +4 -16
  575. data/lib/phusion_passenger/constants.rb +1 -8
  576. data/lib/phusion_passenger/debug_logging.rb +5 -2
  577. data/lib/phusion_passenger/dependencies.rb +51 -13
  578. data/lib/phusion_passenger/loader_shared_helpers.rb +318 -0
  579. data/lib/phusion_passenger/message_channel.rb +3 -47
  580. data/lib/phusion_passenger/message_client.rb +2 -2
  581. data/lib/phusion_passenger/native_support.rb +36 -15
  582. data/lib/phusion_passenger/packaging.rb +8 -11
  583. data/lib/phusion_passenger/platform_info.rb +25 -17
  584. data/lib/phusion_passenger/platform_info/apache.rb +10 -7
  585. data/lib/phusion_passenger/platform_info/binary_compatibility.rb +10 -30
  586. data/lib/phusion_passenger/platform_info/compiler.rb +93 -34
  587. data/lib/phusion_passenger/platform_info/ruby.rb +37 -97
  588. data/lib/phusion_passenger/preloader_shared_helpers.rb +121 -0
  589. data/lib/phusion_passenger/public_api.rb +1 -4
  590. data/lib/phusion_passenger/rack/{request_handler.rb → thread_handler_extension.rb} +14 -63
  591. data/lib/phusion_passenger/rails3_extensions/init.rb +9 -8
  592. data/lib/phusion_passenger/request_handler.rb +500 -0
  593. data/lib/phusion_passenger/request_handler/thread_handler.rb +360 -0
  594. data/lib/phusion_passenger/ruby_core_enhancements.rb +142 -0
  595. data/lib/phusion_passenger/standalone/command.rb +36 -15
  596. data/lib/phusion_passenger/standalone/package_runtime_command.rb +16 -8
  597. data/lib/phusion_passenger/standalone/runtime_installer.rb +169 -72
  598. data/lib/phusion_passenger/standalone/start_command.rb +44 -39
  599. data/lib/phusion_passenger/standalone/utils.rb +5 -5
  600. data/lib/phusion_passenger/utils.rb +35 -914
  601. data/lib/phusion_passenger/utils/ansi_colors.rb +59 -0
  602. data/lib/phusion_passenger/utils/file_system_watcher.rb +1 -1
  603. data/lib/phusion_passenger/utils/robust_interruption.rb +134 -0
  604. data/lib/phusion_passenger/utils/tee_input.rb +174 -0
  605. data/lib/phusion_passenger/utils/tmpio.rb +33 -0
  606. data/lib/phusion_passenger/utils/unseekable_socket.rb +6 -0
  607. data/resources/mime.types +5 -1
  608. data/{lib/phusion_passenger/templates → resources}/standalone_default_root/index.html +0 -0
  609. data/{lib/phusion_passenger → resources}/templates/apache2/apache_must_be_compiled_with_compatible_mpm.txt.erb +0 -0
  610. data/{lib/phusion_passenger → resources}/templates/apache2/config_snippets.txt.erb +0 -0
  611. data/{lib/phusion_passenger → resources}/templates/apache2/deployment_example.txt.erb +0 -0
  612. data/{lib/phusion_passenger → resources}/templates/apache2/no_write_permission_to_passenger_root.txt.erb +0 -0
  613. data/{lib/phusion_passenger → resources}/templates/apache2/possible_solutions_for_compilation_and_installation_problems.txt.erb +0 -0
  614. data/{lib/phusion_passenger → resources}/templates/apache2/run_installer_as_root.txt.erb +0 -0
  615. data/{lib/phusion_passenger → resources}/templates/apache2/welcome.txt.erb +0 -0
  616. data/{lib/phusion_passenger → resources}/templates/error_layout.css +6 -0
  617. data/resources/templates/error_layout.html.template +89 -0
  618. data/resources/templates/general_error.html.template +1 -0
  619. data/resources/templates/general_error_with_html.html.template +1 -0
  620. data/{lib/phusion_passenger → resources}/templates/nginx/ask_for_extra_configure_flags.txt.erb +0 -0
  621. data/{lib/phusion_passenger → resources}/templates/nginx/cannot_write_to_dir.txt.erb +0 -0
  622. data/{lib/phusion_passenger → resources}/templates/nginx/config_snippets.txt.erb +0 -0
  623. data/{lib/phusion_passenger → resources}/templates/nginx/config_snippets_inserted.txt.erb +0 -0
  624. data/{lib/phusion_passenger → resources}/templates/nginx/confirm_extra_configure_flags.txt.erb +0 -0
  625. data/{lib/phusion_passenger → resources}/templates/nginx/deployment_example.txt.erb +0 -0
  626. data/resources/templates/nginx/not_available_when_natively_packaged.txt.erb +8 -0
  627. data/{lib/phusion_passenger → resources}/templates/nginx/pcre_could_not_be_downloaded.txt.erb +0 -0
  628. data/{lib/phusion_passenger → resources}/templates/nginx/pcre_could_not_be_extracted.txt.erb +0 -0
  629. data/{lib/phusion_passenger → resources}/templates/nginx/possible_solutions_for_compilation_and_installation_problems.txt.erb +0 -0
  630. data/{lib/phusion_passenger → resources}/templates/nginx/possible_solutions_for_download_and_extraction_problems.txt.erb +0 -0
  631. data/{lib/phusion_passenger → resources}/templates/nginx/query_download_and_install.txt.erb +0 -0
  632. data/{lib/phusion_passenger → resources}/templates/nginx/run_installer_as_root.txt.erb +0 -0
  633. data/{lib/phusion_passenger → resources}/templates/nginx/welcome.txt.erb +0 -0
  634. data/{lib/phusion_passenger → resources}/templates/standalone/cannot_write_to_dir.txt.erb +0 -0
  635. data/{lib/phusion_passenger → resources}/templates/standalone/config.erb +26 -5
  636. data/{lib/phusion_passenger → resources}/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +0 -0
  637. data/{lib/phusion_passenger → resources}/templates/standalone/run_installer_as_root.txt.erb +0 -0
  638. data/{lib/phusion_passenger → resources}/templates/standalone/welcome.txt.erb +0 -0
  639. data/resources/templates/undisclosed_error.html.template +25 -0
  640. data/test/config.json.example +42 -0
  641. data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +86 -0
  642. data/test/cxx/ApplicationPool2/OptionsTest.cpp +44 -0
  643. data/test/cxx/ApplicationPool2/PoolTest.cpp +1234 -0
  644. data/test/cxx/ApplicationPool2/ProcessTest.cpp +131 -0
  645. data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +229 -0
  646. data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +744 -0
  647. data/test/cxx/BufferedIOTest.cpp +7 -7
  648. data/test/cxx/CxxTestMain.cpp +65 -2
  649. data/test/cxx/FileBackedPipeTest.cpp +626 -0
  650. data/test/cxx/FileChangeCheckerTest.cpp +20 -18
  651. data/test/cxx/FilterSupportTest.cpp +5 -5
  652. data/test/cxx/IOUtilsTest.cpp +11 -4
  653. data/test/cxx/MessageReadersWritersTest.cpp +1 -1
  654. data/test/cxx/MessageServerTest.cpp +31 -30
  655. data/test/cxx/RequestHandlerTest.cpp +777 -0
  656. data/test/cxx/ScgiRequestParserTest.cpp +36 -16
  657. data/test/cxx/ServerInstanceDirTest.cpp +1 -1
  658. data/test/cxx/StringMapTest.cpp +61 -0
  659. data/test/cxx/TemplateTest.cpp +118 -0
  660. data/test/cxx/TestSupport.cpp +25 -68
  661. data/test/cxx/TestSupport.h +81 -41
  662. data/test/cxx/{LoggingTest.cpp → UnionStationTest.cpp} +79 -74
  663. data/test/cxx/UtilsTest.cpp +59 -5
  664. data/test/integration_tests/apache2_tests.rb +2 -2
  665. data/test/integration_tests/nginx_tests.rb +1 -1
  666. data/test/integration_tests/spec_helper.rb +7 -5
  667. data/test/oxt/oxt_test_main.cpp +2 -0
  668. data/test/oxt/syscall_interruption_test.cpp +1 -0
  669. data/test/ruby/classic_rails/loader_spec.rb +48 -0
  670. data/test/ruby/classic_rails/preloader_spec.rb +54 -0
  671. data/test/ruby/rack/loader_spec.rb +62 -0
  672. data/test/ruby/rack/preloader_spec.rb +74 -0
  673. data/test/ruby/{abstract_request_handler_spec.rb → request_handler_spec.rb} +31 -68
  674. data/test/ruby/shared/loader_spec.rb +241 -0
  675. data/test/ruby/shared/rails/analytics_logging_extensions_spec.rb +141 -182
  676. data/test/ruby/shared/ruby_loader_spec.rb +55 -0
  677. data/test/ruby/spec_helper.rb +8 -53
  678. data/test/ruby/utils/file_system_watcher_spec.rb +9 -1
  679. data/test/ruby/utils_spec.rb +10 -683
  680. data/test/stub/rack/config.ru +28 -3
  681. data/test/stub/rack/start.rb +47 -0
  682. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/Rakefile +0 -0
  683. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/app/controllers/application_controller.rb +0 -2
  684. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/app/controllers/bar_controller_1.rb +0 -0
  685. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/app/controllers/bar_controller_2.rb +0 -0
  686. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/app/controllers/foo_controller.rb +0 -0
  687. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/app/helpers/application_helper.rb +0 -0
  688. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/boot.rb +0 -0
  689. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/database.yml +3 -3
  690. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/environment.rb +5 -2
  691. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/environments/development.rb +0 -0
  692. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/environments/production.rb +0 -0
  693. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/environments/staging.rb +0 -0
  694. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/initializers/inflections.rb +0 -0
  695. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/initializers/mime_types.rb +0 -0
  696. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/routes.rb +1 -0
  697. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/about +0 -0
  698. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/console +0 -0
  699. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/dbconsole +0 -0
  700. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/destroy +0 -0
  701. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/generate +0 -0
  702. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/performance/benchmarker +0 -0
  703. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/performance/profiler +0 -0
  704. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/performance/request +0 -0
  705. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/plugin +0 -0
  706. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/process/inspector +0 -0
  707. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/process/reaper +0 -0
  708. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/process/spawner +0 -0
  709. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/runner +0 -0
  710. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/server +0 -0
  711. data/test/stub/{rails_apps/3.0/empty → rails3.0}/Gemfile +0 -0
  712. data/test/stub/rails3.0/Gemfile.lock +80 -0
  713. data/test/stub/{rails_apps/3.0/empty → rails3.0}/Rakefile +0 -0
  714. data/test/stub/{rails_apps/3.0/empty → rails3.0}/app/controllers/application_controller.rb +0 -0
  715. data/test/stub/{rails_apps/3.0/empty → rails3.0}/app/helpers/application_helper.rb +0 -0
  716. data/test/stub/{rails_apps/3.0/empty → rails3.0}/app/views/layouts/application.html.erb +0 -0
  717. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config.ru +0 -0
  718. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/application.rb +0 -0
  719. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/boot.rb +0 -0
  720. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/database.yml +0 -0
  721. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/environment.rb +0 -0
  722. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/environments/development.rb +0 -0
  723. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/environments/production.rb +0 -0
  724. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/environments/test.rb +0 -0
  725. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/backtrace_silencers.rb +0 -0
  726. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/inflections.rb +0 -0
  727. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/mime_types.rb +0 -0
  728. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/passenger.rb +0 -0
  729. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/secret_token.rb +0 -0
  730. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/session_store.rb +0 -0
  731. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/locales/en.yml +0 -0
  732. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/routes.rb +0 -0
  733. data/test/stub/{rails_apps/3.0/empty → rails3.0}/db/seeds.rb +0 -0
  734. data/test/stub/{rails_apps/3.0/empty → rails3.0}/doc/README_FOR_APP +0 -0
  735. data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/404.html +0 -0
  736. data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/422.html +0 -0
  737. data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/500.html +0 -0
  738. data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/favicon.ico +0 -0
  739. data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/index.html +0 -0
  740. data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/robots.txt +0 -0
  741. data/test/stub/{rails_apps/3.0/empty → rails3.0}/script/rails +0 -0
  742. data/test/stub/{rails_apps/3.0/empty → rails3.0}/test/performance/browsing_test.rb +0 -0
  743. data/test/stub/{rails_apps/3.0/empty → rails3.0}/test/test_helper.rb +0 -0
  744. data/test/stub/start_error.pl +24 -0
  745. data/test/stub/wsgi/passenger_wsgi.py +71 -3
  746. data/test/support/apache2_controller.rb +2 -2
  747. data/test/support/placebo-preloader.rb +88 -0
  748. data/test/support/test_helper.rb +1 -14
  749. data/test/tut/tut.h +11 -4
  750. metadata +590 -326
  751. data.tar.gz.asc +0 -12
  752. data/PACKAGING.TXT +0 -25
  753. data/build/config.rb +0 -46
  754. data/ext/apache2/HelperAgent.cpp +0 -364
  755. data/ext/boost/call_traits.hpp +0 -24
  756. data/ext/boost/detail/call_traits.hpp +0 -164
  757. data/ext/common/AbstractSpawnManager.h +0 -110
  758. data/ext/common/AgentBase.cpp +0 -432
  759. data/ext/common/ApplicationPool/Client.h +0 -788
  760. data/ext/common/ApplicationPool/Interface.h +0 -295
  761. data/ext/common/ApplicationPool/Pool.h +0 -1327
  762. data/ext/common/ApplicationPool/Server.h +0 -479
  763. data/ext/common/MessageChannel.h +0 -494
  764. data/ext/common/PoolOptions.h +0 -518
  765. data/ext/common/Process.h +0 -253
  766. data/ext/common/Session.h +0 -436
  767. data/ext/common/SpawnManager.h +0 -611
  768. data/ext/google/ChangeLog +0 -167
  769. data/ext/google/dense_hash_map +0 -310
  770. data/ext/google/dense_hash_set +0 -287
  771. data/ext/google/sparse_hash_map +0 -294
  772. data/ext/google/sparse_hash_set +0 -275
  773. data/ext/google/sparsehash/densehashtable.h +0 -1062
  774. data/ext/google/sparsehash/sparseconfig.h +0 -55
  775. data/ext/google/sparsehash/sparsehashtable.h +0 -1015
  776. data/ext/google/sparsetable +0 -1468
  777. data/ext/google/type_traits.h +0 -250
  778. data/ext/nginx/HelperAgent.cpp +0 -1355
  779. data/ext/nginx/ScgiRequestParser.h +0 -375
  780. data/ext/oxt/backtrace.cpp +0 -185
  781. data/ext/oxt/tracable_exception.cpp +0 -89
  782. data/helper-scripts/passenger-spawn-server +0 -106
  783. data/lib/phusion_passenger/abstract_request_handler.rb +0 -766
  784. data/lib/phusion_passenger/abstract_server.rb +0 -372
  785. data/lib/phusion_passenger/abstract_server_collection.rb +0 -335
  786. data/lib/phusion_passenger/app_process.rb +0 -174
  787. data/lib/phusion_passenger/classic_rails/application_spawner.rb +0 -344
  788. data/lib/phusion_passenger/classic_rails/framework_spawner.rb +0 -311
  789. data/lib/phusion_passenger/exceptions.rb +0 -103
  790. data/lib/phusion_passenger/html_template.rb +0 -107
  791. data/lib/phusion_passenger/rack/application_spawner.rb +0 -231
  792. data/lib/phusion_passenger/spawn_manager.rb +0 -359
  793. data/lib/phusion_passenger/templates/app_exited_during_initialization.html.erb +0 -38
  794. data/lib/phusion_passenger/templates/app_init_error.html.erb +0 -64
  795. data/lib/phusion_passenger/templates/database_error.html.erb +0 -66
  796. data/lib/phusion_passenger/templates/error_layout.html.erb +0 -39
  797. data/lib/phusion_passenger/templates/framework_init_error.html.erb +0 -39
  798. data/lib/phusion_passenger/templates/general_error.html.erb +0 -22
  799. data/lib/phusion_passenger/templates/load_error.html.erb +0 -46
  800. data/lib/phusion_passenger/templates/version_not_found.html.erb +0 -34
  801. data/lib/phusion_passenger/utils/rewindable_input.rb +0 -125
  802. data/lib/phusion_passenger/wsgi/application_spawner.rb +0 -108
  803. data/test/config.yml.example +0 -41
  804. data/test/cxx/ApplicationPool_PoolTest.cpp +0 -33
  805. data/test/cxx/ApplicationPool_PoolTestCases.cpp +0 -1029
  806. data/test/cxx/ApplicationPool_ServerTest.cpp +0 -308
  807. data/test/cxx/ApplicationPool_Server_PoolTest.cpp +0 -80
  808. data/test/cxx/MessageChannelTest.cpp +0 -557
  809. data/test/cxx/PoolOptionsTest.cpp +0 -116
  810. data/test/cxx/SpawnManagerTest.cpp +0 -161
  811. data/test/ruby/abstract_server_collection_spec.rb +0 -247
  812. data/test/ruby/abstract_server_spec.rb +0 -61
  813. data/test/ruby/app_process_spec.rb +0 -43
  814. data/test/ruby/classic_rails/application_spawner_spec.rb +0 -89
  815. data/test/ruby/classic_rails/framework_spawner_spec.rb +0 -92
  816. data/test/ruby/rack/application_spawner_spec.rb +0 -116
  817. data/test/ruby/shared/abstract_server_spec.rb +0 -23
  818. data/test/ruby/shared/spawners/classic_rails/framework_spawner_spec.rb +0 -38
  819. data/test/ruby/shared/spawners/classic_rails/lack_of_rails_gem_version_spec.rb +0 -19
  820. data/test/ruby/shared/spawners/classic_rails/spawner_spec.rb +0 -15
  821. data/test/ruby/shared/spawners/non_preloading_spawner_spec.rb +0 -27
  822. data/test/ruby/shared/spawners/preloading_spawner_spec.rb +0 -29
  823. data/test/ruby/shared/spawners/reload_all_spec.rb +0 -36
  824. data/test/ruby/shared/spawners/reload_single_spec.rb +0 -52
  825. data/test/ruby/shared/spawners/spawn_server_spec.rb +0 -28
  826. data/test/ruby/shared/spawners/spawner_spec.rb +0 -273
  827. data/test/ruby/shared/utils/pseudo_io_spec.rb +0 -60
  828. data/test/ruby/spawn_manager_spec.rb +0 -134
  829. data/test/ruby/wsgi/application_spawner_spec.rb +0 -50
  830. data/test/stub/message_channel.rb +0 -11
  831. data/test/stub/message_channel_2.rb +0 -12
  832. data/test/stub/message_channel_3.rb +0 -19
  833. data/test/stub/rails_apps/3.0/empty/Gemfile.lock +0 -73
  834. data/test/stub/spawn_server.rb +0 -22
  835. metadata.gz.asc +0 -12
@@ -18,6 +18,51 @@
18
18
 
19
19
  1.2. Where to get support => where-to-get-support-2s9na5
20
20
 
21
+ # fuzzy
22
+ 10. Appendix A: About this document => appendix-a-about-this-document-zfvixm
23
+
24
+ # fuzzy
25
+ 11. Appendix B: Terminology => appendix-b-terminology-wzv5ro
26
+
27
+ # fuzzy
28
+ 11.1. Application root => application-root-1fd6bqv
29
+
30
+ # fuzzy
31
+ 11.2. Idle process => idle-process-13byfw9
32
+
33
+ # fuzzy
34
+ 11.3. Inactive process => inactive-process-1d2h0po
35
+
36
+ # fuzzy
37
+ 12. Appendix C: Spawning methods explained => appendix-c-spawning-methods-explained-tcp8e6
38
+
39
+ # fuzzy
40
+ 12.1. The most straightforward and traditional way: direct spawning => the-most-straightforward-and-traditional-way-conservative-spawning-civ29z
41
+
42
+ # fuzzy
43
+ 12.2. The smart spawning method => the-smart-spawning-method-7nhgtj
44
+
45
+ # fuzzy
46
+ 12.2.1. How it works => how-it-works-f9umga
47
+
48
+ # fuzzy
49
+ 12.2.2. Summary of benefits => summary-of-benefits-qovyvk
50
+
51
+ # fuzzy
52
+ 12.3. Smart spawning gotcha #1: unintentional file descriptor sharing => smart-spawning-gotcha-1-unintentional-file-descriptor-sharing-cebw6q
53
+
54
+ # fuzzy
55
+ 12.3.1. Example 1: Memcached connection sharing (harmful) => example-1-memcached-connection-sharing-harmful--1wfs3ad
56
+
57
+ # fuzzy
58
+ 12.3.2. Example 2: Log file sharing (not harmful) => example-2-log-file-sharing-not-harmful--ox4yfy
59
+
60
+ # fuzzy
61
+ 12.4. Smart spawning gotcha #2: the need to revive threads => smart-spawning-gotcha-2-the-need-to-revive-threads-1ey176o
62
+
63
+ # fuzzy
64
+ 12.5. Smart spawning gotcha #3: code load order => smart-spawning-gotcha-3-code-load-order-12ydsn8
65
+
21
66
  2. Installing Phusion Passenger => installing-phusion-passenger-hn03ac
22
67
 
23
68
  2.1. Overview => overview-kvhzi4
@@ -74,163 +119,206 @@
74
119
 
75
120
  4.5.6. Sinatra => sinatra-a7u9ag
76
121
 
77
- 5. Configuring Phusion Passenger => configuring-phusion-passenger-1g1svey
78
-
79
- 5.1. passenger_root <directory> => passenger-root-directory--bqvhhz
80
-
81
- 5.2. passenger_ruby <filename> => passenger-ruby-filename--1gnok5k
82
-
83
- 5.3. passenger_spawn_method <string> => passenger-spawn-method-string--1sc6njl
84
-
85
- 5.4. passenger_rolling_restarts <on|off> => passenger-rolling-restarts
86
-
87
- 5.5. passenger_resist_deployment_errors <on|off> => passenger-resist-deployment-errors-on-off--k9yf1
88
-
89
- 5.6. Important deployment options => important-deployment-options-av567
90
-
91
- 5.6.1. passenger_enabled <on|off> => passenger-enabled-on-off--1rpb2t7
92
-
93
- 5.6.2. passenger_base_uri <uri> => passenger-base-uri-uri--1xtuo50
94
-
95
- 5.7. Connection handling options => connection-handling-options-8jgq90
96
-
97
- 5.7.1. passenger_use_global_queue <on|off> => passenger-use-global-queue-on-off--14h9n22
98
-
99
- 5.7.2. passenger_ignore_client_abort <on|off> => passenger-ignore-client-abort
122
+ 5. Deploying a WSGI (Python) application => deploying-a-wsgi-python-application-1or2efo
100
123
 
101
- 5.7.3. passenger_set_cgi_param <CGI environment name> <value> => passenger-set-cgi-param-cgi-environment-name-value--rx9gc0
124
+ 5.1. Tutorial/example: writing and deploying a Hello World WSGI application => tutorial-example-writing-and-deploying-a-hello-world-wsgi-application-k5ron2
102
125
 
103
- 5.7.4. passenger_pass_header <header name> => passenger-pass-header-header-name--1cg31je
126
+ 5.2. Deploying to a virtual host’s root => deploying-to-a-virtual-host-s-root-1chcpbj
104
127
 
105
- 5.7.5. passenger_buffer_response <on|off> => passenger-buffer-response
128
+ 5.3. Redeploying (restarting the WSGI application) => redeploying-restarting-the-wsgi-application--10zdh2k
106
129
 
107
- 5.7.6. passenger_buffer_size => passenger-buffer-size-1jfkq87
130
+ # fuzzy
131
+ 6. Configuring Phusion Passenger => configuring-phusion-passenger-1g1svey
108
132
 
109
- 5.7.7. passenger_buffers => passenger-busy-buffers
133
+ # fuzzy
134
+ 6.1. passenger_root <directory> => passenger-root-directory--bqvhhz
110
135
 
111
- 5.7.8. passenger_busy_buffer_size => passenger-busy-buffer-size-124sj61
136
+ # fuzzy
137
+ 6.10. Logging and debugging options => logging-and-debugging-options-14e91ni
112
138
 
113
- 5.8. Security options => security-options-1bv93g4
139
+ # fuzzy
140
+ 6.10.1. passenger_log_level <integer> => passenger-log-level-integer--17snhon
114
141
 
115
- 5.8.1. passenger_user_switching <on|off> => passenger-user-switching-on-off--1p37u3l
142
+ # fuzzy
143
+ 6.10.2. passenger_debug_log_file <filename> => passenger-debug-log-file-filename--21ubaj
116
144
 
117
- 5.8.2. passenger_user <username> => passenger-user-username--b06ur7
145
+ # fuzzy
146
+ 6.10.3. passenger_debugger <on|off> => passenger-debugger-on-off--1wkuq85
118
147
 
119
- 5.8.3. passenger_group <group name> => passenger-user-group-name--1fco4j7
148
+ # fuzzy
149
+ 6.11. Ruby on Rails-specific options => ruby-on-rails-specific-options-12vfokt
120
150
 
121
- 5.8.4. passenger_default_user <username> => passenger-default-user-username--1h6cdmf
151
+ # fuzzy
152
+ 6.11.1. rails_env <string> => rails-env-string--jlh7v9
122
153
 
123
- 5.8.5. Passenger_default_group <group name> => passenger-default-group-group-name--1qxn2qa
154
+ # fuzzy
155
+ 6.12. Rack and Rails >= 3 specific options => rack-specific-options-13yvdxs
124
156
 
125
- 5.8.6. passenger_friendly_error_pages <on|off> => passenger-friendly-error-pages-on-off--1ti1a0e
157
+ # fuzzy
158
+ 6.12.1. rack_env <string> => rack-env-string--tqmrt0
126
159
 
127
- 5.9. Resource control and optimization options => resource-control-and-optimization-options-xd7evs
160
+ # fuzzy
161
+ 6.13. Deprecated options => deprecated-options-1dtzo0g
128
162
 
129
- 5.9.1. passenger_max_pool_size <integer> => passenger-max-pool-size-integer--3jzefs
163
+ # fuzzy
164
+ 6.13.1. rails_spawn_method => rails-spawn-method-17vdnpt
130
165
 
131
- 5.9.2. passenger_min_instances <integer> => passenger-min-instances-integer--uclykt
166
+ # fuzzy
167
+ 6.2. passenger_ruby <filename> => passenger-ruby-filename--1gnok5k
132
168
 
133
- 5.9.3. passenger_max_instances <integer> => passenger-max-instances
169
+ # fuzzy
170
+ 6.3. passenger_spawn_method <string> => passenger-spawn-method-string--1sc6njl
134
171
 
135
- 5.9.4. passenger_max_instances_per_app <integer> => passenger-max-instances-per-app-integer--1xhbbne
172
+ # fuzzy
173
+ 6.4. passenger_rolling_restarts <on|off> => passenger-rolling-restarts
136
174
 
137
- 5.9.5. passenger_pool_idle_time <integer> => passenger-pool-idle-time-integer--xcw65o
175
+ # fuzzy
176
+ 6.5. passenger_resist_deployment_errors <on|off> => passenger-resist-deployment-errors-on-off--k9yf1
138
177
 
139
- 5.9.6. passenger_max_requests <integer> => passenger-max-requests
178
+ # fuzzy
179
+ 6.6. Important deployment options => important-deployment-options-av567
140
180
 
141
- 5.9.7. passenger_max_request_time <seconds> => passenger-max-request-time-seconds--1qod9kg
181
+ # fuzzy
182
+ 6.6.1. passenger_enabled <on|off> => passenger-enabled-on-off--1rpb2t7
142
183
 
143
- 5.9.8. passenger_memory_limit <integer> => passenger-memory-limit-integer--1ry7dwx
184
+ # fuzzy
185
+ 6.6.2. passenger_base_uri <uri> => passenger-base-uri-uri--1xtuo50
144
186
 
145
- 5.9.9. passenger_pre_start <url> => passenger-pre-start-url--1f2phk7
187
+ # fuzzy
188
+ 6.7. Connection handling options => connection-handling-options-8jgq90
146
189
 
147
- 5.10. Logging and debugging options => logging-and-debugging-options-14e91ni
190
+ # fuzzy
191
+ 6.7.1. passenger_ignore_client_abort <on|off> => passenger-ignore-client-abort
148
192
 
149
- 5.10.1. passenger_log_level <integer> => passenger-log-level-integer--17snhon
193
+ # fuzzy
194
+ 6.7.2. passenger_set_cgi_param <CGI environment name> <value> => passenger-set-cgi-param-cgi-environment-name-value--rx9gc0
150
195
 
151
- 5.10.2. passenger_debug_log_file <filename> => passenger-debug-log-file-filename--21ubaj
196
+ # fuzzy
197
+ 6.7.3. passenger_pass_header <header name> => passenger-pass-header-header-name--1cg31je
152
198
 
153
- 5.10.3. passenger_debugger <on|off> => passenger-debugger-on-off--1wkuq85
199
+ # fuzzy
200
+ 6.7.4. passenger_buffer_response <on|off> => passenger-buffer-response
154
201
 
155
- 5.11. Ruby on Rails-specific options => ruby-on-rails-specific-options-12vfokt
202
+ # fuzzy
203
+ 6.7.5. passenger_buffer_size => passenger-buffer-size-1jfkq87
156
204
 
157
- 5.11.1. rails_env <string> => rails-env-string--jlh7v9
205
+ # fuzzy
206
+ 6.7.6. passenger_buffers => passenger-busy-buffers
158
207
 
159
- 5.11.2. rails_framework_spawner_idle_time <integer> => rails-framework-spawner-idle-time-integer--q5ljd5
208
+ # fuzzy
209
+ 6.7.7. passenger_busy_buffer_size => passenger-busy-buffer-size-124sj61
160
210
 
161
- 5.11.3. rails_app_spawner_idle_time <integer> => rails-app-spawner-idle-time-integer--1xjqe4b
211
+ # fuzzy
212
+ 6.8. Security options => security-options-1bv93g4
162
213
 
163
- 5.12. Rack and Rails >= 3 specific options => rack-specific-options-13yvdxs
214
+ # fuzzy
215
+ 6.8.1. passenger_user_switching <on|off> => passenger-user-switching-on-off--1p37u3l
164
216
 
165
- 5.12.1. rack_env <string> => rack-env-string--tqmrt0
217
+ # fuzzy
218
+ 6.8.2. passenger_user <username> => passenger-user-username--b06ur7
166
219
 
167
- 5.13. Deprecated options => deprecated-options-1dtzo0g
220
+ # fuzzy
221
+ 6.8.3. passenger_group <group name> => passenger-user-group-name--1fco4j7
168
222
 
169
- 5.13.1. rails_spawn_method => rails-spawn-method-17vdnpt
223
+ # fuzzy
224
+ 6.8.4. passenger_default_user <username> => passenger-default-user-username--1h6cdmf
170
225
 
171
- 6. Analysis and system maintenance => analysis-and-system-maintenance-1nnlnj8
226
+ # fuzzy
227
+ 6.8.5. Passenger_default_group <group name> => passenger-default-group-group-name--1qxn2qa
172
228
 
173
- 6.1. Inspecting memory usage => inspecting-memory-usage-1k6y8v0
229
+ # fuzzy
230
+ 6.8.6. passenger_friendly_error_pages <on|off> => passenger-friendly-error-pages-on-off--1ti1a0e
174
231
 
175
- 6.2. Inspecting Phusion Passenger’s internal status => inspecting-phusion-passenger-s-internal-status-v36wbc
232
+ # fuzzy
233
+ 6.9. Resource control and optimization options => resource-control-and-optimization-options-xd7evs
176
234
 
177
- 6.3. Debugging frozen applications => debugging-frozen-applications-qoctl8
235
+ # fuzzy
236
+ 6.9.1. passenger_max_pool_size <integer> => passenger-max-pool-size-integer--3jzefs
178
237
 
179
- 6.4. Accessing individual application processes => accessing-individual-application-processes-1qe4fqk
238
+ # fuzzy
239
+ 6.9.10. passenger_max_request_time <seconds> => passenger-pre-start-url--1f2phk7
180
240
 
181
- 6.5. Attaching an IRB console to an application process => attaching-an-irb-console-to-an-application-process-d36enw
241
+ # fuzzy
242
+ 6.9.11. passenger_memory_limit <integer> => passenger-memory-limit-integer--1ry7dwx
182
243
 
183
- 7. Tips => tips-n4c22d
244
+ # fuzzy
245
+ 6.9.12. passenger_pre_start <url> => passenger-pre-start-url--npldeb
184
246
 
185
- 7.1. User switching (security) => user-switching-security--zmsy9o
247
+ # fuzzy
248
+ 6.9.2. passenger_min_instances <integer> => passenger-min-instances-integer--uclykt
186
249
 
187
- 7.2. Reducing memory consumption of Ruby on Rails applications by 33% => reducing-memory-consumption-of-ruby-on-rails-applications-by-33--1o3z66q
250
+ # fuzzy
251
+ 6.9.3. passenger_max_instances <integer> => passenger-max-instances
188
252
 
189
- 7.3. Capistrano recipe => capistrano-recipe-pfn4qu
253
+ # fuzzy
254
+ 6.9.4. passenger_max_instances_per_app <integer> => passenger-max-instances-per-app-integer--1xhbbne
190
255
 
191
- 7.4. Bundler support => bundler-support-19v1h43
256
+ # fuzzy
257
+ 6.9.5. passenger_pool_idle_time <integer> => passenger-pool-idle-time-integer--xcw65o
192
258
 
193
- 7.5. Moving Phusion Passenger to a different directory => moving-phusion-passenger-to-a-different-directory-1hel5cp
259
+ # fuzzy
260
+ 6.9.6. passenger_max_preloader_idle_time <integer> => rails-app-spawner-idle-time-integer--1xjqe4b
194
261
 
195
- 7.6. Installing multiple Ruby on Rails versions => installing-multiple-ruby-on-rails-versions-1bp1fff
262
+ # fuzzy
263
+ 6.9.7. passenger_concurrency_model <process|thread> => passenger-max-requests
196
264
 
197
- 7.7. Making the application restart after each request => making-the-application-restart-after-each-request-vimy48
265
+ # fuzzy
266
+ 6.9.8. passenger_thread_count <number> => passenger-max-request-time-seconds--1qod9kg
198
267
 
199
- 7.8. How to fix broken images/CSS/JavaScript URIs in sub-URI deployments => how-to-fix-broken-images-css-javascript-uris-in-sub-uri-deployments-11mzwt6
268
+ # fuzzy
269
+ 6.9.9. passenger_max_requests <integer> => passenger-max-requests-integer--sgzint
200
270
 
201
- 8. Under the hood => under-the-hood-8uney
271
+ # fuzzy
272
+ 7. Analysis and system maintenance => analysis-and-system-maintenance-1nnlnj8
202
273
 
203
- 8.1. Page caching support => page-caching-support-nafhf6
274
+ # fuzzy
275
+ 7.1. Inspecting memory usage => inspecting-memory-usage-1k6y8v0
204
276
 
205
- 8.2. How Phusion Passenger detects whether a virtual host is a web application => how-phusion-passenger-detects-whether-a-virtual-host-is-a-web-application-13qbmhn
277
+ # fuzzy
278
+ 7.2. Inspecting Phusion Passenger’s internal status => inspecting-phusion-passenger-s-internal-status-v36wbc
206
279
 
207
- 9. Appendix A: About this document => appendix-a-about-this-document-zfvixm
280
+ # fuzzy
281
+ 7.3. Debugging frozen applications => debugging-frozen-applications-qoctl8
208
282
 
209
- 10. Appendix B: Terminology => appendix-b-terminology-wzv5ro
283
+ # fuzzy
284
+ 7.4. Accessing individual application processes => accessing-individual-application-processes-1qe4fqk
210
285
 
211
- 10.1. Application root => application-root-1fd6bqv
286
+ # fuzzy
287
+ 7.5. Attaching an IRB console to an application process => attaching-an-irb-console-to-an-application-process-d36enw
212
288
 
213
- 10.2. Idle process => idle-process-13byfw9
289
+ # fuzzy
290
+ 8. Tips => tips-n4c22d
214
291
 
215
- 10.3. Inactive process => inactive-process-1d2h0po
292
+ # fuzzy
293
+ 8.1. User switching (security) => user-switching-security--zmsy9o
216
294
 
217
- 11. Appendix C: Spawning methods explained => appendix-c-spawning-methods-explained-tcp8e6
295
+ # fuzzy
296
+ 8.2. Reducing memory consumption of Ruby on Rails applications by 33% => reducing-memory-consumption-of-ruby-on-rails-applications-by-33--1o3z66q
218
297
 
219
- 11.1. The most straightforward and traditional way: conservative spawning => the-most-straightforward-and-traditional-way-conservative-spawning-civ29z
298
+ # fuzzy
299
+ 8.3. Capistrano recipe => capistrano-recipe-pfn4qu
220
300
 
221
- 11.2. The smart spawning method => the-smart-spawning-method-7nhgtj
301
+ # fuzzy
302
+ 8.4. Bundler support => bundler-support-19v1h43
222
303
 
223
- 11.2.1. How it works => how-it-works-f9umga
304
+ # fuzzy
305
+ 8.5. Moving Phusion Passenger to a different directory => moving-phusion-passenger-to-a-different-directory-1hel5cp
224
306
 
225
- 11.2.2. Summary of benefits => summary-of-benefits-qovyvk
307
+ # fuzzy
308
+ 8.6. Installing multiple Ruby on Rails versions => installing-multiple-ruby-on-rails-versions-1bp1fff
226
309
 
227
- 11.3. Smart spawning gotcha #1: unintentional file descriptor sharing => smart-spawning-gotcha-1-unintentional-file-descriptor-sharing-cebw6q
310
+ # fuzzy
311
+ 8.7. Making the application restart after each request => making-the-application-restart-after-each-request-vimy48
228
312
 
229
- 11.3.1. Example 1: Memcached connection sharing (harmful) => example-1-memcached-connection-sharing-harmful--1wfs3ad
313
+ # fuzzy
314
+ 8.8. How to fix broken images/CSS/JavaScript URIs in sub-URI deployments => how-to-fix-broken-images-css-javascript-uris-in-sub-uri-deployments-11mzwt6
230
315
 
231
- 11.3.2. Example 2: Log file sharing (not harmful) => example-2-log-file-sharing-not-harmful--ox4yfy
316
+ # fuzzy
317
+ 9. Under the hood => under-the-hood-8uney
232
318
 
233
- 11.4. Smart spawning gotcha #2: the need to revive threads => smart-spawning-gotcha-2-the-need-to-revive-threads-1ey176o
319
+ # fuzzy
320
+ 9.1. Page caching support => page-caching-support-nafhf6
234
321
 
235
- 11.5. Smart spawning gotcha #3: code load order => smart-spawning-gotcha-3-code-load-order-12ydsn8
322
+ # fuzzy
323
+ 9.2. How Phusion Passenger detects whether a virtual host is a web application => how-phusion-passenger-detects-whether-a-virtual-host-is-a-web-application-13qbmhn
236
324
 
@@ -2,45 +2,24 @@
2
2
 
3
3
  image:images/phusion_banner.png[link="http://www.phusion.nl/"]
4
4
 
5
- Phusion Passenger is an Nginx module, which makes deploying Ruby and Ruby on
6
- Rails applications on Nginx a breeze. It follows the usual Ruby on Rails
7
- conventions, such as "Don't-Repeat-Yourself" and ease of setup, while at the
8
- same time providing enough flexibility.
5
+ Phusion Passenger is an application server which can directly integrate into Nginx. It is designed to be easy to use, fast, stable and reliable and is used by link:http://trends.builtwith.com/Web-Server/Phusion-Passenger[hundreds of thousands of websites] all over the world.
6
+
7
+ Phusion Passenger is a so-called polyglot application server because it supports applications written in multiple programming languages. At this time, Ruby and Python are supported.
9
8
 
10
9
  This users guide will teach you:
11
10
 
12
11
  - How to install Nginx with Phusion Passenger support.
13
12
  - How to configure Phusion Passenger.
14
- - How to deploy a Ruby on Rails application.
15
- - How to deploy a link:http://rack.rubyforge.org/[Rack]-based Ruby application.
13
+ - How to deploy Ruby and Python applications.
16
14
  - How to solve common problems.
17
15
 
18
16
  This guide assumes that the reader is somewhat familiar with Nginx and with
19
- using the commandline.
17
+ using the command line.
20
18
 
21
19
 
22
20
  == Support information ==
23
21
 
24
- === Supported operating systems ===
25
-
26
- Phusion Passenger works on any POSIX-compliant operating system. In other
27
- words: practically any operating system on earth, except Microsoft Windows.
28
-
29
- Phusion Passenger is confirmed on a large number of operating systems and Linux
30
- distributions, including, but not limited to, Ubuntu, Debian, CentOS/Fedora/RHEL,
31
- Gentoo, Mac OS X, FreeBSD and Solaris. Both 32-bit and 64-bit platforms are supported.
32
- Please
33
- link:http://code.google.com/p/phusion-passenger/issues/list[report a bug]
34
- or
35
- link:http://groups.google.com/group/phusion-passenger[join our discussion forum]
36
- if it doesn't work on your POSIX-compliant operating system.
37
-
38
- === Where to get support ===
39
-
40
- * link:http://code.google.com/p/phusion-passenger/issues/list[Issue tracker] - report
41
- bugs here.
42
- * link:http://groups.google.com/group/phusion-passenger[Discussion forum] - post a
43
- message here if you're experiencing problems.
22
+ include::users_guide_snippets/support_information.txt[]
44
23
 
45
24
 
46
25
  == Installing Phusion Passenger ==
@@ -221,15 +200,14 @@ http {
221
200
  passenger_root /somewhere/passenger-x.x.x;
222
201
  passenger_ruby /usr/bin/ruby;
223
202
  passenger_max_pool_size 10;
224
-
203
+
225
204
  gzip on;
226
-
205
+
227
206
  server {
228
207
  server_name www.foo.com;
229
208
  listen 80;
230
209
  root /webapps/foo/public;
231
210
  passenger_enabled on;
232
- passenger_use_global_queue on;
233
211
  }
234
212
  }
235
213
  -----------------------------------
@@ -243,9 +221,9 @@ http {
243
221
  # passenger_root /somewhere/passenger-x.x.x;
244
222
  # passenger_ruby /usr/bin/ruby;
245
223
  # passenger_max_pool_size 10;
246
-
224
+
247
225
  gzip on;
248
-
226
+
249
227
  server {
250
228
  server_name www.foo.com;
251
229
  listen 80;
@@ -299,14 +277,14 @@ For example:
299
277
  -------------------------------------------
300
278
  http {
301
279
  ...
302
-
280
+
303
281
  server {
304
282
  listen 80;
305
283
  server_name www.mycook.com;
306
284
  root /webapps/mycook/public;
307
285
  passenger_enabled on;
308
286
  }
309
-
287
+
310
288
  ...
311
289
  }
312
290
  -------------------------------------------
@@ -320,13 +298,13 @@ Suppose that you already have a 'server' virtual host entry:
320
298
  -------------------------------------------
321
299
  http {
322
300
  ...
323
-
301
+
324
302
  server {
325
303
  listen 80;
326
304
  server_name www.phusion.nl;
327
305
  root /websites/phusion;
328
306
  }
329
-
307
+
330
308
  ...
331
309
  }
332
310
  -------------------------------------------
@@ -345,7 +323,7 @@ option to the 'server' block:
345
323
  -------------------------------------------
346
324
  http {
347
325
  ...
348
-
326
+
349
327
  server {
350
328
  listen 80;
351
329
  server_name www.phusion.nl;
@@ -353,7 +331,7 @@ http {
353
331
  passenger_enabled on; # <--- These lines have
354
332
  passenger_base_uri /rails; # <--- been added.
355
333
  }
356
-
334
+
357
335
  ...
358
336
  }
359
337
  -------------------------------------------
@@ -515,14 +493,14 @@ Suppose that you already have a virtual host:
515
493
  -------------------------------------------
516
494
  http {
517
495
  ...
518
-
496
+
519
497
  server {
520
498
  listen 80;
521
499
  server_name www.phusion.nl;
522
500
  root /websites/phusion;
523
501
  passenger_enabled on;
524
502
  }
525
-
503
+
526
504
  ...
527
505
  }
528
506
  -------------------------------------------
@@ -541,7 +519,7 @@ option to the 'server' block:
541
519
  -------------------------------------------
542
520
  http {
543
521
  ...
544
-
522
+
545
523
  server {
546
524
  listen 80;
547
525
  server_name www.phusion.nl;
@@ -549,7 +527,7 @@ http {
549
527
  passenger_enabled on; # <--- These lines have
550
528
  passenger_base_uri /rack; # <--- been added.
551
529
  }
552
-
530
+
553
531
  ...
554
532
  }
555
533
  -------------------------------------------
@@ -591,6 +569,106 @@ touch /webapps/rackapp/tmp/restart.txt
591
569
  include::users_guide_snippets/rackup_specifications.txt[]
592
570
 
593
571
 
572
+ == Deploying a WSGI (Python) application
573
+
574
+ Phusion Passenger supports all WSGI-compliant Python web applications. Suppose that you have a WSGI application in '/webapps/wsgiapp'. Then that folder must contain at least three entries:
575
+
576
+ - 'passenger_wsgi.py', which Phusion Passenger will use as the main entry point for your application. This file must export a WSGI object called `application`.
577
+ - 'public/', a folder containing public static web assets, like images and stylesheets.
578
+ - 'tmp/', used for 'restart.txt' (our application restart mechanism). This will be explained in a following subsection.
579
+
580
+ So '/webapps/wsgiapp' must, at minimum, look like this:
581
+ ----------------------
582
+ /webapps/wsgiapp
583
+ |
584
+ +-- config.ru
585
+ |
586
+ +-- public/
587
+ |
588
+ +-- tmp/
589
+ ----------------------
590
+
591
+ === Tutorial/example: writing and deploying a Hello World WSGI application ===
592
+
593
+ First we create a Phusion Passenger-compliant WSGI directory structure:
594
+
595
+ -------------------------------------------
596
+ $ mkdir /webapps/wsgi_example
597
+ $ mkdir /webapps/wsgi_example/public
598
+ $ mkdir /webapps/wsgi_example/tmp
599
+ -------------------------------------------
600
+
601
+ Next, we write a minimal "hello world" WSGI application:
602
+
603
+ -------------------------------------------
604
+ $ cd /webapps/wsgi_example
605
+ $ some_awesome_editor passenger_wsgi.py
606
+ ...type in some source code...
607
+ $ cat passenger_wsgi.py
608
+ def application(environ, start_response):
609
+ start_response(200, [('Content-Type', 'text/plain')])
610
+ return ["hello world!\n"]
611
+ -------------------------------------------
612
+
613
+ Finally, we deploy it by adding the following configuration options to
614
+ the Nginx configuration file:
615
+
616
+ -------------------------------------------
617
+ http {
618
+ ...
619
+ server {
620
+ listen 80;
621
+ server_name www.wsgiexample.com;
622
+ root /webapps/wsgi_example/public;
623
+ passenger_enabled on;
624
+ }
625
+ ...
626
+ }
627
+ -------------------------------------------
628
+
629
+ And we're done! After an Nginx restart, the above WSGI application will be available
630
+ under the URL 'http://www.wsgiexample.com/'.
631
+
632
+ === Deploying to a virtual host's root ===
633
+
634
+ Add a 'server' virtual host entry to your Nginx configuration file. The virtual host's
635
+ root must point to your WSGI application's 'public' folder. You must also set
636
+ 'passenger_enabled on' in the 'server' block.
637
+
638
+ For example:
639
+ -------------------------------------------
640
+ http {
641
+ ...
642
+ server {
643
+ listen 80;
644
+ server_name www.wsgiapp.com;
645
+ root /webapps/wsgiapp/public;
646
+ passenger_enabled on;
647
+ }
648
+ ...
649
+ }
650
+ -------------------------------------------
651
+ Then restart Nginx. The application has now been deployed.
652
+
653
+ === Redeploying (restarting the WSGI application) ===
654
+
655
+ Deploying a new version of a WSGI application is as simple as
656
+ re-uploading the application files, and restarting the application.
657
+
658
+ There are two ways to restart the application:
659
+
660
+ 1. By restarting Nginx.
661
+ 2. By creating or modifying the file 'tmp/restart.txt' in the WSGI
662
+ application's <<application_root,root folder>>. Phusion Passenger will
663
+ automatically restart the application.
664
+
665
+ For example, to restart our example application, we type this in the
666
+ command line:
667
+ -------------------------------------------
668
+ touch /webapps/wsgiapp/tmp/restart.txt
669
+ -------------------------------------------
670
+
671
+
594
672
  == Configuring Phusion Passenger ==
595
673
 
596
674
  After installation, Phusion Passenger does not need any further configurations.
@@ -612,8 +690,12 @@ This required option may only occur once, in the 'http' configuration block.
612
690
  === passenger_ruby <filename> ===
613
691
  This option allows one to specify the Ruby interpreter to use.
614
692
 
615
- This option may only occur once, in the 'http' configuration block.
616
- The default is 'ruby'.
693
+ * In the 'http' configuration block.
694
+ * In a 'server' configuration block.
695
+ * In a 'location' configuration block.
696
+ * In an 'if' configuration scope.
697
+
698
+ In each place, it may be specified at most once. The default value is 'ruby', meaning that the Ruby interpreter will be looked up according to the `PATH` environment variable.
617
699
 
618
700
  [[PassengerSpawnMethod]]
619
701
  === passenger_spawn_method <string> ===
@@ -625,11 +707,11 @@ understand it, as it's mostly a technical detail. You can basically follow this
625
707
 
626
708
  ************************************************
627
709
  If your application works on Mongrel, but not on Phusion Passenger, then set
628
- `passenger_spawn_method` to 'conservative'. Otherwise, leave it at 'smart-lv2' (the default).
710
+ `passenger_spawn_method` to 'direct'. Otherwise, leave it at 'smart' (the default).
629
711
  ************************************************
630
712
 
631
- However, we do recommend you to try to understand it. The 'smart' and 'smart-lv2' spawn
632
- methods bring many benefits.
713
+ However, we do recommend you to try to understand it. The 'smart' spawn
714
+ method brings many benefits.
633
715
  =========================================================
634
716
 
635
717
  include::users_guide_snippets/passenger_spawn_method.txt[]
@@ -641,7 +723,7 @@ This option may occur in the following places:
641
723
  * In a 'location' configuration block.
642
724
  * In an 'if' configuration scope.
643
725
 
644
- In each place, it may be specified at most once. The default value is 'smart-lv2'.
726
+ In each place, it may be specified at most once. The default value is 'smart'.
645
727
 
646
728
  [[PassengerRollingRestarts]]
647
729
  === passenger_rolling_restarts <on|off> ===
@@ -743,23 +825,6 @@ This option may occur in the following places:
743
825
 
744
826
  === Connection handling options ===
745
827
 
746
- [[PassengerUseGlobalQueue]]
747
- ==== passenger_use_global_queue <on|off> ====
748
- Turns the use of global queuing on or off.
749
-
750
- This option may occur in the following places:
751
-
752
- * In the 'http' configuration block.
753
- * In a 'server' configuration block.
754
- * In a 'location' configuration block.
755
- * In an 'if' configuration scope.
756
-
757
- In each place, it may be specified at most once. The default value is 'on'.
758
-
759
- 'This feature is sponsored by http://www.37signals.com/[37signals].'
760
-
761
- include::users_guide_snippets/global_queueing_explained.txt[]
762
-
763
828
  ==== passenger_ignore_client_abort <on|off> ====
764
829
  Normally, when the HTTP client aborts the connection (e.g. when the user clicked on "Stop"
765
830
  in the browser), the connection with the application process will be closed too. If the
@@ -1031,7 +1096,7 @@ http {
1031
1096
  ...
1032
1097
  passenger_max_pool_size 15;
1033
1098
  passenger_pool_idle_time 10;
1034
-
1099
+
1035
1100
  server {
1036
1101
  listen 80;
1037
1102
  server_name foobar.com;
@@ -1133,6 +1198,67 @@ applications, each which must be available at all times.
1133
1198
  This option may only occur once, in the 'http' configuration block.
1134
1199
  The default value is '300'.
1135
1200
 
1201
+ ==== passenger_max_preloader_idle_time <integer> ====
1202
+ The ApplicationSpawner server (explained in <<spawning_methods_explained,Spawning
1203
+ methods explained>>) has an idle timeout, just like the backend processes spawned by
1204
+ Phusion Passenger do. That is, it will automatically shutdown if it hasn't done
1205
+ anything for a given period.
1206
+
1207
+ This option allows you to set the ApplicationSpawner server's idle timeout, in
1208
+ seconds. A value of '0' means that it should never idle timeout.
1209
+
1210
+ Setting a higher value will mean that the ApplicationSpawner server is kept around
1211
+ longer, which may slightly increase memory usage. But as long as the
1212
+ ApplicationSpawner server is running, the time to spawn a Ruby on Rails backend
1213
+ process only takes about 10% of the time that is normally needed, assuming that
1214
+ you're using the 'smart' or 'smart-lv2' <<RailsSpawnMethod,spawning method>>. So if your
1215
+ system has enough memory, is it recommended that you set this option to a high
1216
+ value or to '0'.
1217
+
1218
+ This option may occur in the following places:
1219
+
1220
+ * In the 'http' configuration block.
1221
+ * In a 'server' configuration block.
1222
+ * In a 'location' configuration block.
1223
+ * In an 'if' configuration scope.
1224
+
1225
+ In each place, it may be specified at most once. The default value is '300' (5 minutes).
1226
+
1227
+ [[PassengerConcurrencyModel]]
1228
+ ==== passenger_concurrency_model <process|thread> ====
1229
+ :version: 4.0.0
1230
+ include::users_guide_snippets/enterprise_only.txt[]
1231
+
1232
+ Specifies the I/O concurrency model that should be used for application processes. Phusion Passenger supports two concurrency models:
1233
+
1234
+ * 'process' - single-threaded, multi-processed I/O concurrency. Each application process only has a single thread and can only handle 1 request at a time. This is the concurrency model that Ruby applications traditionally used. It has excellent compatiblity (can work with applications that are not designed to be thread-safe) but is unsuitable workloads in which the application has to wait for a lot of external I/O (e.g. HTTP API calls), and uses more memory because each process has a large memory overhead.
1235
+ * 'thread' - multi-threaded, multi-processed I/O concurrency. Each application process has multiple threads (customizable via <<PassengerThreadCount,passenger_thread_count>>). This model provides much better I/O concurrency and uses less memory because threads share memory with each other within the same process. However, using this model may cause compatibility problems if the application is not designed to be thread-safe.
1236
+
1237
+ This option may occur in the following places:
1238
+
1239
+ * In the 'http' configuration block.
1240
+ * In a 'server' configuration block.
1241
+ * In a 'location' configuration block.
1242
+ * In an 'if' configuration scope.
1243
+
1244
+ In each place, it may be specified at most once. The default value is 'process'.
1245
+
1246
+ [[PassengerThreadCount]]
1247
+ ==== passenger_thread_count <number> ====
1248
+ :version: 4.0.0
1249
+ include::users_guide_snippets/enterprise_only.txt[]
1250
+
1251
+ Specifies the number of threads that Phusion Passenger should spawn per application process. This option only has effect if <<PassengerConcurrencyModel,passenger_concurrency_model>> is 'thread'.
1252
+
1253
+ This option may occur in the following places:
1254
+
1255
+ * In the 'http' configuration block.
1256
+ * In a 'server' configuration block.
1257
+ * In a 'location' configuration block.
1258
+ * In an 'if' configuration scope.
1259
+
1260
+ In each place, it may be specified at most once. The default value is '1'.
1261
+
1136
1262
  [[PassengerMaxRequests]]
1137
1263
  ==== passenger_max_requests <integer> ====
1138
1264
  The maximum number of requests an application process will process. After
@@ -1531,58 +1657,6 @@ This option may occur in the following places:
1531
1657
 
1532
1658
  In each place, it may be specified at most once. The default value is 'production'.
1533
1659
 
1534
- ==== rails_framework_spawner_idle_time <integer> ====
1535
- The FrameworkSpawner server (explained in <<spawning_methods_explained,Spawning
1536
- methods explained>>) has an idle timeout, just like the backend processes spawned by
1537
- Phusion Passenger do. That is, it will automatically shutdown if it hasn't done
1538
- anything for a given period.
1539
-
1540
- This option allows you to set the FrameworkSpawner server's idle timeout, in
1541
- seconds. A value of '0' means that it should never idle timeout.
1542
-
1543
- Setting a higher value will mean that the FrameworkSpawner server is kept around
1544
- longer, which may slightly increase memory usage. But as long as the
1545
- FrameworkSpawner server is running, the time to spawn a Ruby on Rails backend
1546
- process only takes about 40% of the time that is normally needed, assuming that
1547
- you're using the 'smart' <<RailsSpawnMethod,spawning method>>. So if your
1548
- system has enough memory, is it recommended that you set this option to a high
1549
- value or to '0'.
1550
-
1551
- This option may occur in the following places:
1552
-
1553
- * In the 'http' configuration block.
1554
- * In a 'server' configuration block.
1555
- * In a 'location' configuration block.
1556
- * In an 'if' configuration scope.
1557
-
1558
- In each place, it may be specified at most once. The default value is '1800' (30 minutes).
1559
-
1560
- ==== rails_app_spawner_idle_time <integer> ====
1561
- The ApplicationSpawner server (explained in <<spawning_methods_explained,Spawning
1562
- methods explained>>) has an idle timeout, just like the backend processes spawned by
1563
- Phusion Passenger do. That is, it will automatically shutdown if it hasn't done
1564
- anything for a given period.
1565
-
1566
- This option allows you to set the ApplicationSpawner server's idle timeout, in
1567
- seconds. A value of '0' means that it should never idle timeout.
1568
-
1569
- Setting a higher value will mean that the ApplicationSpawner server is kept around
1570
- longer, which may slightly increase memory usage. But as long as the
1571
- ApplicationSpawner server is running, the time to spawn a Ruby on Rails backend
1572
- process only takes about 10% of the time that is normally needed, assuming that
1573
- you're using the 'smart' or 'smart-lv2' <<RailsSpawnMethod,spawning method>>. So if your
1574
- system has enough memory, is it recommended that you set this option to a high
1575
- value or to '0'.
1576
-
1577
- This option may occur in the following places:
1578
-
1579
- * In the 'http' configuration block.
1580
- * In a 'server' configuration block.
1581
- * In a 'location' configuration block.
1582
- * In an 'if' configuration scope.
1583
-
1584
- In each place, it may be specified at most once. The default value is '600' (10 minutes).
1585
-
1586
1660
  === Rack and Rails >= 3 specific options ===
1587
1661
  [[RackEnv]]
1588
1662
  ==== rack_env <string> ====