passenger 3.9.1.beta → 3.9.2.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 (1643) hide show
  1. data/.travis.yml +13 -0
  2. data/CONTRIBUTING.md +287 -0
  3. data/INSTALL.md +7 -0
  4. data/NEWS +32 -0
  5. data/README.md +46 -0
  6. data/Rakefile +2 -2
  7. data/bin/passenger +1 -1
  8. data/bin/passenger-config +1 -1
  9. data/bin/passenger-install-apache2-module +1 -1
  10. data/bin/passenger-install-nginx-module +1 -1
  11. data/bin/passenger-memory-stats +1 -1
  12. data/bin/passenger-status +1 -1
  13. data/build/agents.rb +7 -7
  14. data/build/apache2.rb +2 -2
  15. data/build/basics.rb +3 -7
  16. data/build/common_library.rb +14 -7
  17. data/build/cplusplus_support.rb +1 -1
  18. data/build/cxx_tests.rb +19 -7
  19. data/build/documentation.rb +1 -1
  20. data/build/integration_tests.rb +2 -2
  21. data/build/misc.rb +6 -6
  22. data/build/nginx.rb +1 -1
  23. data/build/oxt_tests.rb +1 -1
  24. data/build/packaging.rb +13 -23
  25. data/build/rake_extensions.rb +1 -1
  26. data/build/rpm.rb +1 -1
  27. data/build/ruby_extension.rb +2 -2
  28. data/build/ruby_tests.rb +4 -4
  29. data/build/test_basics.rb +15 -2
  30. data/dev/copy_boost_headers.rb +18 -8
  31. data/dev/find_owner_pipe_leaks.rb +1 -1
  32. data/dev/render_error_pages.rb +1 -1
  33. data/dev/run_travis.sh +39 -0
  34. data/doc/Architectural overview.html +55 -21
  35. data/doc/{DebuggingAndStressTesting.txt.md → DebuggingAndStressTesting.md} +12 -1
  36. data/doc/Security of user switching support.html +47 -16
  37. data/doc/Users guide Apache.html +802 -378
  38. data/doc/Users guide Apache.idmap.txt +85 -209
  39. data/doc/Users guide Apache.txt +65 -338
  40. data/doc/Users guide Nginx.html +715 -252
  41. data/doc/Users guide Nginx.idmap.txt +71 -147
  42. data/doc/Users guide Nginx.txt +29 -245
  43. data/doc/Users guide Standalone.html +45 -14
  44. data/doc/Users guide Standalone.idmap.txt +0 -2
  45. data/doc/users_guide_snippets/analysis_and_system_maintenance.txt +1 -1
  46. data/doc/users_guide_snippets/installation.txt +604 -0
  47. data/doc/users_guide_snippets/support_information.txt +5 -4
  48. data/doc/users_guide_snippets/tips.txt +54 -1
  49. data/ext/apache2/Bucket.cpp +1 -1
  50. data/ext/apache2/Bucket.h +1 -1
  51. data/ext/apache2/Configuration.cpp +2 -14
  52. data/ext/apache2/Configuration.h +1 -1
  53. data/ext/apache2/Configuration.hpp +3 -22
  54. data/ext/apache2/DirectoryMapper.h +1 -1
  55. data/ext/apache2/Hooks.cpp +5 -5
  56. data/ext/apache2/Hooks.h +1 -1
  57. data/ext/apache2/mod_passenger.c +1 -1
  58. data/ext/boost/aligned_storage.hpp +181 -0
  59. data/ext/boost/array.hpp +446 -0
  60. data/ext/boost/cerrno.hpp +331 -0
  61. data/ext/boost/chrono/ceil.hpp +36 -0
  62. data/ext/boost/chrono/clock_string.hpp +25 -0
  63. data/ext/boost/chrono/config.hpp +215 -0
  64. data/ext/boost/chrono/detail/is_evenly_divisible_by.hpp +31 -0
  65. data/ext/boost/chrono/detail/static_assert.hpp +30 -0
  66. data/ext/boost/chrono/detail/system.hpp +29 -0
  67. data/ext/boost/chrono/duration.hpp +795 -0
  68. data/ext/boost/chrono/system_clocks.hpp +233 -0
  69. data/ext/boost/chrono/time_point.hpp +379 -0
  70. data/ext/boost/concept_check.hpp +5 -5
  71. data/ext/boost/config/compiler/borland.hpp +29 -27
  72. data/ext/boost/config/compiler/clang.hpp +40 -26
  73. data/ext/boost/config/compiler/codegear.hpp +20 -19
  74. data/ext/boost/config/compiler/common_edg.hpp +27 -25
  75. data/ext/boost/config/compiler/cray.hpp +24 -22
  76. data/ext/boost/config/compiler/digitalmars.hpp +26 -24
  77. data/ext/boost/config/compiler/gcc.hpp +32 -30
  78. data/ext/boost/config/compiler/gcc_xml.hpp +26 -25
  79. data/ext/boost/config/compiler/hp_acc.hpp +26 -24
  80. data/ext/boost/config/compiler/intel.hpp +26 -24
  81. data/ext/boost/config/compiler/metrowerks.hpp +27 -25
  82. data/ext/boost/config/compiler/mpw.hpp +27 -25
  83. data/ext/boost/config/compiler/pathscale.hpp +41 -41
  84. data/ext/boost/config/compiler/pgi.hpp +70 -29
  85. data/ext/boost/config/compiler/sunpro_cc.hpp +27 -25
  86. data/ext/boost/config/compiler/vacpp.hpp +36 -26
  87. data/ext/boost/config/compiler/visualc.hpp +80 -57
  88. data/ext/boost/config/stdlib/dinkumware.hpp +25 -22
  89. data/ext/boost/config/stdlib/libcomo.hpp +23 -20
  90. data/ext/boost/config/stdlib/libcpp.hpp +5 -4
  91. data/ext/boost/config/stdlib/libstdcpp3.hpp +34 -25
  92. data/ext/boost/config/stdlib/modena.hpp +23 -20
  93. data/ext/boost/config/stdlib/msl.hpp +23 -20
  94. data/ext/boost/config/stdlib/roguewave.hpp +23 -20
  95. data/ext/boost/config/stdlib/sgi.hpp +23 -20
  96. data/ext/boost/config/stdlib/stlport.hpp +23 -24
  97. data/ext/boost/config/stdlib/vacpp.hpp +23 -20
  98. data/ext/boost/config/suffix.hpp +266 -75
  99. data/ext/boost/container/container_fwd.hpp +39 -43
  100. data/ext/boost/date_time/adjust_functors.hpp +1 -1
  101. data/ext/boost/date_time/c_time.hpp +1 -1
  102. data/ext/boost/date_time/compiler_config.hpp +1 -1
  103. data/ext/boost/date_time/constrained_value.hpp +1 -1
  104. data/ext/boost/date_time/date.hpp +3 -3
  105. data/ext/boost/date_time/date_clock_device.hpp +1 -1
  106. data/ext/boost/date_time/date_defs.hpp +1 -1
  107. data/ext/boost/date_time/date_duration.hpp +9 -9
  108. data/ext/boost/date_time/date_duration_types.hpp +1 -1
  109. data/ext/boost/date_time/date_facet.hpp +7 -4
  110. data/ext/boost/date_time/date_format_simple.hpp +1 -1
  111. data/ext/boost/date_time/date_formatting.hpp +4 -2
  112. data/ext/boost/date_time/date_formatting_limited.hpp +1 -1
  113. data/ext/boost/date_time/date_formatting_locales.hpp +1 -1
  114. data/ext/boost/date_time/date_generator_formatter.hpp +1 -1
  115. data/ext/boost/date_time/date_generator_parser.hpp +1 -1
  116. data/ext/boost/date_time/date_generators.hpp +35 -35
  117. data/ext/boost/date_time/date_iterator.hpp +15 -15
  118. data/ext/boost/date_time/date_names_put.hpp +26 -26
  119. data/ext/boost/date_time/date_parsing.hpp +3 -1
  120. data/ext/boost/date_time/dst_rules.hpp +2 -2
  121. data/ext/boost/date_time/filetime_functions.hpp +1 -1
  122. data/ext/boost/date_time/format_date_parser.hpp +1 -7
  123. data/ext/boost/date_time/gregorian/conversion.hpp +1 -1
  124. data/ext/boost/date_time/gregorian/formatters.hpp +1 -1
  125. data/ext/boost/date_time/gregorian/formatters_limited.hpp +1 -1
  126. data/ext/boost/date_time/gregorian/greg_calendar.hpp +1 -1
  127. data/ext/boost/date_time/gregorian/greg_date.hpp +1 -1
  128. data/ext/boost/date_time/gregorian/greg_day.hpp +1 -1
  129. data/ext/boost/date_time/gregorian/greg_day_of_year.hpp +1 -1
  130. data/ext/boost/date_time/gregorian/greg_duration.hpp +1 -1
  131. data/ext/boost/date_time/gregorian/greg_duration_types.hpp +1 -1
  132. data/ext/boost/date_time/gregorian/greg_month.hpp +1 -1
  133. data/ext/boost/date_time/gregorian/greg_weekday.hpp +1 -1
  134. data/ext/boost/date_time/gregorian/greg_year.hpp +1 -1
  135. data/ext/boost/date_time/gregorian/greg_ymd.hpp +1 -1
  136. data/ext/boost/date_time/gregorian/gregorian.hpp +1 -1
  137. data/ext/boost/date_time/gregorian/gregorian_io.hpp +1 -1
  138. data/ext/boost/date_time/gregorian/gregorian_types.hpp +1 -1
  139. data/ext/boost/date_time/gregorian/parsers.hpp +1 -1
  140. data/ext/boost/date_time/gregorian_calendar.hpp +1 -1
  141. data/ext/boost/date_time/gregorian_calendar.ipp +1 -1
  142. data/ext/boost/date_time/int_adapter.hpp +1 -1
  143. data/ext/boost/date_time/iso_format.hpp +1 -1
  144. data/ext/boost/date_time/locale_config.hpp +1 -1
  145. data/ext/boost/date_time/microsec_time_clock.hpp +1 -1
  146. data/ext/boost/date_time/parse_format_base.hpp +1 -1
  147. data/ext/boost/date_time/period.hpp +1 -1
  148. data/ext/boost/date_time/period_formatter.hpp +5 -5
  149. data/ext/boost/date_time/period_parser.hpp +1 -1
  150. data/ext/boost/date_time/posix_time/conversion.hpp +1 -1
  151. data/ext/boost/date_time/posix_time/date_duration_operators.hpp +1 -1
  152. data/ext/boost/date_time/posix_time/posix_time.hpp +1 -1
  153. data/ext/boost/date_time/posix_time/posix_time_config.hpp +2 -2
  154. data/ext/boost/date_time/posix_time/posix_time_duration.hpp +1 -1
  155. data/ext/boost/date_time/posix_time/posix_time_io.hpp +1 -1
  156. data/ext/boost/date_time/posix_time/posix_time_system.hpp +1 -1
  157. data/ext/boost/date_time/posix_time/ptime.hpp +1 -1
  158. data/ext/boost/date_time/posix_time/time_formatters.hpp +1 -1
  159. data/ext/boost/date_time/posix_time/time_parsers.hpp +1 -1
  160. data/ext/boost/date_time/posix_time/time_period.hpp +1 -1
  161. data/ext/boost/date_time/special_defs.hpp +1 -1
  162. data/ext/boost/date_time/special_values_formatter.hpp +1 -1
  163. data/ext/boost/date_time/string_convert.hpp +1 -1
  164. data/ext/boost/date_time/string_parse_tree.hpp +1 -1
  165. data/ext/boost/date_time/strings_from_facet.hpp +1 -1
  166. data/ext/boost/date_time/time.hpp +1 -1
  167. data/ext/boost/date_time/time_clock.hpp +1 -1
  168. data/ext/boost/date_time/time_defs.hpp +1 -1
  169. data/ext/boost/date_time/time_duration.hpp +17 -6
  170. data/ext/boost/date_time/time_facet.hpp +1 -1
  171. data/ext/boost/date_time/time_formatting_streams.hpp +1 -1
  172. data/ext/boost/date_time/time_iterator.hpp +17 -17
  173. data/ext/boost/date_time/time_parsing.hpp +6 -3
  174. data/ext/boost/date_time/time_resolution_traits.hpp +1 -1
  175. data/ext/boost/date_time/time_system_counted.hpp +1 -1
  176. data/ext/boost/date_time/time_system_split.hpp +1 -1
  177. data/ext/boost/date_time/wrapping_int.hpp +27 -27
  178. data/ext/boost/date_time/year_month_day.hpp +1 -1
  179. data/ext/boost/detail/container_fwd.hpp +162 -0
  180. data/ext/boost/detail/is_incrementable.hpp +134 -0
  181. data/ext/boost/detail/scoped_enum_emulation.hpp +337 -0
  182. data/ext/boost/exception/detail/attribute_noreturn.hpp +1 -1
  183. data/ext/boost/exception/detail/error_info_impl.hpp +2 -1
  184. data/ext/boost/exception/detail/exception_ptr.hpp +7 -2
  185. data/ext/boost/exception/exception.hpp +29 -2
  186. data/ext/boost/exception/info.hpp +1 -1
  187. data/ext/boost/foreach.hpp +1128 -0
  188. data/ext/boost/foreach_fwd.hpp +51 -0
  189. data/ext/boost/function/function_template.hpp +50 -1
  190. data/ext/boost/functional/hash.hpp +7 -0
  191. data/ext/boost/functional/hash/detail/container_fwd_0x.hpp +29 -0
  192. data/ext/boost/functional/hash/detail/float_functions.hpp +246 -0
  193. data/ext/boost/functional/hash/detail/hash_float.hpp +268 -0
  194. data/ext/boost/functional/hash/detail/limits.hpp +61 -0
  195. data/ext/boost/functional/hash/extensions.hpp +367 -0
  196. data/ext/boost/functional/hash/hash.hpp +509 -0
  197. data/ext/boost/functional/hash/hash_fwd.hpp +40 -0
  198. data/ext/boost/functional/hash_fwd.hpp +7 -0
  199. data/ext/boost/indirect_reference.hpp +43 -0
  200. data/ext/boost/integer.hpp +19 -15
  201. data/ext/boost/integer/static_log2.hpp +127 -0
  202. data/ext/boost/integer_traits.hpp +1 -1
  203. data/ext/boost/iterator/iterator_facade.hpp +32 -36
  204. data/ext/boost/iterator/reverse_iterator.hpp +1 -1
  205. data/ext/boost/iterator/transform_iterator.hpp +1 -1
  206. data/ext/boost/lambda/core.hpp +79 -0
  207. data/ext/boost/lambda/detail/actions.hpp +174 -0
  208. data/ext/boost/lambda/detail/arity_code.hpp +110 -0
  209. data/ext/boost/lambda/detail/function_adaptors.hpp +789 -0
  210. data/ext/boost/lambda/detail/is_instance_of.hpp +104 -0
  211. data/ext/boost/lambda/detail/lambda_config.hpp +48 -0
  212. data/ext/boost/lambda/detail/lambda_functor_base.hpp +615 -0
  213. data/ext/boost/lambda/detail/lambda_functors.hpp +324 -0
  214. data/ext/boost/lambda/detail/lambda_fwd.hpp +74 -0
  215. data/ext/boost/lambda/detail/lambda_traits.hpp +578 -0
  216. data/ext/boost/lambda/detail/member_ptr.hpp +737 -0
  217. data/ext/boost/lambda/detail/operator_actions.hpp +139 -0
  218. data/ext/boost/lambda/detail/operator_lambda_func_base.hpp +271 -0
  219. data/ext/boost/lambda/detail/operator_return_type_traits.hpp +917 -0
  220. data/ext/boost/lambda/detail/operators.hpp +370 -0
  221. data/ext/boost/lambda/detail/ret.hpp +325 -0
  222. data/ext/boost/lambda/detail/return_type_traits.hpp +282 -0
  223. data/ext/boost/lambda/detail/select_functions.hpp +74 -0
  224. data/ext/boost/lambda/lambda.hpp +34 -0
  225. data/ext/boost/lexical_cast.hpp +807 -497
  226. data/ext/boost/libs/system/src/error_code.cpp +430 -0
  227. data/ext/boost/libs/system/src/local_free_on_destruction.hpp +40 -0
  228. data/ext/boost/libs/thread/src/future.cpp +61 -0
  229. data/ext/boost/{src → libs/thread/src}/pthread/once.cpp +28 -9
  230. data/ext/boost/{src → libs/thread/src}/pthread/thread.cpp +139 -47
  231. data/ext/boost/{src → libs/thread/src}/pthread/timeconv.inl +0 -0
  232. data/ext/boost/{src → libs/thread/src}/tss_null.cpp +2 -2
  233. data/ext/boost/math/policies/policy.hpp +4 -4
  234. data/ext/boost/math/special_functions/fpclassify.hpp +10 -6
  235. data/ext/boost/math/special_functions/math_fwd.hpp +226 -0
  236. data/ext/boost/math/tools/config.hpp +10 -1
  237. data/ext/boost/move/move.hpp +70 -19
  238. data/ext/boost/mpl/O1_size.hpp +1 -1
  239. data/ext/boost/mpl/O1_size_fwd.hpp +1 -1
  240. data/ext/boost/mpl/accumulate.hpp +39 -0
  241. data/ext/boost/mpl/advance.hpp +1 -1
  242. data/ext/boost/mpl/advance_fwd.hpp +1 -1
  243. data/ext/boost/mpl/alias.hpp +21 -0
  244. data/ext/boost/mpl/always.hpp +1 -1
  245. data/ext/boost/mpl/and.hpp +1 -1
  246. data/ext/boost/mpl/apply.hpp +1 -1
  247. data/ext/boost/mpl/apply_fwd.hpp +1 -1
  248. data/ext/boost/mpl/apply_wrap.hpp +1 -1
  249. data/ext/boost/mpl/arg.hpp +1 -1
  250. data/ext/boost/mpl/arg_fwd.hpp +1 -1
  251. data/ext/boost/mpl/arithmetic.hpp +25 -0
  252. data/ext/boost/mpl/as_sequence.hpp +38 -0
  253. data/ext/boost/mpl/assert.hpp +1 -1
  254. data/ext/boost/mpl/at.hpp +1 -1
  255. data/ext/boost/mpl/at_fwd.hpp +1 -1
  256. data/ext/boost/mpl/aux_/O1_size_impl.hpp +1 -1
  257. data/ext/boost/mpl/aux_/adl_barrier.hpp +1 -1
  258. data/ext/boost/mpl/aux_/advance_backward.hpp +1 -1
  259. data/ext/boost/mpl/aux_/advance_forward.hpp +1 -1
  260. data/ext/boost/mpl/aux_/apply_1st.hpp +35 -0
  261. data/ext/boost/mpl/aux_/arg_typedef.hpp +1 -1
  262. data/ext/boost/mpl/aux_/arithmetic_op.hpp +1 -1
  263. data/ext/boost/mpl/aux_/arity.hpp +1 -1
  264. data/ext/boost/mpl/aux_/arity_spec.hpp +1 -1
  265. data/ext/boost/mpl/aux_/at_impl.hpp +1 -1
  266. data/ext/boost/mpl/aux_/back_impl.hpp +43 -0
  267. data/ext/boost/mpl/aux_/basic_bind.hpp +21 -0
  268. data/ext/boost/mpl/aux_/begin_end_impl.hpp +1 -1
  269. data/ext/boost/mpl/aux_/clear_impl.hpp +1 -1
  270. data/ext/boost/mpl/aux_/common_name_wknd.hpp +1 -1
  271. data/ext/boost/mpl/aux_/comparison_op.hpp +1 -1
  272. data/ext/boost/mpl/aux_/config/adl.hpp +1 -1
  273. data/ext/boost/mpl/aux_/config/arrays.hpp +1 -1
  274. data/ext/boost/mpl/aux_/config/bind.hpp +1 -1
  275. data/ext/boost/mpl/aux_/config/compiler.hpp +1 -1
  276. data/ext/boost/mpl/aux_/config/ctps.hpp +1 -1
  277. data/ext/boost/mpl/aux_/config/dependent_nttp.hpp +35 -0
  278. data/ext/boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp +27 -0
  279. data/ext/boost/mpl/aux_/config/dtp.hpp +1 -1
  280. data/ext/boost/mpl/aux_/config/eti.hpp +1 -1
  281. data/ext/boost/mpl/aux_/config/forwarding.hpp +1 -1
  282. data/ext/boost/mpl/aux_/config/gcc.hpp +1 -1
  283. data/ext/boost/mpl/aux_/config/has_apply.hpp +1 -1
  284. data/ext/boost/mpl/aux_/config/has_xxx.hpp +1 -1
  285. data/ext/boost/mpl/aux_/config/integral.hpp +1 -1
  286. data/ext/boost/mpl/aux_/config/intel.hpp +1 -1
  287. data/ext/boost/mpl/aux_/config/lambda.hpp +1 -1
  288. data/ext/boost/mpl/aux_/config/msvc.hpp +1 -1
  289. data/ext/boost/mpl/aux_/config/msvc_typename.hpp +1 -1
  290. data/ext/boost/mpl/aux_/config/nttp.hpp +1 -1
  291. data/ext/boost/mpl/aux_/config/operators.hpp +33 -0
  292. data/ext/boost/mpl/aux_/config/overload_resolution.hpp +1 -1
  293. data/ext/boost/mpl/aux_/config/pp_counter.hpp +1 -1
  294. data/ext/boost/mpl/aux_/config/preprocessor.hpp +1 -1
  295. data/ext/boost/mpl/aux_/config/static_constant.hpp +1 -1
  296. data/ext/boost/mpl/aux_/config/ttp.hpp +1 -1
  297. data/ext/boost/mpl/aux_/config/typeof.hpp +1 -1
  298. data/ext/boost/mpl/aux_/config/use_preprocessed.hpp +1 -1
  299. data/ext/boost/mpl/aux_/config/workaround.hpp +1 -1
  300. data/ext/boost/mpl/aux_/contains_impl.hpp +1 -1
  301. data/ext/boost/mpl/aux_/count_args.hpp +105 -0
  302. data/ext/boost/mpl/aux_/count_impl.hpp +44 -0
  303. data/ext/boost/mpl/aux_/empty_impl.hpp +43 -0
  304. data/ext/boost/mpl/aux_/erase_impl.hpp +69 -0
  305. data/ext/boost/mpl/aux_/erase_key_impl.hpp +32 -0
  306. data/ext/boost/mpl/aux_/filter_iter.hpp +140 -0
  307. data/ext/boost/mpl/aux_/fold_impl.hpp +1 -1
  308. data/ext/boost/mpl/aux_/fold_impl_body.hpp +365 -0
  309. data/ext/boost/mpl/aux_/fold_op.hpp +37 -0
  310. data/ext/boost/mpl/aux_/fold_pred.hpp +37 -0
  311. data/ext/boost/mpl/aux_/front_impl.hpp +41 -0
  312. data/ext/boost/mpl/aux_/full_lambda.hpp +1 -1
  313. data/ext/boost/mpl/aux_/has_apply.hpp +1 -1
  314. data/ext/boost/mpl/aux_/has_begin.hpp +1 -1
  315. data/ext/boost/mpl/aux_/has_key_impl.hpp +34 -0
  316. data/ext/boost/mpl/aux_/has_rebind.hpp +99 -0
  317. data/ext/boost/mpl/aux_/has_size.hpp +1 -1
  318. data/ext/boost/mpl/aux_/has_tag.hpp +1 -1
  319. data/ext/boost/mpl/aux_/has_type.hpp +1 -1
  320. data/ext/boost/mpl/aux_/include_preprocessed.hpp +1 -1
  321. data/ext/boost/mpl/aux_/insert_impl.hpp +68 -0
  322. data/ext/boost/mpl/aux_/insert_range_impl.hpp +77 -0
  323. data/ext/boost/mpl/aux_/inserter_algorithm.hpp +1 -1
  324. data/ext/boost/mpl/aux_/integral_wrapper.hpp +1 -1
  325. data/ext/boost/mpl/aux_/is_msvc_eti_arg.hpp +1 -1
  326. data/ext/boost/mpl/aux_/iter_apply.hpp +1 -1
  327. data/ext/boost/mpl/aux_/iter_fold_if_impl.hpp +1 -1
  328. data/ext/boost/mpl/aux_/iter_fold_impl.hpp +1 -1
  329. data/ext/boost/mpl/aux_/iter_push_front.hpp +36 -0
  330. data/ext/boost/mpl/aux_/joint_iter.hpp +120 -0
  331. data/ext/boost/mpl/aux_/lambda_arity_param.hpp +1 -1
  332. data/ext/boost/mpl/aux_/lambda_no_ctps.hpp +193 -0
  333. data/ext/boost/mpl/aux_/lambda_spec.hpp +1 -1
  334. data/ext/boost/mpl/aux_/lambda_support.hpp +1 -1
  335. data/ext/boost/mpl/aux_/largest_int.hpp +1 -1
  336. data/ext/boost/mpl/aux_/logical_op.hpp +165 -0
  337. data/ext/boost/mpl/aux_/msvc_dtw.hpp +68 -0
  338. data/ext/boost/mpl/aux_/msvc_eti_base.hpp +1 -1
  339. data/ext/boost/mpl/aux_/msvc_is_class.hpp +58 -0
  340. data/ext/boost/mpl/aux_/msvc_never_true.hpp +1 -1
  341. data/ext/boost/mpl/aux_/msvc_type.hpp +1 -1
  342. data/ext/boost/mpl/aux_/na.hpp +1 -1
  343. data/ext/boost/mpl/aux_/na_assert.hpp +1 -1
  344. data/ext/boost/mpl/aux_/na_fwd.hpp +1 -1
  345. data/ext/boost/mpl/aux_/na_spec.hpp +1 -1
  346. data/ext/boost/mpl/aux_/nested_type_wknd.hpp +1 -1
  347. data/ext/boost/mpl/aux_/nttp_decl.hpp +1 -1
  348. data/ext/boost/mpl/aux_/numeric_cast_utils.hpp +1 -1
  349. data/ext/boost/mpl/aux_/numeric_op.hpp +1 -1
  350. data/ext/boost/mpl/aux_/order_impl.hpp +76 -0
  351. data/ext/boost/mpl/aux_/overload_names.hpp +48 -0
  352. data/ext/boost/mpl/aux_/partition_op.hpp +58 -0
  353. data/ext/boost/mpl/aux_/pop_back_impl.hpp +34 -0
  354. data/ext/boost/mpl/aux_/pop_front_impl.hpp +44 -0
  355. data/ext/boost/mpl/aux_/preprocessed/bcc/advance_backward.hpp +97 -0
  356. data/ext/boost/mpl/aux_/preprocessed/bcc/advance_forward.hpp +97 -0
  357. data/ext/boost/mpl/aux_/preprocessed/bcc/and.hpp +69 -0
  358. data/ext/boost/mpl/aux_/preprocessed/bcc/apply.hpp +169 -0
  359. data/ext/boost/mpl/aux_/preprocessed/bcc/apply_fwd.hpp +52 -0
  360. data/ext/boost/mpl/aux_/preprocessed/bcc/apply_wrap.hpp +461 -0
  361. data/ext/boost/mpl/aux_/preprocessed/bcc/arg.hpp +117 -0
  362. data/ext/boost/mpl/aux_/preprocessed/bcc/basic_bind.hpp +300 -0
  363. data/ext/boost/mpl/aux_/preprocessed/bcc/bind.hpp +397 -0
  364. data/ext/boost/mpl/aux_/preprocessed/bcc/bind_fwd.hpp +46 -0
  365. data/ext/boost/mpl/aux_/preprocessed/bcc/bitand.hpp +147 -0
  366. data/ext/boost/mpl/aux_/preprocessed/bcc/bitor.hpp +147 -0
  367. data/ext/boost/mpl/aux_/preprocessed/bcc/bitxor.hpp +147 -0
  368. data/ext/boost/mpl/aux_/preprocessed/bcc/deque.hpp +323 -0
  369. data/ext/boost/mpl/aux_/preprocessed/bcc/divides.hpp +146 -0
  370. data/ext/boost/mpl/aux_/preprocessed/bcc/equal_to.hpp +94 -0
  371. data/ext/boost/mpl/aux_/preprocessed/bcc/fold_impl.hpp +180 -0
  372. data/ext/boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp +558 -0
  373. data/ext/boost/mpl/aux_/preprocessed/bcc/greater.hpp +94 -0
  374. data/ext/boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp +94 -0
  375. data/ext/boost/mpl/aux_/preprocessed/bcc/inherit.hpp +139 -0
  376. data/ext/boost/mpl/aux_/preprocessed/bcc/iter_fold_if_impl.hpp +133 -0
  377. data/ext/boost/mpl/aux_/preprocessed/bcc/iter_fold_impl.hpp +180 -0
  378. data/ext/boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp +229 -0
  379. data/ext/boost/mpl/aux_/preprocessed/bcc/less.hpp +94 -0
  380. data/ext/boost/mpl/aux_/preprocessed/bcc/less_equal.hpp +94 -0
  381. data/ext/boost/mpl/aux_/preprocessed/bcc/list.hpp +323 -0
  382. data/ext/boost/mpl/aux_/preprocessed/bcc/list_c.hpp +328 -0
  383. data/ext/boost/mpl/aux_/preprocessed/bcc/map.hpp +323 -0
  384. data/ext/boost/mpl/aux_/preprocessed/bcc/minus.hpp +146 -0
  385. data/ext/boost/mpl/aux_/preprocessed/bcc/modulus.hpp +101 -0
  386. data/ext/boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp +94 -0
  387. data/ext/boost/mpl/aux_/preprocessed/bcc/or.hpp +69 -0
  388. data/ext/boost/mpl/aux_/preprocessed/bcc/placeholders.hpp +105 -0
  389. data/ext/boost/mpl/aux_/preprocessed/bcc/plus.hpp +146 -0
  390. data/ext/boost/mpl/aux_/preprocessed/bcc/quote.hpp +119 -0
  391. data/ext/boost/mpl/aux_/preprocessed/bcc/reverse_fold_impl.hpp +295 -0
  392. data/ext/boost/mpl/aux_/preprocessed/bcc/reverse_iter_fold_impl.hpp +295 -0
  393. data/ext/boost/mpl/aux_/preprocessed/bcc/set.hpp +323 -0
  394. data/ext/boost/mpl/aux_/preprocessed/bcc/set_c.hpp +328 -0
  395. data/ext/boost/mpl/aux_/preprocessed/bcc/shift_left.hpp +99 -0
  396. data/ext/boost/mpl/aux_/preprocessed/bcc/shift_right.hpp +99 -0
  397. data/ext/boost/mpl/aux_/preprocessed/bcc/template_arity.hpp +40 -0
  398. data/ext/boost/mpl/aux_/preprocessed/bcc/times.hpp +146 -0
  399. data/ext/boost/mpl/aux_/preprocessed/bcc/unpack_args.hpp +97 -0
  400. data/ext/boost/mpl/aux_/preprocessed/bcc/vector.hpp +323 -0
  401. data/ext/boost/mpl/aux_/preprocessed/bcc/vector_c.hpp +309 -0
  402. data/ext/boost/mpl/aux_/preprocessed/bcc551/advance_backward.hpp +97 -0
  403. data/ext/boost/mpl/aux_/preprocessed/bcc551/advance_forward.hpp +97 -0
  404. data/ext/boost/mpl/aux_/preprocessed/bcc551/and.hpp +69 -0
  405. data/ext/boost/mpl/aux_/preprocessed/bcc551/apply.hpp +169 -0
  406. data/ext/boost/mpl/aux_/preprocessed/bcc551/apply_fwd.hpp +52 -0
  407. data/ext/boost/mpl/aux_/preprocessed/bcc551/apply_wrap.hpp +456 -0
  408. data/ext/boost/mpl/aux_/preprocessed/bcc551/arg.hpp +123 -0
  409. data/ext/boost/mpl/aux_/preprocessed/bcc551/basic_bind.hpp +306 -0
  410. data/ext/boost/mpl/aux_/preprocessed/bcc551/bind.hpp +403 -0
  411. data/ext/boost/mpl/aux_/preprocessed/bcc551/bind_fwd.hpp +46 -0
  412. data/ext/boost/mpl/aux_/preprocessed/bcc551/bitand.hpp +147 -0
  413. data/ext/boost/mpl/aux_/preprocessed/bcc551/bitor.hpp +147 -0
  414. data/ext/boost/mpl/aux_/preprocessed/bcc551/bitxor.hpp +147 -0
  415. data/ext/boost/mpl/aux_/preprocessed/bcc551/deque.hpp +323 -0
  416. data/ext/boost/mpl/aux_/preprocessed/bcc551/divides.hpp +146 -0
  417. data/ext/boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp +94 -0
  418. data/ext/boost/mpl/aux_/preprocessed/bcc551/fold_impl.hpp +180 -0
  419. data/ext/boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp +558 -0
  420. data/ext/boost/mpl/aux_/preprocessed/bcc551/greater.hpp +94 -0
  421. data/ext/boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp +94 -0
  422. data/ext/boost/mpl/aux_/preprocessed/bcc551/inherit.hpp +141 -0
  423. data/ext/boost/mpl/aux_/preprocessed/bcc551/iter_fold_if_impl.hpp +133 -0
  424. data/ext/boost/mpl/aux_/preprocessed/bcc551/iter_fold_impl.hpp +180 -0
  425. data/ext/boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.hpp +229 -0
  426. data/ext/boost/mpl/aux_/preprocessed/bcc551/less.hpp +94 -0
  427. data/ext/boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp +94 -0
  428. data/ext/boost/mpl/aux_/preprocessed/bcc551/list.hpp +323 -0
  429. data/ext/boost/mpl/aux_/preprocessed/bcc551/list_c.hpp +328 -0
  430. data/ext/boost/mpl/aux_/preprocessed/bcc551/map.hpp +323 -0
  431. data/ext/boost/mpl/aux_/preprocessed/bcc551/minus.hpp +146 -0
  432. data/ext/boost/mpl/aux_/preprocessed/bcc551/modulus.hpp +101 -0
  433. data/ext/boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp +94 -0
  434. data/ext/boost/mpl/aux_/preprocessed/bcc551/or.hpp +69 -0
  435. data/ext/boost/mpl/aux_/preprocessed/bcc551/placeholders.hpp +105 -0
  436. data/ext/boost/mpl/aux_/preprocessed/bcc551/plus.hpp +146 -0
  437. data/ext/boost/mpl/aux_/preprocessed/bcc551/quote.hpp +11 -0
  438. data/ext/boost/mpl/aux_/preprocessed/bcc551/reverse_fold_impl.hpp +295 -0
  439. data/ext/boost/mpl/aux_/preprocessed/bcc551/reverse_iter_fold_impl.hpp +295 -0
  440. data/ext/boost/mpl/aux_/preprocessed/bcc551/set.hpp +323 -0
  441. data/ext/boost/mpl/aux_/preprocessed/bcc551/set_c.hpp +328 -0
  442. data/ext/boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp +99 -0
  443. data/ext/boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp +99 -0
  444. data/ext/boost/mpl/aux_/preprocessed/bcc551/template_arity.hpp +40 -0
  445. data/ext/boost/mpl/aux_/preprocessed/bcc551/times.hpp +146 -0
  446. data/ext/boost/mpl/aux_/preprocessed/bcc551/unpack_args.hpp +97 -0
  447. data/ext/boost/mpl/aux_/preprocessed/bcc551/vector.hpp +323 -0
  448. data/ext/boost/mpl/aux_/preprocessed/bcc551/vector_c.hpp +309 -0
  449. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/advance_backward.hpp +97 -0
  450. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/advance_forward.hpp +97 -0
  451. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/and.hpp +69 -0
  452. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/apply.hpp +169 -0
  453. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/apply_fwd.hpp +52 -0
  454. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/apply_wrap.hpp +456 -0
  455. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/arg.hpp +117 -0
  456. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/basic_bind.hpp +300 -0
  457. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/bind.hpp +397 -0
  458. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/bind_fwd.hpp +46 -0
  459. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/bitand.hpp +147 -0
  460. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/bitor.hpp +147 -0
  461. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/bitxor.hpp +147 -0
  462. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/deque.hpp +323 -0
  463. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/divides.hpp +146 -0
  464. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/equal_to.hpp +94 -0
  465. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/fold_impl.hpp +180 -0
  466. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/full_lambda.hpp +558 -0
  467. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/greater.hpp +94 -0
  468. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/greater_equal.hpp +94 -0
  469. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/inherit.hpp +139 -0
  470. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_if_impl.hpp +133 -0
  471. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_impl.hpp +180 -0
  472. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/lambda_no_ctps.hpp +229 -0
  473. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/less.hpp +94 -0
  474. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/less_equal.hpp +94 -0
  475. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/list.hpp +323 -0
  476. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/list_c.hpp +328 -0
  477. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/map.hpp +323 -0
  478. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/minus.hpp +146 -0
  479. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/modulus.hpp +101 -0
  480. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/not_equal_to.hpp +94 -0
  481. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/or.hpp +69 -0
  482. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/placeholders.hpp +105 -0
  483. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/plus.hpp +146 -0
  484. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/quote.hpp +11 -0
  485. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/reverse_fold_impl.hpp +295 -0
  486. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/reverse_iter_fold_impl.hpp +295 -0
  487. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/set.hpp +323 -0
  488. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/set_c.hpp +328 -0
  489. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/shift_left.hpp +99 -0
  490. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/shift_right.hpp +99 -0
  491. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/template_arity.hpp +40 -0
  492. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/times.hpp +146 -0
  493. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/unpack_args.hpp +97 -0
  494. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/vector.hpp +323 -0
  495. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/vector_c.hpp +309 -0
  496. data/ext/boost/mpl/aux_/preprocessed/dmc/advance_backward.hpp +97 -0
  497. data/ext/boost/mpl/aux_/preprocessed/dmc/advance_forward.hpp +97 -0
  498. data/ext/boost/mpl/aux_/preprocessed/dmc/and.hpp +69 -0
  499. data/ext/boost/mpl/aux_/preprocessed/dmc/apply.hpp +169 -0
  500. data/ext/boost/mpl/aux_/preprocessed/dmc/apply_fwd.hpp +52 -0
  501. data/ext/boost/mpl/aux_/preprocessed/dmc/apply_wrap.hpp +84 -0
  502. data/ext/boost/mpl/aux_/preprocessed/dmc/arg.hpp +123 -0
  503. data/ext/boost/mpl/aux_/preprocessed/dmc/basic_bind.hpp +406 -0
  504. data/ext/boost/mpl/aux_/preprocessed/dmc/bind.hpp +515 -0
  505. data/ext/boost/mpl/aux_/preprocessed/dmc/bind_fwd.hpp +53 -0
  506. data/ext/boost/mpl/aux_/preprocessed/dmc/bitand.hpp +147 -0
  507. data/ext/boost/mpl/aux_/preprocessed/dmc/bitor.hpp +147 -0
  508. data/ext/boost/mpl/aux_/preprocessed/dmc/bitxor.hpp +147 -0
  509. data/ext/boost/mpl/aux_/preprocessed/dmc/deque.hpp +323 -0
  510. data/ext/boost/mpl/aux_/preprocessed/dmc/divides.hpp +146 -0
  511. data/ext/boost/mpl/aux_/preprocessed/dmc/equal_to.hpp +94 -0
  512. data/ext/boost/mpl/aux_/preprocessed/dmc/fold_impl.hpp +180 -0
  513. data/ext/boost/mpl/aux_/preprocessed/dmc/full_lambda.hpp +536 -0
  514. data/ext/boost/mpl/aux_/preprocessed/dmc/greater.hpp +94 -0
  515. data/ext/boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp +94 -0
  516. data/ext/boost/mpl/aux_/preprocessed/dmc/inherit.hpp +141 -0
  517. data/ext/boost/mpl/aux_/preprocessed/dmc/iter_fold_if_impl.hpp +133 -0
  518. data/ext/boost/mpl/aux_/preprocessed/dmc/iter_fold_impl.hpp +180 -0
  519. data/ext/boost/mpl/aux_/preprocessed/dmc/lambda_no_ctps.hpp +229 -0
  520. data/ext/boost/mpl/aux_/preprocessed/dmc/less.hpp +94 -0
  521. data/ext/boost/mpl/aux_/preprocessed/dmc/less_equal.hpp +94 -0
  522. data/ext/boost/mpl/aux_/preprocessed/dmc/list.hpp +323 -0
  523. data/ext/boost/mpl/aux_/preprocessed/dmc/list_c.hpp +328 -0
  524. data/ext/boost/mpl/aux_/preprocessed/dmc/map.hpp +323 -0
  525. data/ext/boost/mpl/aux_/preprocessed/dmc/minus.hpp +146 -0
  526. data/ext/boost/mpl/aux_/preprocessed/dmc/modulus.hpp +101 -0
  527. data/ext/boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp +94 -0
  528. data/ext/boost/mpl/aux_/preprocessed/dmc/or.hpp +69 -0
  529. data/ext/boost/mpl/aux_/preprocessed/dmc/placeholders.hpp +105 -0
  530. data/ext/boost/mpl/aux_/preprocessed/dmc/plus.hpp +146 -0
  531. data/ext/boost/mpl/aux_/preprocessed/dmc/quote.hpp +123 -0
  532. data/ext/boost/mpl/aux_/preprocessed/dmc/reverse_fold_impl.hpp +231 -0
  533. data/ext/boost/mpl/aux_/preprocessed/dmc/reverse_iter_fold_impl.hpp +231 -0
  534. data/ext/boost/mpl/aux_/preprocessed/dmc/set.hpp +323 -0
  535. data/ext/boost/mpl/aux_/preprocessed/dmc/set_c.hpp +328 -0
  536. data/ext/boost/mpl/aux_/preprocessed/dmc/shift_left.hpp +99 -0
  537. data/ext/boost/mpl/aux_/preprocessed/dmc/shift_right.hpp +99 -0
  538. data/ext/boost/mpl/aux_/preprocessed/dmc/template_arity.hpp +11 -0
  539. data/ext/boost/mpl/aux_/preprocessed/dmc/times.hpp +146 -0
  540. data/ext/boost/mpl/aux_/preprocessed/dmc/unpack_args.hpp +94 -0
  541. data/ext/boost/mpl/aux_/preprocessed/dmc/vector.hpp +323 -0
  542. data/ext/boost/mpl/aux_/preprocessed/dmc/vector_c.hpp +309 -0
  543. data/ext/boost/mpl/aux_/preprocessed/gcc/basic_bind.hpp +440 -0
  544. data/ext/boost/mpl/aux_/preprocessed/gcc/bitand.hpp +147 -0
  545. data/ext/boost/mpl/aux_/preprocessed/gcc/bitor.hpp +147 -0
  546. data/ext/boost/mpl/aux_/preprocessed/gcc/bitxor.hpp +147 -0
  547. data/ext/boost/mpl/aux_/preprocessed/gcc/deque.hpp +323 -0
  548. data/ext/boost/mpl/aux_/preprocessed/gcc/divides.hpp +146 -0
  549. data/ext/boost/mpl/aux_/preprocessed/gcc/inherit.hpp +141 -0
  550. data/ext/boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp +229 -0
  551. data/ext/boost/mpl/aux_/preprocessed/gcc/list_c.hpp +328 -0
  552. data/ext/boost/mpl/aux_/preprocessed/gcc/map.hpp +323 -0
  553. data/ext/boost/mpl/aux_/preprocessed/gcc/modulus.hpp +101 -0
  554. data/ext/boost/mpl/aux_/preprocessed/gcc/reverse_iter_fold_impl.hpp +231 -0
  555. data/ext/boost/mpl/aux_/preprocessed/gcc/set.hpp +323 -0
  556. data/ext/boost/mpl/aux_/preprocessed/gcc/set_c.hpp +328 -0
  557. data/ext/boost/mpl/aux_/preprocessed/gcc/shift_left.hpp +99 -0
  558. data/ext/boost/mpl/aux_/preprocessed/gcc/shift_right.hpp +99 -0
  559. data/ext/boost/mpl/aux_/preprocessed/gcc/unpack_args.hpp +94 -0
  560. data/ext/boost/mpl/aux_/preprocessed/gcc/vector_c.hpp +309 -0
  561. data/ext/boost/mpl/aux_/preprocessed/msvc60/advance_backward.hpp +132 -0
  562. data/ext/boost/mpl/aux_/preprocessed/msvc60/advance_forward.hpp +132 -0
  563. data/ext/boost/mpl/aux_/preprocessed/msvc60/and.hpp +73 -0
  564. data/ext/boost/mpl/aux_/preprocessed/msvc60/apply.hpp +166 -0
  565. data/ext/boost/mpl/aux_/preprocessed/msvc60/apply_fwd.hpp +46 -0
  566. data/ext/boost/mpl/aux_/preprocessed/msvc60/apply_wrap.hpp +247 -0
  567. data/ext/boost/mpl/aux_/preprocessed/msvc60/arg.hpp +123 -0
  568. data/ext/boost/mpl/aux_/preprocessed/msvc60/basic_bind.hpp +328 -0
  569. data/ext/boost/mpl/aux_/preprocessed/msvc60/bind.hpp +432 -0
  570. data/ext/boost/mpl/aux_/preprocessed/msvc60/bind_fwd.hpp +46 -0
  571. data/ext/boost/mpl/aux_/preprocessed/msvc60/bitand.hpp +149 -0
  572. data/ext/boost/mpl/aux_/preprocessed/msvc60/bitor.hpp +149 -0
  573. data/ext/boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp +149 -0
  574. data/ext/boost/mpl/aux_/preprocessed/msvc60/deque.hpp +556 -0
  575. data/ext/boost/mpl/aux_/preprocessed/msvc60/divides.hpp +148 -0
  576. data/ext/boost/mpl/aux_/preprocessed/msvc60/equal_to.hpp +102 -0
  577. data/ext/boost/mpl/aux_/preprocessed/msvc60/fold_impl.hpp +293 -0
  578. data/ext/boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp +554 -0
  579. data/ext/boost/mpl/aux_/preprocessed/msvc60/greater.hpp +102 -0
  580. data/ext/boost/mpl/aux_/preprocessed/msvc60/greater_equal.hpp +102 -0
  581. data/ext/boost/mpl/aux_/preprocessed/msvc60/inherit.hpp +166 -0
  582. data/ext/boost/mpl/aux_/preprocessed/msvc60/iter_fold_if_impl.hpp +133 -0
  583. data/ext/boost/mpl/aux_/preprocessed/msvc60/iter_fold_impl.hpp +293 -0
  584. data/ext/boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.hpp +229 -0
  585. data/ext/boost/mpl/aux_/preprocessed/msvc60/less.hpp +102 -0
  586. data/ext/boost/mpl/aux_/preprocessed/msvc60/less_equal.hpp +102 -0
  587. data/ext/boost/mpl/aux_/preprocessed/msvc60/list.hpp +556 -0
  588. data/ext/boost/mpl/aux_/preprocessed/msvc60/list_c.hpp +534 -0
  589. data/ext/boost/mpl/aux_/preprocessed/msvc60/map.hpp +556 -0
  590. data/ext/boost/mpl/aux_/preprocessed/msvc60/minus.hpp +148 -0
  591. data/ext/boost/mpl/aux_/preprocessed/msvc60/modulus.hpp +115 -0
  592. data/ext/boost/mpl/aux_/preprocessed/msvc60/not_equal_to.hpp +102 -0
  593. data/ext/boost/mpl/aux_/preprocessed/msvc60/or.hpp +73 -0
  594. data/ext/boost/mpl/aux_/preprocessed/msvc60/placeholders.hpp +105 -0
  595. data/ext/boost/mpl/aux_/preprocessed/msvc60/plus.hpp +148 -0
  596. data/ext/boost/mpl/aux_/preprocessed/msvc60/quote.hpp +11 -0
  597. data/ext/boost/mpl/aux_/preprocessed/msvc60/reverse_fold_impl.hpp +343 -0
  598. data/ext/boost/mpl/aux_/preprocessed/msvc60/reverse_iter_fold_impl.hpp +343 -0
  599. data/ext/boost/mpl/aux_/preprocessed/msvc60/set.hpp +556 -0
  600. data/ext/boost/mpl/aux_/preprocessed/msvc60/set_c.hpp +534 -0
  601. data/ext/boost/mpl/aux_/preprocessed/msvc60/shift_left.hpp +114 -0
  602. data/ext/boost/mpl/aux_/preprocessed/msvc60/shift_right.hpp +114 -0
  603. data/ext/boost/mpl/aux_/preprocessed/msvc60/template_arity.hpp +46 -0
  604. data/ext/boost/mpl/aux_/preprocessed/msvc60/times.hpp +148 -0
  605. data/ext/boost/mpl/aux_/preprocessed/msvc60/unpack_args.hpp +109 -0
  606. data/ext/boost/mpl/aux_/preprocessed/msvc60/vector.hpp +556 -0
  607. data/ext/boost/mpl/aux_/preprocessed/msvc60/vector_c.hpp +534 -0
  608. data/ext/boost/mpl/aux_/preprocessed/msvc70/advance_backward.hpp +97 -0
  609. data/ext/boost/mpl/aux_/preprocessed/msvc70/advance_forward.hpp +97 -0
  610. data/ext/boost/mpl/aux_/preprocessed/msvc70/and.hpp +71 -0
  611. data/ext/boost/mpl/aux_/preprocessed/msvc70/apply.hpp +160 -0
  612. data/ext/boost/mpl/aux_/preprocessed/msvc70/apply_fwd.hpp +46 -0
  613. data/ext/boost/mpl/aux_/preprocessed/msvc70/apply_wrap.hpp +138 -0
  614. data/ext/boost/mpl/aux_/preprocessed/msvc70/arg.hpp +123 -0
  615. data/ext/boost/mpl/aux_/preprocessed/msvc70/basic_bind.hpp +328 -0
  616. data/ext/boost/mpl/aux_/preprocessed/msvc70/bind.hpp +432 -0
  617. data/ext/boost/mpl/aux_/preprocessed/msvc70/bind_fwd.hpp +46 -0
  618. data/ext/boost/mpl/aux_/preprocessed/msvc70/bitand.hpp +151 -0
  619. data/ext/boost/mpl/aux_/preprocessed/msvc70/bitor.hpp +151 -0
  620. data/ext/boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp +151 -0
  621. data/ext/boost/mpl/aux_/preprocessed/msvc70/deque.hpp +556 -0
  622. data/ext/boost/mpl/aux_/preprocessed/msvc70/divides.hpp +150 -0
  623. data/ext/boost/mpl/aux_/preprocessed/msvc70/equal_to.hpp +102 -0
  624. data/ext/boost/mpl/aux_/preprocessed/msvc70/fold_impl.hpp +245 -0
  625. data/ext/boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp +554 -0
  626. data/ext/boost/mpl/aux_/preprocessed/msvc70/greater.hpp +102 -0
  627. data/ext/boost/mpl/aux_/preprocessed/msvc70/greater_equal.hpp +102 -0
  628. data/ext/boost/mpl/aux_/preprocessed/msvc70/inherit.hpp +166 -0
  629. data/ext/boost/mpl/aux_/preprocessed/msvc70/iter_fold_if_impl.hpp +133 -0
  630. data/ext/boost/mpl/aux_/preprocessed/msvc70/iter_fold_impl.hpp +245 -0
  631. data/ext/boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.hpp +229 -0
  632. data/ext/boost/mpl/aux_/preprocessed/msvc70/less.hpp +102 -0
  633. data/ext/boost/mpl/aux_/preprocessed/msvc70/less_equal.hpp +102 -0
  634. data/ext/boost/mpl/aux_/preprocessed/msvc70/list.hpp +556 -0
  635. data/ext/boost/mpl/aux_/preprocessed/msvc70/list_c.hpp +534 -0
  636. data/ext/boost/mpl/aux_/preprocessed/msvc70/map.hpp +556 -0
  637. data/ext/boost/mpl/aux_/preprocessed/msvc70/minus.hpp +150 -0
  638. data/ext/boost/mpl/aux_/preprocessed/msvc70/modulus.hpp +115 -0
  639. data/ext/boost/mpl/aux_/preprocessed/msvc70/not_equal_to.hpp +102 -0
  640. data/ext/boost/mpl/aux_/preprocessed/msvc70/or.hpp +71 -0
  641. data/ext/boost/mpl/aux_/preprocessed/msvc70/placeholders.hpp +105 -0
  642. data/ext/boost/mpl/aux_/preprocessed/msvc70/plus.hpp +150 -0
  643. data/ext/boost/mpl/aux_/preprocessed/msvc70/quote.hpp +116 -0
  644. data/ext/boost/mpl/aux_/preprocessed/msvc70/reverse_fold_impl.hpp +295 -0
  645. data/ext/boost/mpl/aux_/preprocessed/msvc70/reverse_iter_fold_impl.hpp +295 -0
  646. data/ext/boost/mpl/aux_/preprocessed/msvc70/set.hpp +556 -0
  647. data/ext/boost/mpl/aux_/preprocessed/msvc70/set_c.hpp +534 -0
  648. data/ext/boost/mpl/aux_/preprocessed/msvc70/shift_left.hpp +114 -0
  649. data/ext/boost/mpl/aux_/preprocessed/msvc70/shift_right.hpp +114 -0
  650. data/ext/boost/mpl/aux_/preprocessed/msvc70/template_arity.hpp +46 -0
  651. data/ext/boost/mpl/aux_/preprocessed/msvc70/times.hpp +150 -0
  652. data/ext/boost/mpl/aux_/preprocessed/msvc70/unpack_args.hpp +109 -0
  653. data/ext/boost/mpl/aux_/preprocessed/msvc70/vector.hpp +556 -0
  654. data/ext/boost/mpl/aux_/preprocessed/msvc70/vector_c.hpp +534 -0
  655. data/ext/boost/mpl/aux_/preprocessed/mwcw/advance_backward.hpp +97 -0
  656. data/ext/boost/mpl/aux_/preprocessed/mwcw/advance_forward.hpp +97 -0
  657. data/ext/boost/mpl/aux_/preprocessed/mwcw/and.hpp +69 -0
  658. data/ext/boost/mpl/aux_/preprocessed/mwcw/apply.hpp +169 -0
  659. data/ext/boost/mpl/aux_/preprocessed/mwcw/apply_fwd.hpp +52 -0
  660. data/ext/boost/mpl/aux_/preprocessed/mwcw/apply_wrap.hpp +456 -0
  661. data/ext/boost/mpl/aux_/preprocessed/mwcw/arg.hpp +123 -0
  662. data/ext/boost/mpl/aux_/preprocessed/mwcw/basic_bind.hpp +440 -0
  663. data/ext/boost/mpl/aux_/preprocessed/mwcw/bind.hpp +561 -0
  664. data/ext/boost/mpl/aux_/preprocessed/mwcw/bind_fwd.hpp +52 -0
  665. data/ext/boost/mpl/aux_/preprocessed/mwcw/bitand.hpp +147 -0
  666. data/ext/boost/mpl/aux_/preprocessed/mwcw/bitor.hpp +147 -0
  667. data/ext/boost/mpl/aux_/preprocessed/mwcw/bitxor.hpp +147 -0
  668. data/ext/boost/mpl/aux_/preprocessed/mwcw/deque.hpp +323 -0
  669. data/ext/boost/mpl/aux_/preprocessed/mwcw/divides.hpp +146 -0
  670. data/ext/boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp +94 -0
  671. data/ext/boost/mpl/aux_/preprocessed/mwcw/fold_impl.hpp +180 -0
  672. data/ext/boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp +554 -0
  673. data/ext/boost/mpl/aux_/preprocessed/mwcw/greater.hpp +94 -0
  674. data/ext/boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp +94 -0
  675. data/ext/boost/mpl/aux_/preprocessed/mwcw/inherit.hpp +141 -0
  676. data/ext/boost/mpl/aux_/preprocessed/mwcw/iter_fold_if_impl.hpp +133 -0
  677. data/ext/boost/mpl/aux_/preprocessed/mwcw/iter_fold_impl.hpp +180 -0
  678. data/ext/boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp +229 -0
  679. data/ext/boost/mpl/aux_/preprocessed/mwcw/less.hpp +94 -0
  680. data/ext/boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp +94 -0
  681. data/ext/boost/mpl/aux_/preprocessed/mwcw/list.hpp +323 -0
  682. data/ext/boost/mpl/aux_/preprocessed/mwcw/list_c.hpp +328 -0
  683. data/ext/boost/mpl/aux_/preprocessed/mwcw/map.hpp +323 -0
  684. data/ext/boost/mpl/aux_/preprocessed/mwcw/minus.hpp +146 -0
  685. data/ext/boost/mpl/aux_/preprocessed/mwcw/modulus.hpp +101 -0
  686. data/ext/boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp +94 -0
  687. data/ext/boost/mpl/aux_/preprocessed/mwcw/or.hpp +69 -0
  688. data/ext/boost/mpl/aux_/preprocessed/mwcw/placeholders.hpp +105 -0
  689. data/ext/boost/mpl/aux_/preprocessed/mwcw/plus.hpp +146 -0
  690. data/ext/boost/mpl/aux_/preprocessed/mwcw/quote.hpp +123 -0
  691. data/ext/boost/mpl/aux_/preprocessed/mwcw/reverse_fold_impl.hpp +231 -0
  692. data/ext/boost/mpl/aux_/preprocessed/mwcw/reverse_iter_fold_impl.hpp +231 -0
  693. data/ext/boost/mpl/aux_/preprocessed/mwcw/set.hpp +323 -0
  694. data/ext/boost/mpl/aux_/preprocessed/mwcw/set_c.hpp +328 -0
  695. data/ext/boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp +99 -0
  696. data/ext/boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp +99 -0
  697. data/ext/boost/mpl/aux_/preprocessed/mwcw/template_arity.hpp +11 -0
  698. data/ext/boost/mpl/aux_/preprocessed/mwcw/times.hpp +146 -0
  699. data/ext/boost/mpl/aux_/preprocessed/mwcw/unpack_args.hpp +94 -0
  700. data/ext/boost/mpl/aux_/preprocessed/mwcw/vector.hpp +323 -0
  701. data/ext/boost/mpl/aux_/preprocessed/mwcw/vector_c.hpp +309 -0
  702. data/ext/boost/mpl/aux_/preprocessed/no_ctps/advance_backward.hpp +97 -0
  703. data/ext/boost/mpl/aux_/preprocessed/no_ctps/advance_forward.hpp +97 -0
  704. data/ext/boost/mpl/aux_/preprocessed/no_ctps/and.hpp +73 -0
  705. data/ext/boost/mpl/aux_/preprocessed/no_ctps/apply.hpp +268 -0
  706. data/ext/boost/mpl/aux_/preprocessed/no_ctps/apply_fwd.hpp +50 -0
  707. data/ext/boost/mpl/aux_/preprocessed/no_ctps/apply_wrap.hpp +78 -0
  708. data/ext/boost/mpl/aux_/preprocessed/no_ctps/arg.hpp +123 -0
  709. data/ext/boost/mpl/aux_/preprocessed/no_ctps/basic_bind.hpp +486 -0
  710. data/ext/boost/mpl/aux_/preprocessed/no_ctps/bind.hpp +590 -0
  711. data/ext/boost/mpl/aux_/preprocessed/no_ctps/bind_fwd.hpp +52 -0
  712. data/ext/boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp +134 -0
  713. data/ext/boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp +134 -0
  714. data/ext/boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp +134 -0
  715. data/ext/boost/mpl/aux_/preprocessed/no_ctps/deque.hpp +556 -0
  716. data/ext/boost/mpl/aux_/preprocessed/no_ctps/divides.hpp +133 -0
  717. data/ext/boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp +94 -0
  718. data/ext/boost/mpl/aux_/preprocessed/no_ctps/fold_impl.hpp +245 -0
  719. data/ext/boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp +554 -0
  720. data/ext/boost/mpl/aux_/preprocessed/no_ctps/greater.hpp +94 -0
  721. data/ext/boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp +94 -0
  722. data/ext/boost/mpl/aux_/preprocessed/no_ctps/inherit.hpp +166 -0
  723. data/ext/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_if_impl.hpp +133 -0
  724. data/ext/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_impl.hpp +245 -0
  725. data/ext/boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.hpp +229 -0
  726. data/ext/boost/mpl/aux_/preprocessed/no_ctps/less.hpp +94 -0
  727. data/ext/boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp +94 -0
  728. data/ext/boost/mpl/aux_/preprocessed/no_ctps/list.hpp +556 -0
  729. data/ext/boost/mpl/aux_/preprocessed/no_ctps/list_c.hpp +534 -0
  730. data/ext/boost/mpl/aux_/preprocessed/no_ctps/map.hpp +556 -0
  731. data/ext/boost/mpl/aux_/preprocessed/no_ctps/minus.hpp +133 -0
  732. data/ext/boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp +101 -0
  733. data/ext/boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp +94 -0
  734. data/ext/boost/mpl/aux_/preprocessed/no_ctps/or.hpp +73 -0
  735. data/ext/boost/mpl/aux_/preprocessed/no_ctps/placeholders.hpp +105 -0
  736. data/ext/boost/mpl/aux_/preprocessed/no_ctps/plus.hpp +133 -0
  737. data/ext/boost/mpl/aux_/preprocessed/no_ctps/quote.hpp +116 -0
  738. data/ext/boost/mpl/aux_/preprocessed/no_ctps/reverse_fold_impl.hpp +295 -0
  739. data/ext/boost/mpl/aux_/preprocessed/no_ctps/reverse_iter_fold_impl.hpp +295 -0
  740. data/ext/boost/mpl/aux_/preprocessed/no_ctps/set.hpp +556 -0
  741. data/ext/boost/mpl/aux_/preprocessed/no_ctps/set_c.hpp +534 -0
  742. data/ext/boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp +99 -0
  743. data/ext/boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp +99 -0
  744. data/ext/boost/mpl/aux_/preprocessed/no_ctps/template_arity.hpp +40 -0
  745. data/ext/boost/mpl/aux_/preprocessed/no_ctps/times.hpp +133 -0
  746. data/ext/boost/mpl/aux_/preprocessed/no_ctps/unpack_args.hpp +109 -0
  747. data/ext/boost/mpl/aux_/preprocessed/no_ctps/vector.hpp +556 -0
  748. data/ext/boost/mpl/aux_/preprocessed/no_ctps/vector_c.hpp +534 -0
  749. data/ext/boost/mpl/aux_/preprocessed/no_ttp/advance_backward.hpp +97 -0
  750. data/ext/boost/mpl/aux_/preprocessed/no_ttp/advance_forward.hpp +97 -0
  751. data/ext/boost/mpl/aux_/preprocessed/no_ttp/and.hpp +69 -0
  752. data/ext/boost/mpl/aux_/preprocessed/no_ttp/apply.hpp +169 -0
  753. data/ext/boost/mpl/aux_/preprocessed/no_ttp/apply_fwd.hpp +52 -0
  754. data/ext/boost/mpl/aux_/preprocessed/no_ttp/apply_wrap.hpp +84 -0
  755. data/ext/boost/mpl/aux_/preprocessed/no_ttp/arg.hpp +123 -0
  756. data/ext/boost/mpl/aux_/preprocessed/no_ttp/basic_bind.hpp +369 -0
  757. data/ext/boost/mpl/aux_/preprocessed/no_ttp/bind.hpp +466 -0
  758. data/ext/boost/mpl/aux_/preprocessed/no_ttp/bind_fwd.hpp +52 -0
  759. data/ext/boost/mpl/aux_/preprocessed/no_ttp/bitand.hpp +157 -0
  760. data/ext/boost/mpl/aux_/preprocessed/no_ttp/bitor.hpp +157 -0
  761. data/ext/boost/mpl/aux_/preprocessed/no_ttp/bitxor.hpp +157 -0
  762. data/ext/boost/mpl/aux_/preprocessed/no_ttp/deque.hpp +323 -0
  763. data/ext/boost/mpl/aux_/preprocessed/no_ttp/divides.hpp +156 -0
  764. data/ext/boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp +98 -0
  765. data/ext/boost/mpl/aux_/preprocessed/no_ttp/fold_impl.hpp +180 -0
  766. data/ext/boost/mpl/aux_/preprocessed/no_ttp/full_lambda.hpp +554 -0
  767. data/ext/boost/mpl/aux_/preprocessed/no_ttp/greater.hpp +98 -0
  768. data/ext/boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp +98 -0
  769. data/ext/boost/mpl/aux_/preprocessed/no_ttp/inherit.hpp +141 -0
  770. data/ext/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_if_impl.hpp +133 -0
  771. data/ext/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_impl.hpp +180 -0
  772. data/ext/boost/mpl/aux_/preprocessed/no_ttp/lambda_no_ctps.hpp +229 -0
  773. data/ext/boost/mpl/aux_/preprocessed/no_ttp/less.hpp +98 -0
  774. data/ext/boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp +98 -0
  775. data/ext/boost/mpl/aux_/preprocessed/no_ttp/list.hpp +323 -0
  776. data/ext/boost/mpl/aux_/preprocessed/no_ttp/list_c.hpp +328 -0
  777. data/ext/boost/mpl/aux_/preprocessed/no_ttp/map.hpp +323 -0
  778. data/ext/boost/mpl/aux_/preprocessed/no_ttp/minus.hpp +156 -0
  779. data/ext/boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp +111 -0
  780. data/ext/boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp +98 -0
  781. data/ext/boost/mpl/aux_/preprocessed/no_ttp/or.hpp +69 -0
  782. data/ext/boost/mpl/aux_/preprocessed/no_ttp/placeholders.hpp +105 -0
  783. data/ext/boost/mpl/aux_/preprocessed/no_ttp/plus.hpp +156 -0
  784. data/ext/boost/mpl/aux_/preprocessed/no_ttp/quote.hpp +11 -0
  785. data/ext/boost/mpl/aux_/preprocessed/no_ttp/reverse_fold_impl.hpp +231 -0
  786. data/ext/boost/mpl/aux_/preprocessed/no_ttp/reverse_iter_fold_impl.hpp +231 -0
  787. data/ext/boost/mpl/aux_/preprocessed/no_ttp/set.hpp +323 -0
  788. data/ext/boost/mpl/aux_/preprocessed/no_ttp/set_c.hpp +328 -0
  789. data/ext/boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp +110 -0
  790. data/ext/boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp +110 -0
  791. data/ext/boost/mpl/aux_/preprocessed/no_ttp/template_arity.hpp +40 -0
  792. data/ext/boost/mpl/aux_/preprocessed/no_ttp/times.hpp +156 -0
  793. data/ext/boost/mpl/aux_/preprocessed/no_ttp/unpack_args.hpp +94 -0
  794. data/ext/boost/mpl/aux_/preprocessed/no_ttp/vector.hpp +323 -0
  795. data/ext/boost/mpl/aux_/preprocessed/no_ttp/vector_c.hpp +309 -0
  796. data/ext/boost/mpl/aux_/preprocessed/plain/advance_backward.hpp +97 -0
  797. data/ext/boost/mpl/aux_/preprocessed/plain/advance_forward.hpp +97 -0
  798. data/ext/boost/mpl/aux_/preprocessed/plain/and.hpp +64 -0
  799. data/ext/boost/mpl/aux_/preprocessed/plain/apply.hpp +139 -0
  800. data/ext/boost/mpl/aux_/preprocessed/plain/apply_fwd.hpp +52 -0
  801. data/ext/boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp +84 -0
  802. data/ext/boost/mpl/aux_/preprocessed/plain/arg.hpp +123 -0
  803. data/ext/boost/mpl/aux_/preprocessed/plain/basic_bind.hpp +440 -0
  804. data/ext/boost/mpl/aux_/preprocessed/plain/bind.hpp +561 -0
  805. data/ext/boost/mpl/aux_/preprocessed/plain/bind_fwd.hpp +52 -0
  806. data/ext/boost/mpl/aux_/preprocessed/plain/bitand.hpp +142 -0
  807. data/ext/boost/mpl/aux_/preprocessed/plain/bitor.hpp +142 -0
  808. data/ext/boost/mpl/aux_/preprocessed/plain/bitxor.hpp +142 -0
  809. data/ext/boost/mpl/aux_/preprocessed/plain/deque.hpp +323 -0
  810. data/ext/boost/mpl/aux_/preprocessed/plain/divides.hpp +141 -0
  811. data/ext/boost/mpl/aux_/preprocessed/plain/equal_to.hpp +92 -0
  812. data/ext/boost/mpl/aux_/preprocessed/plain/fold_impl.hpp +180 -0
  813. data/ext/boost/mpl/aux_/preprocessed/plain/full_lambda.hpp +554 -0
  814. data/ext/boost/mpl/aux_/preprocessed/plain/greater.hpp +92 -0
  815. data/ext/boost/mpl/aux_/preprocessed/plain/greater_equal.hpp +92 -0
  816. data/ext/boost/mpl/aux_/preprocessed/plain/inherit.hpp +125 -0
  817. data/ext/boost/mpl/aux_/preprocessed/plain/iter_fold_if_impl.hpp +133 -0
  818. data/ext/boost/mpl/aux_/preprocessed/plain/iter_fold_impl.hpp +180 -0
  819. data/ext/boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp +228 -0
  820. data/ext/boost/mpl/aux_/preprocessed/plain/less.hpp +92 -0
  821. data/ext/boost/mpl/aux_/preprocessed/plain/less_equal.hpp +92 -0
  822. data/ext/boost/mpl/aux_/preprocessed/plain/list.hpp +323 -0
  823. data/ext/boost/mpl/aux_/preprocessed/plain/list_c.hpp +328 -0
  824. data/ext/boost/mpl/aux_/preprocessed/plain/map.hpp +323 -0
  825. data/ext/boost/mpl/aux_/preprocessed/plain/minus.hpp +141 -0
  826. data/ext/boost/mpl/aux_/preprocessed/plain/modulus.hpp +99 -0
  827. data/ext/boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp +92 -0
  828. data/ext/boost/mpl/aux_/preprocessed/plain/or.hpp +64 -0
  829. data/ext/boost/mpl/aux_/preprocessed/plain/placeholders.hpp +105 -0
  830. data/ext/boost/mpl/aux_/preprocessed/plain/plus.hpp +141 -0
  831. data/ext/boost/mpl/aux_/preprocessed/plain/quote.hpp +123 -0
  832. data/ext/boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp +231 -0
  833. data/ext/boost/mpl/aux_/preprocessed/plain/reverse_iter_fold_impl.hpp +231 -0
  834. data/ext/boost/mpl/aux_/preprocessed/plain/set.hpp +323 -0
  835. data/ext/boost/mpl/aux_/preprocessed/plain/set_c.hpp +328 -0
  836. data/ext/boost/mpl/aux_/preprocessed/plain/shift_left.hpp +97 -0
  837. data/ext/boost/mpl/aux_/preprocessed/plain/shift_right.hpp +97 -0
  838. data/ext/boost/mpl/aux_/preprocessed/plain/template_arity.hpp +11 -0
  839. data/ext/boost/mpl/aux_/preprocessed/plain/times.hpp +141 -0
  840. data/ext/boost/mpl/aux_/preprocessed/plain/unpack_args.hpp +94 -0
  841. data/ext/boost/mpl/aux_/preprocessed/plain/vector.hpp +323 -0
  842. data/ext/boost/mpl/aux_/preprocessed/plain/vector_c.hpp +309 -0
  843. data/ext/boost/mpl/aux_/preprocessor/add.hpp +65 -0
  844. data/ext/boost/mpl/aux_/preprocessor/def_params_tail.hpp +1 -1
  845. data/ext/boost/mpl/aux_/preprocessor/default_params.hpp +1 -1
  846. data/ext/boost/mpl/aux_/preprocessor/enum.hpp +1 -1
  847. data/ext/boost/mpl/aux_/preprocessor/ext_params.hpp +78 -0
  848. data/ext/boost/mpl/aux_/preprocessor/filter_params.hpp +1 -1
  849. data/ext/boost/mpl/aux_/preprocessor/is_seq.hpp +54 -0
  850. data/ext/boost/mpl/aux_/preprocessor/params.hpp +1 -1
  851. data/ext/boost/mpl/aux_/preprocessor/partial_spec_params.hpp +32 -0
  852. data/ext/boost/mpl/aux_/preprocessor/range.hpp +23 -0
  853. data/ext/boost/mpl/aux_/preprocessor/repeat.hpp +51 -0
  854. data/ext/boost/mpl/aux_/preprocessor/sub.hpp +1 -1
  855. data/ext/boost/mpl/aux_/preprocessor/token_equal.hpp +56 -0
  856. data/ext/boost/mpl/aux_/preprocessor/tuple.hpp +29 -0
  857. data/ext/boost/mpl/aux_/ptr_to_ref.hpp +46 -0
  858. data/ext/boost/mpl/aux_/push_back_impl.hpp +1 -1
  859. data/ext/boost/mpl/aux_/push_front_impl.hpp +1 -1
  860. data/ext/boost/mpl/aux_/range_c/O1_size.hpp +31 -0
  861. data/ext/boost/mpl/aux_/range_c/back.hpp +34 -0
  862. data/ext/boost/mpl/aux_/range_c/empty.hpp +37 -0
  863. data/ext/boost/mpl/aux_/range_c/front.hpp +33 -0
  864. data/ext/boost/mpl/aux_/range_c/iterator.hpp +106 -0
  865. data/ext/boost/mpl/aux_/range_c/size.hpp +37 -0
  866. data/ext/boost/mpl/aux_/range_c/tag.hpp +24 -0
  867. data/ext/boost/mpl/aux_/reverse_fold_impl.hpp +1 -1
  868. data/ext/boost/mpl/aux_/reverse_fold_impl_body.hpp +412 -0
  869. data/ext/boost/mpl/aux_/reverse_iter_fold_impl.hpp +43 -0
  870. data/ext/boost/mpl/aux_/sequence_wrapper.hpp +292 -0
  871. data/ext/boost/mpl/aux_/shift_op.hpp +87 -0
  872. data/ext/boost/mpl/aux_/single_element_iter.hpp +118 -0
  873. data/ext/boost/mpl/aux_/size_impl.hpp +1 -1
  874. data/ext/boost/mpl/aux_/sort_impl.hpp +121 -0
  875. data/ext/boost/mpl/aux_/static_cast.hpp +1 -1
  876. data/ext/boost/mpl/aux_/template_arity.hpp +1 -1
  877. data/ext/boost/mpl/aux_/template_arity_fwd.hpp +1 -1
  878. data/ext/boost/mpl/aux_/test.hpp +32 -0
  879. data/ext/boost/mpl/aux_/test/assert.hpp +29 -0
  880. data/ext/boost/mpl/aux_/test/data.hpp +25 -0
  881. data/ext/boost/mpl/aux_/test/test_case.hpp +21 -0
  882. data/ext/boost/mpl/aux_/traits_lambda_spec.hpp +1 -1
  883. data/ext/boost/mpl/aux_/transform_iter.hpp +123 -0
  884. data/ext/boost/mpl/aux_/type_wrapper.hpp +1 -1
  885. data/ext/boost/mpl/aux_/unwrap.hpp +47 -0
  886. data/ext/boost/mpl/aux_/value_wknd.hpp +1 -1
  887. data/ext/boost/mpl/aux_/yes_no.hpp +1 -1
  888. data/ext/boost/mpl/back.hpp +39 -0
  889. data/ext/boost/mpl/back_fwd.hpp +1 -1
  890. data/ext/boost/mpl/back_inserter.hpp +1 -1
  891. data/ext/boost/mpl/base.hpp +35 -0
  892. data/ext/boost/mpl/begin.hpp +19 -0
  893. data/ext/boost/mpl/begin_end.hpp +1 -1
  894. data/ext/boost/mpl/begin_end_fwd.hpp +1 -1
  895. data/ext/boost/mpl/bind.hpp +1 -1
  896. data/ext/boost/mpl/bind_fwd.hpp +1 -1
  897. data/ext/boost/mpl/bitand.hpp +45 -0
  898. data/ext/boost/mpl/bitor.hpp +45 -0
  899. data/ext/boost/mpl/bitwise.hpp +24 -0
  900. data/ext/boost/mpl/bitxor.hpp +23 -0
  901. data/ext/boost/mpl/bool.hpp +1 -1
  902. data/ext/boost/mpl/bool_fwd.hpp +1 -1
  903. data/ext/boost/mpl/char.hpp +22 -0
  904. data/ext/boost/mpl/char_fwd.hpp +27 -0
  905. data/ext/boost/mpl/clear.hpp +1 -1
  906. data/ext/boost/mpl/clear_fwd.hpp +1 -1
  907. data/ext/boost/mpl/comparison.hpp +1 -1
  908. data/ext/boost/mpl/contains.hpp +1 -1
  909. data/ext/boost/mpl/contains_fwd.hpp +1 -1
  910. data/ext/boost/mpl/copy.hpp +58 -0
  911. data/ext/boost/mpl/copy_if.hpp +96 -0
  912. data/ext/boost/mpl/count.hpp +40 -0
  913. data/ext/boost/mpl/count_fwd.hpp +24 -0
  914. data/ext/boost/mpl/count_if.hpp +79 -0
  915. data/ext/boost/mpl/deque.hpp +58 -0
  916. data/ext/boost/mpl/deref.hpp +1 -1
  917. data/ext/boost/mpl/distance.hpp +1 -1
  918. data/ext/boost/mpl/distance_fwd.hpp +1 -1
  919. data/ext/boost/mpl/divides.hpp +21 -0
  920. data/ext/boost/mpl/empty.hpp +39 -0
  921. data/ext/boost/mpl/empty_base.hpp +59 -0
  922. data/ext/boost/mpl/empty_fwd.hpp +1 -1
  923. data/ext/boost/mpl/empty_sequence.hpp +42 -0
  924. data/ext/boost/mpl/end.hpp +19 -0
  925. data/ext/boost/mpl/equal.hpp +112 -0
  926. data/ext/boost/mpl/equal_to.hpp +1 -1
  927. data/ext/boost/mpl/erase.hpp +42 -0
  928. data/ext/boost/mpl/erase_fwd.hpp +24 -0
  929. data/ext/boost/mpl/erase_key.hpp +41 -0
  930. data/ext/boost/mpl/erase_key_fwd.hpp +24 -0
  931. data/ext/boost/mpl/eval_if.hpp +1 -1
  932. data/ext/boost/mpl/filter_view.hpp +46 -0
  933. data/ext/boost/mpl/find.hpp +1 -1
  934. data/ext/boost/mpl/find_if.hpp +1 -1
  935. data/ext/boost/mpl/fold.hpp +1 -1
  936. data/ext/boost/mpl/for_each.hpp +116 -0
  937. data/ext/boost/mpl/front.hpp +39 -0
  938. data/ext/boost/mpl/front_fwd.hpp +1 -1
  939. data/ext/boost/mpl/front_inserter.hpp +1 -1
  940. data/ext/boost/mpl/greater.hpp +1 -1
  941. data/ext/boost/mpl/greater_equal.hpp +1 -1
  942. data/ext/boost/mpl/has_key.hpp +41 -0
  943. data/ext/boost/mpl/has_key_fwd.hpp +25 -0
  944. data/ext/boost/mpl/has_xxx.hpp +1 -1
  945. data/ext/boost/mpl/identity.hpp +1 -1
  946. data/ext/boost/mpl/if.hpp +1 -1
  947. data/ext/boost/mpl/index_if.hpp +60 -0
  948. data/ext/boost/mpl/index_of.hpp +39 -0
  949. data/ext/boost/mpl/inherit.hpp +229 -0
  950. data/ext/boost/mpl/inherit_linearly.hpp +39 -0
  951. data/ext/boost/mpl/insert.hpp +41 -0
  952. data/ext/boost/mpl/insert_fwd.hpp +24 -0
  953. data/ext/boost/mpl/insert_range.hpp +41 -0
  954. data/ext/boost/mpl/insert_range_fwd.hpp +24 -0
  955. data/ext/boost/mpl/inserter.hpp +1 -1
  956. data/ext/boost/mpl/int.hpp +1 -1
  957. data/ext/boost/mpl/int_fwd.hpp +1 -1
  958. data/ext/boost/mpl/integral_c.hpp +1 -1
  959. data/ext/boost/mpl/integral_c_fwd.hpp +1 -1
  960. data/ext/boost/mpl/integral_c_tag.hpp +1 -1
  961. data/ext/boost/mpl/is_placeholder.hpp +67 -0
  962. data/ext/boost/mpl/is_sequence.hpp +112 -0
  963. data/ext/boost/mpl/iter_fold.hpp +1 -1
  964. data/ext/boost/mpl/iter_fold_if.hpp +1 -1
  965. data/ext/boost/mpl/iterator_category.hpp +35 -0
  966. data/ext/boost/mpl/iterator_range.hpp +1 -1
  967. data/ext/boost/mpl/iterator_tags.hpp +1 -1
  968. data/ext/boost/mpl/joint_view.hpp +65 -0
  969. data/ext/boost/mpl/key_type.hpp +42 -0
  970. data/ext/boost/mpl/key_type_fwd.hpp +25 -0
  971. data/ext/boost/mpl/lambda.hpp +1 -1
  972. data/ext/boost/mpl/lambda_fwd.hpp +1 -1
  973. data/ext/boost/mpl/less.hpp +1 -1
  974. data/ext/boost/mpl/less_equal.hpp +1 -1
  975. data/ext/boost/mpl/limits/arity.hpp +1 -1
  976. data/ext/boost/mpl/limits/list.hpp +1 -1
  977. data/ext/boost/mpl/limits/map.hpp +21 -0
  978. data/ext/boost/mpl/limits/set.hpp +21 -0
  979. data/ext/boost/mpl/limits/string.hpp +21 -0
  980. data/ext/boost/mpl/limits/unrolling.hpp +21 -0
  981. data/ext/boost/mpl/limits/vector.hpp +1 -1
  982. data/ext/boost/mpl/list.hpp +1 -1
  983. data/ext/boost/mpl/list/aux_/O1_size.hpp +1 -1
  984. data/ext/boost/mpl/list/aux_/begin_end.hpp +1 -1
  985. data/ext/boost/mpl/list/aux_/clear.hpp +1 -1
  986. data/ext/boost/mpl/list/aux_/empty.hpp +1 -1
  987. data/ext/boost/mpl/list/aux_/front.hpp +1 -1
  988. data/ext/boost/mpl/list/aux_/include_preprocessed.hpp +1 -1
  989. data/ext/boost/mpl/list/aux_/item.hpp +1 -1
  990. data/ext/boost/mpl/list/aux_/iterator.hpp +1 -1
  991. data/ext/boost/mpl/list/aux_/numbered.hpp +68 -0
  992. data/ext/boost/mpl/list/aux_/numbered_c.hpp +71 -0
  993. data/ext/boost/mpl/list/aux_/pop_front.hpp +1 -1
  994. data/ext/boost/mpl/list/aux_/preprocessed/plain/list10_c.hpp +164 -0
  995. data/ext/boost/mpl/list/aux_/preprocessed/plain/list20_c.hpp +173 -0
  996. data/ext/boost/mpl/list/aux_/preprocessed/plain/list30.hpp +189 -0
  997. data/ext/boost/mpl/list/aux_/preprocessed/plain/list30_c.hpp +183 -0
  998. data/ext/boost/mpl/list/aux_/preprocessed/plain/list40.hpp +209 -0
  999. data/ext/boost/mpl/list/aux_/preprocessed/plain/list40_c.hpp +193 -0
  1000. data/ext/boost/mpl/list/aux_/preprocessed/plain/list50.hpp +229 -0
  1001. data/ext/boost/mpl/list/aux_/preprocessed/plain/list50_c.hpp +203 -0
  1002. data/ext/boost/mpl/list/aux_/push_back.hpp +1 -1
  1003. data/ext/boost/mpl/list/aux_/push_front.hpp +1 -1
  1004. data/ext/boost/mpl/list/aux_/size.hpp +1 -1
  1005. data/ext/boost/mpl/list/aux_/tag.hpp +1 -1
  1006. data/ext/boost/mpl/list/list0.hpp +1 -1
  1007. data/ext/boost/mpl/list/list0_c.hpp +31 -0
  1008. data/ext/boost/mpl/list/list10.hpp +1 -1
  1009. data/ext/boost/mpl/list/list10_c.hpp +43 -0
  1010. data/ext/boost/mpl/list/list20.hpp +1 -1
  1011. data/ext/boost/mpl/list/list20_c.hpp +43 -0
  1012. data/ext/boost/mpl/list/list30.hpp +43 -0
  1013. data/ext/boost/mpl/list/list30_c.hpp +43 -0
  1014. data/ext/boost/mpl/list/list40.hpp +43 -0
  1015. data/ext/boost/mpl/list/list40_c.hpp +43 -0
  1016. data/ext/boost/mpl/list/list50.hpp +43 -0
  1017. data/ext/boost/mpl/list/list50_c.hpp +43 -0
  1018. data/ext/boost/mpl/list_c.hpp +60 -0
  1019. data/ext/boost/mpl/logical.hpp +1 -1
  1020. data/ext/boost/mpl/long.hpp +1 -1
  1021. data/ext/boost/mpl/long_fwd.hpp +1 -1
  1022. data/ext/boost/mpl/lower_bound.hpp +143 -0
  1023. data/ext/boost/mpl/map.hpp +57 -0
  1024. data/ext/boost/mpl/map/aux_/at_impl.hpp +144 -0
  1025. data/ext/boost/mpl/map/aux_/begin_end_impl.hpp +50 -0
  1026. data/ext/boost/mpl/map/aux_/clear_impl.hpp +35 -0
  1027. data/ext/boost/mpl/map/aux_/contains_impl.hpp +43 -0
  1028. data/ext/boost/mpl/map/aux_/empty_impl.hpp +34 -0
  1029. data/ext/boost/mpl/map/aux_/erase_impl.hpp +41 -0
  1030. data/ext/boost/mpl/map/aux_/erase_key_impl.hpp +53 -0
  1031. data/ext/boost/mpl/map/aux_/has_key_impl.hpp +44 -0
  1032. data/ext/boost/mpl/map/aux_/include_preprocessed.hpp +53 -0
  1033. data/ext/boost/mpl/map/aux_/insert_impl.hpp +72 -0
  1034. data/ext/boost/mpl/map/aux_/item.hpp +138 -0
  1035. data/ext/boost/mpl/map/aux_/iterator.hpp +169 -0
  1036. data/ext/boost/mpl/map/aux_/key_type_impl.hpp +36 -0
  1037. data/ext/boost/mpl/map/aux_/map0.hpp +74 -0
  1038. data/ext/boost/mpl/map/aux_/numbered.hpp +110 -0
  1039. data/ext/boost/mpl/map/aux_/preprocessed/no_ctps/map10.hpp +350 -0
  1040. data/ext/boost/mpl/map/aux_/preprocessed/no_ctps/map20.hpp +370 -0
  1041. data/ext/boost/mpl/map/aux_/preprocessed/no_ctps/map30.hpp +390 -0
  1042. data/ext/boost/mpl/map/aux_/preprocessed/no_ctps/map40.hpp +410 -0
  1043. data/ext/boost/mpl/map/aux_/preprocessed/no_ctps/map50.hpp +430 -0
  1044. data/ext/boost/mpl/map/aux_/preprocessed/plain/map10.hpp +290 -0
  1045. data/ext/boost/mpl/map/aux_/preprocessed/plain/map20.hpp +310 -0
  1046. data/ext/boost/mpl/map/aux_/preprocessed/plain/map30.hpp +330 -0
  1047. data/ext/boost/mpl/map/aux_/preprocessed/plain/map40.hpp +350 -0
  1048. data/ext/boost/mpl/map/aux_/preprocessed/plain/map50.hpp +370 -0
  1049. data/ext/boost/mpl/map/aux_/preprocessed/typeof_based/map10.hpp +150 -0
  1050. data/ext/boost/mpl/map/aux_/preprocessed/typeof_based/map20.hpp +170 -0
  1051. data/ext/boost/mpl/map/aux_/preprocessed/typeof_based/map30.hpp +190 -0
  1052. data/ext/boost/mpl/map/aux_/preprocessed/typeof_based/map40.hpp +210 -0
  1053. data/ext/boost/mpl/map/aux_/preprocessed/typeof_based/map50.hpp +230 -0
  1054. data/ext/boost/mpl/map/aux_/size_impl.hpp +33 -0
  1055. data/ext/boost/mpl/map/aux_/tag.hpp +24 -0
  1056. data/ext/boost/mpl/map/aux_/value_type_impl.hpp +36 -0
  1057. data/ext/boost/mpl/map/map0.hpp +36 -0
  1058. data/ext/boost/mpl/map/map10.hpp +44 -0
  1059. data/ext/boost/mpl/map/map20.hpp +44 -0
  1060. data/ext/boost/mpl/map/map30.hpp +44 -0
  1061. data/ext/boost/mpl/map/map40.hpp +44 -0
  1062. data/ext/boost/mpl/map/map50.hpp +44 -0
  1063. data/ext/boost/mpl/math/fixed_c.hpp +36 -0
  1064. data/ext/boost/mpl/math/is_even.hpp +54 -0
  1065. data/ext/boost/mpl/math/rational_c.hpp +37 -0
  1066. data/ext/boost/mpl/max.hpp +19 -0
  1067. data/ext/boost/mpl/max_element.hpp +72 -0
  1068. data/ext/boost/mpl/min.hpp +19 -0
  1069. data/ext/boost/mpl/min_element.hpp +40 -0
  1070. data/ext/boost/mpl/min_max.hpp +46 -0
  1071. data/ext/boost/mpl/minus.hpp +1 -1
  1072. data/ext/boost/mpl/modulus.hpp +22 -0
  1073. data/ext/boost/mpl/multiplies.hpp +1 -1
  1074. data/ext/boost/mpl/multiset/aux_/count_impl.hpp +82 -0
  1075. data/ext/boost/mpl/multiset/aux_/insert_impl.hpp +34 -0
  1076. data/ext/boost/mpl/multiset/aux_/item.hpp +114 -0
  1077. data/ext/boost/mpl/multiset/aux_/multiset0.hpp +34 -0
  1078. data/ext/boost/mpl/multiset/aux_/tag.hpp +23 -0
  1079. data/ext/boost/mpl/multiset/multiset0.hpp +36 -0
  1080. data/ext/boost/mpl/negate.hpp +1 -1
  1081. data/ext/boost/mpl/next.hpp +1 -1
  1082. data/ext/boost/mpl/next_prior.hpp +1 -1
  1083. data/ext/boost/mpl/not.hpp +1 -1
  1084. data/ext/boost/mpl/not_equal_to.hpp +1 -1
  1085. data/ext/boost/mpl/numeric_cast.hpp +1 -1
  1086. data/ext/boost/mpl/or.hpp +1 -1
  1087. data/ext/boost/mpl/order.hpp +41 -0
  1088. data/ext/boost/mpl/order_fwd.hpp +25 -0
  1089. data/ext/boost/mpl/pair.hpp +1 -1
  1090. data/ext/boost/mpl/pair_view.hpp +169 -0
  1091. data/ext/boost/mpl/partition.hpp +53 -0
  1092. data/ext/boost/mpl/placeholders.hpp +1 -1
  1093. data/ext/boost/mpl/plus.hpp +1 -1
  1094. data/ext/boost/mpl/pop_back.hpp +39 -0
  1095. data/ext/boost/mpl/pop_back_fwd.hpp +1 -1
  1096. data/ext/boost/mpl/pop_front.hpp +39 -0
  1097. data/ext/boost/mpl/pop_front_fwd.hpp +1 -1
  1098. data/ext/boost/mpl/print.hpp +74 -0
  1099. data/ext/boost/mpl/prior.hpp +1 -1
  1100. data/ext/boost/mpl/protect.hpp +1 -1
  1101. data/ext/boost/mpl/push_back.hpp +1 -1
  1102. data/ext/boost/mpl/push_back_fwd.hpp +1 -1
  1103. data/ext/boost/mpl/push_front.hpp +1 -1
  1104. data/ext/boost/mpl/push_front_fwd.hpp +1 -1
  1105. data/ext/boost/mpl/quote.hpp +1 -1
  1106. data/ext/boost/mpl/range_c.hpp +48 -0
  1107. data/ext/boost/mpl/remove.hpp +52 -0
  1108. data/ext/boost/mpl/remove_if.hpp +1 -1
  1109. data/ext/boost/mpl/replace.hpp +55 -0
  1110. data/ext/boost/mpl/replace_if.hpp +88 -0
  1111. data/ext/boost/mpl/reverse.hpp +38 -0
  1112. data/ext/boost/mpl/reverse_fold.hpp +1 -1
  1113. data/ext/boost/mpl/reverse_iter_fold.hpp +56 -0
  1114. data/ext/boost/mpl/same_as.hpp +1 -1
  1115. data/ext/boost/mpl/sequence_tag.hpp +1 -1
  1116. data/ext/boost/mpl/sequence_tag_fwd.hpp +1 -1
  1117. data/ext/boost/mpl/set.hpp +57 -0
  1118. data/ext/boost/mpl/set/aux_/at_impl.hpp +40 -0
  1119. data/ext/boost/mpl/set/aux_/begin_end_impl.hpp +43 -0
  1120. data/ext/boost/mpl/set/aux_/clear_impl.hpp +35 -0
  1121. data/ext/boost/mpl/set/aux_/empty_impl.hpp +34 -0
  1122. data/ext/boost/mpl/set/aux_/erase_impl.hpp +41 -0
  1123. data/ext/boost/mpl/set/aux_/erase_key_impl.hpp +53 -0
  1124. data/ext/boost/mpl/set/aux_/has_key_impl.hpp +60 -0
  1125. data/ext/boost/mpl/set/aux_/include_preprocessed.hpp +42 -0
  1126. data/ext/boost/mpl/set/aux_/insert_impl.hpp +65 -0
  1127. data/ext/boost/mpl/set/aux_/item.hpp +80 -0
  1128. data/ext/boost/mpl/set/aux_/iterator.hpp +98 -0
  1129. data/ext/boost/mpl/set/aux_/key_type_impl.hpp +34 -0
  1130. data/ext/boost/mpl/set/aux_/numbered.hpp +48 -0
  1131. data/ext/boost/mpl/set/aux_/numbered_c.hpp +48 -0
  1132. data/ext/boost/mpl/set/aux_/preprocessed/plain/set10.hpp +140 -0
  1133. data/ext/boost/mpl/set/aux_/preprocessed/plain/set10_c.hpp +145 -0
  1134. data/ext/boost/mpl/set/aux_/preprocessed/plain/set20.hpp +168 -0
  1135. data/ext/boost/mpl/set/aux_/preprocessed/plain/set20_c.hpp +154 -0
  1136. data/ext/boost/mpl/set/aux_/preprocessed/plain/set30.hpp +195 -0
  1137. data/ext/boost/mpl/set/aux_/preprocessed/plain/set30_c.hpp +164 -0
  1138. data/ext/boost/mpl/set/aux_/preprocessed/plain/set40.hpp +221 -0
  1139. data/ext/boost/mpl/set/aux_/preprocessed/plain/set40_c.hpp +174 -0
  1140. data/ext/boost/mpl/set/aux_/preprocessed/plain/set50.hpp +250 -0
  1141. data/ext/boost/mpl/set/aux_/preprocessed/plain/set50_c.hpp +184 -0
  1142. data/ext/boost/mpl/set/aux_/set0.hpp +69 -0
  1143. data/ext/boost/mpl/set/aux_/size_impl.hpp +33 -0
  1144. data/ext/boost/mpl/set/aux_/tag.hpp +24 -0
  1145. data/ext/boost/mpl/set/aux_/value_type_impl.hpp +34 -0
  1146. data/ext/boost/mpl/set/set0.hpp +35 -0
  1147. data/ext/boost/mpl/set/set0_c.hpp +32 -0
  1148. data/ext/boost/mpl/set/set10.hpp +44 -0
  1149. data/ext/boost/mpl/set/set10_c.hpp +45 -0
  1150. data/ext/boost/mpl/set/set20.hpp +44 -0
  1151. data/ext/boost/mpl/set/set20_c.hpp +45 -0
  1152. data/ext/boost/mpl/set/set30.hpp +44 -0
  1153. data/ext/boost/mpl/set/set30_c.hpp +45 -0
  1154. data/ext/boost/mpl/set/set40.hpp +44 -0
  1155. data/ext/boost/mpl/set/set40_c.hpp +45 -0
  1156. data/ext/boost/mpl/set/set50.hpp +44 -0
  1157. data/ext/boost/mpl/set/set50_c.hpp +45 -0
  1158. data/ext/boost/mpl/set_c.hpp +60 -0
  1159. data/ext/boost/mpl/shift_left.hpp +22 -0
  1160. data/ext/boost/mpl/shift_right.hpp +22 -0
  1161. data/ext/boost/mpl/single_view.hpp +38 -0
  1162. data/ext/boost/mpl/size.hpp +1 -1
  1163. data/ext/boost/mpl/size_fwd.hpp +1 -1
  1164. data/ext/boost/mpl/size_t.hpp +1 -1
  1165. data/ext/boost/mpl/size_t_fwd.hpp +1 -1
  1166. data/ext/boost/mpl/sizeof.hpp +36 -0
  1167. data/ext/boost/mpl/sort.hpp +27 -0
  1168. data/ext/boost/mpl/stable_partition.hpp +75 -0
  1169. data/ext/boost/mpl/string.hpp +607 -0
  1170. data/ext/boost/mpl/switch.hpp +49 -0
  1171. data/ext/boost/mpl/tag.hpp +1 -1
  1172. data/ext/boost/mpl/times.hpp +1 -1
  1173. data/ext/boost/mpl/transform.hpp +145 -0
  1174. data/ext/boost/mpl/transform_view.hpp +46 -0
  1175. data/ext/boost/mpl/unique.hpp +85 -0
  1176. data/ext/boost/mpl/unpack_args.hpp +150 -0
  1177. data/ext/boost/mpl/upper_bound.hpp +141 -0
  1178. data/ext/boost/mpl/value_type.hpp +42 -0
  1179. data/ext/boost/mpl/value_type_fwd.hpp +25 -0
  1180. data/ext/boost/mpl/vector.hpp +1 -1
  1181. data/ext/boost/mpl/vector/aux_/O1_size.hpp +1 -1
  1182. data/ext/boost/mpl/vector/aux_/at.hpp +1 -1
  1183. data/ext/boost/mpl/vector/aux_/back.hpp +1 -1
  1184. data/ext/boost/mpl/vector/aux_/begin_end.hpp +1 -1
  1185. data/ext/boost/mpl/vector/aux_/clear.hpp +1 -1
  1186. data/ext/boost/mpl/vector/aux_/empty.hpp +1 -1
  1187. data/ext/boost/mpl/vector/aux_/front.hpp +1 -1
  1188. data/ext/boost/mpl/vector/aux_/include_preprocessed.hpp +1 -1
  1189. data/ext/boost/mpl/vector/aux_/item.hpp +1 -1
  1190. data/ext/boost/mpl/vector/aux_/iterator.hpp +1 -1
  1191. data/ext/boost/mpl/vector/aux_/numbered.hpp +218 -0
  1192. data/ext/boost/mpl/vector/aux_/numbered_c.hpp +77 -0
  1193. data/ext/boost/mpl/vector/aux_/pop_back.hpp +1 -1
  1194. data/ext/boost/mpl/vector/aux_/pop_front.hpp +1 -1
  1195. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10.hpp +1528 -0
  1196. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10_c.hpp +149 -0
  1197. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20.hpp +1804 -0
  1198. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20_c.hpp +195 -0
  1199. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30.hpp +2124 -0
  1200. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30_c.hpp +238 -0
  1201. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40.hpp +2444 -0
  1202. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40_c.hpp +281 -0
  1203. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50.hpp +2764 -0
  1204. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50_c.hpp +325 -0
  1205. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector10_c.hpp +149 -0
  1206. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector20_c.hpp +195 -0
  1207. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector30.hpp +1464 -0
  1208. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector30_c.hpp +238 -0
  1209. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector40.hpp +1784 -0
  1210. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector40_c.hpp +281 -0
  1211. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector50.hpp +2104 -0
  1212. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector50_c.hpp +325 -0
  1213. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10_c.hpp +154 -0
  1214. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20_c.hpp +163 -0
  1215. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30.hpp +179 -0
  1216. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30_c.hpp +173 -0
  1217. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40.hpp +199 -0
  1218. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40_c.hpp +183 -0
  1219. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50.hpp +219 -0
  1220. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50_c.hpp +193 -0
  1221. data/ext/boost/mpl/vector/aux_/push_back.hpp +1 -1
  1222. data/ext/boost/mpl/vector/aux_/push_front.hpp +1 -1
  1223. data/ext/boost/mpl/vector/aux_/size.hpp +1 -1
  1224. data/ext/boost/mpl/vector/aux_/tag.hpp +1 -1
  1225. data/ext/boost/mpl/vector/aux_/vector0.hpp +1 -1
  1226. data/ext/boost/mpl/vector/vector0.hpp +1 -1
  1227. data/ext/boost/mpl/vector/vector0_c.hpp +31 -0
  1228. data/ext/boost/mpl/vector/vector10.hpp +1 -1
  1229. data/ext/boost/mpl/vector/vector10_c.hpp +46 -0
  1230. data/ext/boost/mpl/vector/vector20.hpp +1 -1
  1231. data/ext/boost/mpl/vector/vector20_c.hpp +46 -0
  1232. data/ext/boost/mpl/vector/vector30.hpp +45 -0
  1233. data/ext/boost/mpl/vector/vector30_c.hpp +47 -0
  1234. data/ext/boost/mpl/vector/vector40.hpp +45 -0
  1235. data/ext/boost/mpl/vector/vector40_c.hpp +46 -0
  1236. data/ext/boost/mpl/vector/vector50.hpp +45 -0
  1237. data/ext/boost/mpl/vector/vector50_c.hpp +46 -0
  1238. data/ext/boost/mpl/vector_c.hpp +61 -0
  1239. data/ext/boost/mpl/void.hpp +1 -1
  1240. data/ext/boost/mpl/void_fwd.hpp +1 -1
  1241. data/ext/boost/mpl/zip_view.hpp +65 -0
  1242. data/ext/boost/numeric/conversion/converter_policies.hpp +8 -0
  1243. data/ext/boost/optional/optional.hpp +2 -2
  1244. data/ext/boost/pointee.hpp +74 -0
  1245. data/ext/boost/preprocessor/{control/deduce_d.hpp → dec.hpp} +3 -8
  1246. data/ext/boost/preprocessor/enum_params_with_a_default.hpp +17 -0
  1247. data/ext/boost/preprocessor/enum_shifted_params.hpp +17 -0
  1248. data/ext/boost/preprocessor/iteration/detail/bounds/lower2.hpp +99 -0
  1249. data/ext/boost/preprocessor/iteration/detail/bounds/upper2.hpp +99 -0
  1250. data/ext/boost/preprocessor/iteration/detail/iter/forward2.hpp +1338 -0
  1251. data/ext/boost/preprocessor/iteration/detail/iter/reverse1.hpp +1296 -0
  1252. data/ext/boost/preprocessor/repeat_2nd.hpp +17 -0
  1253. data/ext/boost/preprocessor/repetition/enum_params_with_a_default.hpp +25 -0
  1254. data/ext/boost/range/algorithm/equal.hpp +15 -5
  1255. data/ext/boost/range/as_literal.hpp +1 -1
  1256. data/ext/boost/range/size.hpp +3 -3
  1257. data/ext/boost/range/size_type.hpp +33 -23
  1258. data/ext/boost/ratio/config.hpp +86 -0
  1259. data/ext/boost/ratio/detail/mpl/abs.hpp +89 -0
  1260. data/ext/boost/ratio/detail/mpl/gcd.hpp +124 -0
  1261. data/ext/boost/ratio/detail/mpl/lcm.hpp +126 -0
  1262. data/ext/boost/ratio/detail/mpl/sign.hpp +89 -0
  1263. data/ext/boost/ratio/detail/overflow_helpers.hpp +367 -0
  1264. data/ext/boost/ratio/ratio.hpp +233 -0
  1265. data/ext/boost/ratio/ratio_fwd.hpp +84 -0
  1266. data/ext/boost/smart_ptr/detail/sp_counted_base.hpp +3 -3
  1267. data/ext/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +150 -0
  1268. data/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +27 -2
  1269. data/ext/boost/swap.hpp +12 -0
  1270. data/ext/boost/system/api_config.hpp +42 -0
  1271. data/ext/boost/system/config.hpp +69 -0
  1272. data/ext/boost/system/error_code.hpp +513 -0
  1273. data/ext/boost/system/system_error.hpp +80 -0
  1274. data/ext/boost/thread/barrier.hpp +4 -4
  1275. data/ext/boost/thread/cv_status.hpp +26 -0
  1276. data/ext/boost/thread/detail/config.hpp +119 -5
  1277. data/ext/boost/thread/detail/delete.hpp +45 -0
  1278. data/ext/boost/thread/detail/memory.hpp +156 -0
  1279. data/ext/boost/thread/detail/move.hpp +181 -1
  1280. data/ext/boost/thread/detail/platform.hpp +3 -1
  1281. data/ext/boost/thread/detail/thread.hpp +254 -157
  1282. data/ext/boost/thread/detail/thread_interruption.hpp +12 -11
  1283. data/ext/boost/thread/exceptions.hpp +125 -136
  1284. data/ext/boost/thread/future.hpp +778 -353
  1285. data/ext/boost/thread/locks.hpp +548 -347
  1286. data/ext/boost/thread/once.hpp +3 -1
  1287. data/ext/boost/thread/pthread/condition_variable.hpp +140 -31
  1288. data/ext/boost/thread/pthread/condition_variable_fwd.hpp +143 -15
  1289. data/ext/boost/thread/pthread/mutex.hpp +76 -24
  1290. data/ext/boost/thread/pthread/once.hpp +53 -22
  1291. data/ext/boost/thread/pthread/recursive_mutex.hpp +74 -27
  1292. data/ext/boost/thread/pthread/shared_mutex.hpp +250 -2
  1293. data/ext/boost/thread/pthread/thread_data.hpp +109 -6
  1294. data/ext/boost/thread/pthread/thread_heap_alloc.hpp +4 -4
  1295. data/ext/boost/thread/reverse_lock.hpp +58 -0
  1296. data/ext/boost/thread/shared_lock_guard.hpp +52 -0
  1297. data/ext/boost/thread/shared_mutex.hpp +7 -2
  1298. data/ext/boost/thread/thread.hpp +2 -1
  1299. data/ext/boost/thread/v2/thread.hpp +56 -0
  1300. data/ext/boost/thread/xtime.hpp +4 -4
  1301. data/ext/boost/throw_exception.hpp +13 -4
  1302. data/ext/boost/tuple/detail/tuple_basic.hpp +980 -0
  1303. data/ext/boost/tuple/tuple.hpp +90 -0
  1304. data/ext/boost/type_traits/add_cv.hpp +48 -0
  1305. data/ext/boost/type_traits/common_type.hpp +158 -0
  1306. data/ext/boost/type_traits/cv_traits.hpp +24 -0
  1307. data/ext/boost/type_traits/decay.hpp +44 -0
  1308. data/ext/boost/type_traits/detail/bool_trait_def.hpp +1 -1
  1309. data/ext/boost/type_traits/detail/bool_trait_undef.hpp +1 -1
  1310. data/ext/boost/type_traits/detail/size_t_trait_def.hpp +1 -1
  1311. data/ext/boost/type_traits/detail/size_t_trait_undef.hpp +1 -1
  1312. data/ext/boost/type_traits/detail/type_trait_def.hpp +1 -1
  1313. data/ext/boost/type_traits/detail/type_trait_undef.hpp +1 -1
  1314. data/ext/boost/type_traits/has_nothrow_assign.hpp +44 -0
  1315. data/ext/boost/type_traits/has_trivial_assign.hpp +57 -0
  1316. data/ext/boost/type_traits/intrinsics.hpp +4 -3
  1317. data/ext/boost/type_traits/is_compound.hpp +46 -0
  1318. data/ext/boost/type_traits/is_empty.hpp +229 -0
  1319. data/ext/boost/type_traits/is_object.hpp +53 -0
  1320. data/ext/boost/type_traits/is_stateless.hpp +48 -0
  1321. data/ext/boost/type_traits/object_traits.hpp +33 -0
  1322. data/ext/boost/type_traits/remove_bounds.hpp +48 -0
  1323. data/ext/boost/type_traits/remove_volatile.hpp +88 -0
  1324. data/ext/boost/type_traits/same_traits.hpp +15 -0
  1325. data/ext/boost/type_traits/transform_traits.hpp +21 -0
  1326. data/ext/boost/typeof/message.hpp +8 -0
  1327. data/ext/boost/typeof/native.hpp +60 -0
  1328. data/ext/boost/typeof/typeof.hpp +218 -0
  1329. data/ext/boost/utility/declval.hpp +7 -2
  1330. data/ext/boost/utility/detail/result_of_iterate.hpp +98 -32
  1331. data/ext/boost/utility/result_of.hpp +92 -8
  1332. data/ext/boost/version.hpp +32 -0
  1333. data/ext/common/Account.h +1 -1
  1334. data/ext/common/AccountsDatabase.cpp +1 -1
  1335. data/ext/common/AccountsDatabase.h +1 -1
  1336. data/ext/common/AgentsStarter.cpp +5 -6
  1337. data/ext/common/AgentsStarter.h +4 -4
  1338. data/ext/common/AgentsStarter.hpp +4 -6
  1339. data/ext/common/AnsiColorConstants.h +1 -1
  1340. data/ext/common/ApplicationPool2/Common.h +62 -2
  1341. data/ext/common/ApplicationPool2/ComponentInfo.h +1 -1
  1342. data/ext/common/ApplicationPool2/Group.h +411 -150
  1343. data/ext/common/ApplicationPool2/Implementation.cpp +367 -86
  1344. data/ext/common/ApplicationPool2/Options.h +6 -2
  1345. data/ext/common/ApplicationPool2/PipeWatcher.h +1 -1
  1346. data/ext/common/ApplicationPool2/Pool.h +260 -137
  1347. data/ext/common/ApplicationPool2/Process.h +28 -27
  1348. data/ext/common/ApplicationPool2/Session.h +4 -2
  1349. data/ext/common/ApplicationPool2/Socket.h +1 -1
  1350. data/ext/common/ApplicationPool2/Spawner.h +133 -77
  1351. data/ext/common/ApplicationPool2/SuperGroup.h +16 -15
  1352. data/ext/common/BackgroundEventLoop.cpp +1 -1
  1353. data/ext/common/BackgroundEventLoop.h +1 -1
  1354. data/ext/common/Constants.h +2 -2
  1355. data/ext/common/EventedBufferedInput.h +1 -1
  1356. data/ext/common/EventedClient.h +1 -1
  1357. data/ext/common/EventedMessageServer.h +1 -1
  1358. data/ext/common/EventedServer.h +1 -1
  1359. data/ext/common/Exceptions.h +1 -1
  1360. data/ext/common/FileDescriptor.h +1 -1
  1361. data/ext/common/HttpConstants.h +8 -8
  1362. data/ext/common/IniFile.h +1 -1
  1363. data/ext/common/Logging.cpp +45 -20
  1364. data/ext/common/Logging.h +16 -65
  1365. data/ext/common/MessageClient.h +1 -1
  1366. data/ext/common/MessageReadersWriters.h +1 -1
  1367. data/ext/common/MessageServer.h +1 -1
  1368. data/ext/common/MultiLibeio.cpp +1 -1
  1369. data/ext/common/MultiLibeio.h +1 -1
  1370. data/ext/common/RandomGenerator.h +1 -1
  1371. data/ext/common/ResourceLocator.h +1 -1
  1372. data/ext/common/SafeLibev.h +1 -1
  1373. data/ext/common/ServerInstanceDir.h +1 -1
  1374. data/ext/common/StaticString.h +1 -1
  1375. data/ext/common/StringListCreator.h +1 -1
  1376. data/ext/common/UnionStation.h +1 -1
  1377. data/ext/common/Utils.cpp +6 -1
  1378. data/ext/common/Utils.h +9 -1
  1379. data/ext/common/Utils/BlockingQueue.h +1 -1
  1380. data/ext/common/Utils/CachedFileStat.cpp +1 -1
  1381. data/ext/common/Utils/CachedFileStat.h +1 -1
  1382. data/ext/common/Utils/CachedFileStat.hpp +1 -1
  1383. data/ext/common/Utils/FileChangeChecker.h +1 -1
  1384. data/ext/common/Utils/HashMap.h +1 -1
  1385. data/ext/common/Utils/HttpHeaderBufferer.h +1 -1
  1386. data/ext/common/Utils/IOUtils.cpp +3 -3
  1387. data/ext/common/Utils/IOUtils.h +1 -1
  1388. data/ext/common/Utils/MemZeroGuard.h +1 -1
  1389. data/ext/common/Utils/MemoryBarrier.h +1 -1
  1390. data/ext/common/Utils/MessageIO.h +1 -1
  1391. data/ext/common/Utils/MessagePassing.h +304 -0
  1392. data/ext/common/Utils/ProcessMetricsCollector.h +1 -1
  1393. data/ext/common/Utils/ScopeGuard.h +1 -1
  1394. data/ext/common/Utils/StrIntUtils.cpp +40 -1
  1395. data/ext/common/Utils/StrIntUtils.h +7 -1
  1396. data/ext/common/Utils/StringMap.h +1 -1
  1397. data/ext/common/Utils/SystemTime.cpp +1 -1
  1398. data/ext/common/Utils/SystemTime.h +1 -1
  1399. data/ext/common/Utils/Timer.h +1 -1
  1400. data/ext/common/Utils/VariantMap.h +1 -1
  1401. data/ext/common/agents/Base.cpp +182 -10
  1402. data/ext/common/agents/Base.h +1 -1
  1403. data/ext/common/agents/HelperAgent/AgentOptions.h +1 -1
  1404. data/ext/common/agents/HelperAgent/BacktracesServer.h +1 -1
  1405. data/ext/common/agents/HelperAgent/FileBackedPipe.h +1 -1
  1406. data/ext/common/agents/HelperAgent/Main.cpp +13 -5
  1407. data/ext/common/agents/HelperAgent/RequestHandler.cpp +1 -1
  1408. data/ext/common/agents/HelperAgent/RequestHandler.h +23 -9
  1409. data/ext/common/agents/HelperAgent/ScgiRequestParser.h +1 -1
  1410. data/ext/common/agents/LoggingAgent/DataStoreId.h +1 -1
  1411. data/ext/common/agents/LoggingAgent/FilterSupport.cpp +1 -1
  1412. data/ext/common/agents/LoggingAgent/FilterSupport.h +1 -1
  1413. data/ext/common/agents/LoggingAgent/LoggingServer.h +89 -214
  1414. data/ext/common/agents/LoggingAgent/Main.cpp +9 -19
  1415. data/ext/common/agents/LoggingAgent/RemoteSender.h +9 -2
  1416. data/ext/common/agents/SpawnPreparer.cpp +70 -30
  1417. data/ext/common/agents/Watchdog/Main.cpp +1 -1
  1418. data/ext/libeio/Changes +4 -0
  1419. data/ext/libeio/ecb.h +281 -24
  1420. data/ext/libeio/eio.c +48 -63
  1421. data/ext/libeio/eio.h +7 -6
  1422. data/ext/libeio/libeio.m4 +0 -16
  1423. data/ext/libeio/xthread.h +2 -2
  1424. data/ext/libev/configure +299 -271
  1425. data/ext/nginx/Configuration.c +15 -52
  1426. data/ext/nginx/Configuration.h +0 -2
  1427. data/ext/nginx/ContentHandler.c +13 -2
  1428. data/ext/nginx/ngx_http_passenger_module.c +2 -19
  1429. data/ext/oxt/detail/spin_lock_pthreads.hpp +1 -1
  1430. data/ext/oxt/dynamic_thread_group.hpp +2 -2
  1431. data/ext/oxt/spin_lock.hpp +1 -1
  1432. data/ext/oxt/system_calls.cpp +36 -13
  1433. data/ext/oxt/thread.hpp +11 -5
  1434. data/ext/ruby/extconf.rb +1 -1
  1435. data/ext/ruby/passenger_native_support.c +3 -2
  1436. data/helper-scripts/classic-rails-loader.rb +3 -1
  1437. data/helper-scripts/classic-rails-preloader.rb +4 -1
  1438. data/helper-scripts/node-loader.js +1 -1
  1439. data/helper-scripts/prespawn +1 -1
  1440. data/helper-scripts/rack-loader.rb +3 -1
  1441. data/helper-scripts/rack-preloader.rb +4 -1
  1442. data/helper-scripts/system-memory-stats.py +185 -0
  1443. data/helper-scripts/wsgi-loader.py +1 -1
  1444. data/lib/phusion_passenger.rb +3 -3
  1445. data/lib/phusion_passenger/abstract_installer.rb +1 -1
  1446. data/lib/phusion_passenger/admin_tools.rb +1 -1
  1447. data/lib/phusion_passenger/admin_tools/memory_stats.rb +1 -1
  1448. data/lib/phusion_passenger/admin_tools/server_instance.rb +1 -1
  1449. data/lib/phusion_passenger/analytics_logger.rb +10 -4
  1450. data/lib/phusion_passenger/classic_rails/thread_handler_extension.rb +3 -2
  1451. data/lib/phusion_passenger/common_library.rb +1 -1
  1452. data/lib/phusion_passenger/console_text_template.rb +1 -1
  1453. data/lib/phusion_passenger/constants.rb +6 -5
  1454. data/lib/phusion_passenger/debug_logging.rb +5 -1
  1455. data/lib/phusion_passenger/dependencies.rb +3 -3
  1456. data/lib/phusion_passenger/loader_shared_helpers.rb +12 -7
  1457. data/lib/phusion_passenger/message_channel.rb +1 -1
  1458. data/lib/phusion_passenger/message_client.rb +1 -1
  1459. data/lib/phusion_passenger/native_support.rb +1 -1
  1460. data/lib/phusion_passenger/packaging.rb +7 -4
  1461. data/lib/phusion_passenger/platform_info.rb +1 -1
  1462. data/lib/phusion_passenger/platform_info/apache.rb +2 -2
  1463. data/lib/phusion_passenger/platform_info/binary_compatibility.rb +14 -5
  1464. data/lib/phusion_passenger/platform_info/compiler.rb +8 -1
  1465. data/lib/phusion_passenger/platform_info/curl.rb +1 -1
  1466. data/lib/phusion_passenger/platform_info/linux.rb +1 -1
  1467. data/lib/phusion_passenger/platform_info/operating_system.rb +1 -1
  1468. data/lib/phusion_passenger/platform_info/ruby.rb +2 -2
  1469. data/lib/phusion_passenger/platform_info/zlib.rb +1 -1
  1470. data/lib/phusion_passenger/plugin.rb +2 -2
  1471. data/lib/phusion_passenger/preloader_shared_helpers.rb +14 -1
  1472. data/lib/phusion_passenger/public_api.rb +8 -2
  1473. data/lib/phusion_passenger/{classic_rails_extensions/analytics_logging/ar_abstract_adapter_extension.rb → rack/out_of_band_gc.rb} +35 -28
  1474. data/lib/phusion_passenger/rack/thread_handler_extension.rb +31 -6
  1475. data/lib/phusion_passenger/rails3_extensions/init.rb +15 -9
  1476. data/lib/phusion_passenger/request_handler.rb +104 -47
  1477. data/lib/phusion_passenger/request_handler/thread_handler.rb +28 -7
  1478. data/lib/phusion_passenger/ruby_core_enhancements.rb +34 -5
  1479. data/lib/phusion_passenger/simple_benchmarking.rb +1 -1
  1480. data/lib/phusion_passenger/standalone/app_finder.rb +1 -1
  1481. data/lib/phusion_passenger/standalone/command.rb +5 -5
  1482. data/lib/phusion_passenger/standalone/config_file.rb +1 -1
  1483. data/lib/phusion_passenger/standalone/help_command.rb +1 -1
  1484. data/lib/phusion_passenger/standalone/main.rb +1 -1
  1485. data/lib/phusion_passenger/standalone/package_runtime_command.rb +1 -1
  1486. data/lib/phusion_passenger/standalone/runtime_installer.rb +1 -1
  1487. data/lib/phusion_passenger/standalone/start_command.rb +73 -21
  1488. data/lib/phusion_passenger/standalone/status_command.rb +1 -1
  1489. data/lib/phusion_passenger/standalone/stop_command.rb +1 -1
  1490. data/lib/phusion_passenger/standalone/utils.rb +2 -2
  1491. data/lib/phusion_passenger/standalone/version_command.rb +1 -1
  1492. data/lib/phusion_passenger/utils.rb +1 -1
  1493. data/lib/phusion_passenger/utils/ansi_colors.rb +2 -2
  1494. data/lib/phusion_passenger/utils/file_system_watcher.rb +1 -1
  1495. data/lib/phusion_passenger/utils/hosts_file_parser.rb +2 -2
  1496. data/lib/phusion_passenger/utils/robust_interruption.rb +10 -6
  1497. data/lib/phusion_passenger/utils/tmpdir.rb +2 -2
  1498. data/lib/phusion_passenger/utils/unseekable_socket.rb +1 -1
  1499. data/lib/phusion_passenger/wsgi/request_handler.py +1 -1
  1500. data/resources/templates/error_layout.html.template +4 -0
  1501. data/resources/templates/nginx/not_available_when_natively_packaged.txt.erb +1 -1
  1502. data/resources/templates/standalone/config.erb +1 -0
  1503. data/test/.rspec +3 -0
  1504. data/test/config.json.travis +15 -0
  1505. data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +3 -2
  1506. data/test/cxx/ApplicationPool2/PoolTest.cpp +349 -128
  1507. data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +21 -18
  1508. data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +141 -118
  1509. data/test/cxx/BufferedIOTest.cpp +11 -11
  1510. data/test/cxx/CxxTestMain.cpp +40 -11
  1511. data/test/cxx/EventedClientTest.cpp +18 -18
  1512. data/test/cxx/FilterSupportTest.cpp +1 -1
  1513. data/test/cxx/IOUtilsTest.cpp +18 -10
  1514. data/test/cxx/MessageIOTest.cpp +9 -9
  1515. data/test/cxx/MessagePassingTest.cpp +81 -0
  1516. data/test/cxx/MessageReadersWritersTest.cpp +3 -4
  1517. data/test/cxx/RequestHandlerTest.cpp +69 -9
  1518. data/test/cxx/TestSupport.h +3 -1
  1519. data/test/cxx/UnionStationTest.cpp +43 -82
  1520. data/test/gdbinit.example +31 -0
  1521. data/test/integration_tests/nginx_tests.rb +48 -0
  1522. data/test/integration_tests/spec_helper.rb +1 -0
  1523. data/test/ruby/analytics_logger_spec.rb +11 -19
  1524. data/test/ruby/classic_rails/loader_spec.rb +3 -4
  1525. data/test/ruby/classic_rails/preloader_spec.rb +3 -4
  1526. data/test/ruby/rack/loader_spec.rb +2 -22
  1527. data/test/ruby/rack/preloader_spec.rb +2 -28
  1528. data/test/ruby/rails3.0/loader_spec.rb +26 -0
  1529. data/test/ruby/rails3.0/preloader_spec.rb +32 -0
  1530. data/test/ruby/rails3.1/loader_spec.rb +26 -0
  1531. data/test/ruby/rails3.1/preloader_spec.rb +32 -0
  1532. data/test/ruby/rails3.2/loader_spec.rb +26 -0
  1533. data/test/ruby/rails3.2/preloader_spec.rb +32 -0
  1534. data/test/ruby/request_handler_spec.rb +104 -13
  1535. data/test/ruby/shared/{loader_spec.rb → loader_sharedspec.rb} +1 -1
  1536. data/test/ruby/shared/rails/{analytics_logging_extensions_spec.rb → analytics_logging_extensions_sharedspec.rb} +26 -27
  1537. data/test/ruby/shared/{ruby_loader_spec.rb → ruby_loader_sharedspec.rb} +1 -1
  1538. data/test/ruby/spec_helper.rb +3 -3
  1539. data/test/stub/rails2.3/app/helpers/bar_helper.rb +2 -0
  1540. data/test/stub/rails2.3/app/helpers/foo_helper.rb +2 -0
  1541. data/test/stub/rails3.0/config/environments/production.rb +1 -1
  1542. data/test/stub/rails3.1/Gemfile +37 -0
  1543. data/test/stub/rails3.1/Gemfile.lock +115 -0
  1544. data/test/stub/rails3.1/README +261 -0
  1545. data/test/stub/rails3.1/Rakefile +7 -0
  1546. data/test/stub/rails3.1/app/assets/images/rails.png +0 -0
  1547. data/test/stub/rails3.1/app/assets/javascripts/application.js +9 -0
  1548. data/test/stub/rails3.1/app/assets/stylesheets/application.css +7 -0
  1549. data/test/stub/rails3.1/app/controllers/application_controller.rb +3 -0
  1550. data/test/stub/rails3.1/app/helpers/application_helper.rb +2 -0
  1551. data/test/stub/rails3.1/app/views/layouts/application.html.erb +14 -0
  1552. data/test/stub/rails3.1/config.ru +4 -0
  1553. data/test/stub/rails3.1/config/application.rb +48 -0
  1554. data/test/stub/rails3.1/config/boot.rb +6 -0
  1555. data/test/stub/rails3.1/config/database.yml +25 -0
  1556. data/test/stub/rails3.1/config/environment.rb +5 -0
  1557. data/test/stub/rails3.1/config/environments/development.rb +30 -0
  1558. data/test/stub/rails3.1/config/environments/production.rb +60 -0
  1559. data/test/stub/rails3.1/config/environments/test.rb +39 -0
  1560. data/test/stub/rails3.1/config/initializers/backtrace_silencers.rb +7 -0
  1561. data/test/stub/rails3.1/config/initializers/inflections.rb +10 -0
  1562. data/test/stub/rails3.1/config/initializers/mime_types.rb +5 -0
  1563. data/test/stub/rails3.1/config/initializers/passenger.rb +1 -0
  1564. data/test/stub/rails3.1/config/initializers/secret_token.rb +7 -0
  1565. data/test/stub/rails3.1/config/initializers/session_store.rb +8 -0
  1566. data/test/stub/rails3.1/config/initializers/wrap_parameters.rb +14 -0
  1567. data/test/stub/rails3.1/config/locales/en.yml +5 -0
  1568. data/test/stub/rails3.1/config/routes.rb +58 -0
  1569. data/test/stub/rails3.1/db/seeds.rb +7 -0
  1570. data/test/stub/rails3.1/doc/README_FOR_APP +2 -0
  1571. data/test/stub/rails3.1/public/404.html +26 -0
  1572. data/test/stub/rails3.1/public/422.html +26 -0
  1573. data/test/stub/rails3.1/public/500.html +26 -0
  1574. data/test/stub/rails3.1/public/favicon.ico +0 -0
  1575. data/test/stub/rails3.1/public/index.html +241 -0
  1576. data/test/stub/rails3.1/public/robots.txt +5 -0
  1577. data/test/stub/rails3.1/script/rails +6 -0
  1578. data/test/stub/rails3.1/test/performance/browsing_test.rb +12 -0
  1579. data/test/stub/rails3.1/test/test_helper.rb +13 -0
  1580. data/test/stub/rails3.2/Gemfile +39 -0
  1581. data/test/stub/rails3.2/Gemfile.lock +113 -0
  1582. data/test/stub/rails3.2/Rakefile +7 -0
  1583. data/test/stub/rails3.2/app/assets/images/rails.png +0 -0
  1584. data/test/stub/rails3.2/app/assets/javascripts/application.js +15 -0
  1585. data/test/stub/rails3.2/app/assets/stylesheets/application.css +13 -0
  1586. data/test/stub/rails3.2/app/controllers/application_controller.rb +3 -0
  1587. data/test/stub/rails3.2/app/helpers/application_helper.rb +2 -0
  1588. data/test/stub/rails3.2/app/views/layouts/application.html.erb +14 -0
  1589. data/test/stub/rails3.2/config.ru +4 -0
  1590. data/test/stub/rails3.2/config/application.rb +62 -0
  1591. data/test/stub/rails3.2/config/boot.rb +6 -0
  1592. data/test/stub/rails3.2/config/database.yml +25 -0
  1593. data/test/stub/rails3.2/config/environment.rb +5 -0
  1594. data/test/stub/rails3.2/config/environments/development.rb +37 -0
  1595. data/test/stub/rails3.2/config/environments/production.rb +67 -0
  1596. data/test/stub/rails3.2/config/environments/test.rb +37 -0
  1597. data/test/stub/rails3.2/config/initializers/backtrace_silencers.rb +7 -0
  1598. data/test/stub/rails3.2/config/initializers/inflections.rb +15 -0
  1599. data/test/stub/rails3.2/config/initializers/mime_types.rb +5 -0
  1600. data/test/stub/rails3.2/config/initializers/passenger.rb +1 -0
  1601. data/test/stub/rails3.2/config/initializers/secret_token.rb +7 -0
  1602. data/test/stub/rails3.2/config/initializers/session_store.rb +8 -0
  1603. data/test/stub/rails3.2/config/initializers/wrap_parameters.rb +14 -0
  1604. data/test/stub/rails3.2/config/locales/en.yml +5 -0
  1605. data/test/stub/rails3.2/config/routes.rb +58 -0
  1606. data/test/stub/rails3.2/db/seeds.rb +7 -0
  1607. data/test/stub/rails3.2/doc/README_FOR_APP +2 -0
  1608. data/test/stub/rails3.2/public/404.html +26 -0
  1609. data/test/stub/rails3.2/public/422.html +26 -0
  1610. data/test/stub/rails3.2/public/500.html +25 -0
  1611. data/test/stub/rails3.2/public/favicon.ico +0 -0
  1612. data/test/stub/rails3.2/public/index.html +241 -0
  1613. data/test/stub/rails3.2/public/robots.txt +5 -0
  1614. data/test/stub/rails3.2/script/rails +6 -0
  1615. data/test/stub/rails3.2/test/performance/browsing_test.rb +12 -0
  1616. data/test/stub/rails3.2/test/test_helper.rb +13 -0
  1617. data/test/stub/wsgi/passenger_wsgi.py +12 -3
  1618. data/test/support/test_helper.rb +5 -3
  1619. data/test/tut/tut.h +61 -0
  1620. metadata +1173 -236
  1621. data/DEVELOPERS.TXT +0 -108
  1622. data/INSTALL +0 -6
  1623. data/README +0 -45
  1624. data/ext/boost/config/platform/win32.hpp +0 -71
  1625. data/ext/boost/implicit_cast.hpp +0 -29
  1626. data/ext/boost/preprocessor/arithmetic/detail/div_base.hpp +0 -61
  1627. data/ext/boost/preprocessor/arithmetic/mod.hpp +0 -39
  1628. data/ext/boost/preprocessor/comparison/less_equal.hpp +0 -39
  1629. data/ext/boost/preprocessor/logical/not.hpp +0 -30
  1630. data/ext/boost/preprocessor/seq/cat.hpp +0 -49
  1631. data/ext/boost/preprocessor/seq/fold_left.hpp +0 -1070
  1632. data/ext/boost/preprocessor/seq/transform.hpp +0 -48
  1633. data/ext/boost/smart_ptr/detail/atomic_count_win32.hpp +0 -63
  1634. data/ext/boost/smart_ptr/detail/sp_counted_base_w32.hpp +0 -130
  1635. data/ext/boost/utility.hpp +0 -20
  1636. data/ext/boost/utility/base_from_member.hpp +0 -87
  1637. data/ext/boost/utility/binary.hpp +0 -708
  1638. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ac_base_extension.rb +0 -67
  1639. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ac_benchmarking_extension.rb +0 -48
  1640. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ac_rescue_extension.rb +0 -59
  1641. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/as_cache_extension.rb +0 -130
  1642. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/av_benchmark_helper_extension.rb +0 -47
  1643. data/lib/phusion_passenger/classic_rails_extensions/init.rb +0 -125
@@ -795,11 +795,13 @@ install: function(toclevels) {
795
795
  }
796
796
 
797
797
  }
798
- asciidoc.install(3);
798
+ asciidoc.install();
799
799
  /*]]>*/
800
800
  </script><style type="text/css">
801
801
  body {
802
- margin: 1em 10% 1em 10%;
802
+ margin: 1em auto 1em auto;
803
+ padding: 0 1em 0 1em;
804
+ max-width: 800px;
803
805
  }
804
806
 
805
807
  a.image {
@@ -878,6 +880,10 @@ a.image {
878
880
  margin: 2em;
879
881
  }
880
882
 
883
+ pre {
884
+ overflow: auto;
885
+ }
886
+
881
887
  @media print {
882
888
  body {
883
889
  font-size: 18pt;
@@ -1038,6 +1044,15 @@ a.image {
1038
1044
  border-bottom-right-radius: 0;
1039
1045
  }
1040
1046
 
1047
+ /* http://nicolasgallagher.com/jump-links-and-viewport-positioning/ */
1048
+ .anchor_helper {
1049
+ position: relative;
1050
+ display: block;
1051
+ top: -50px;
1052
+ width: 1px;
1053
+ height: 1px;
1054
+ }
1055
+
1041
1056
  </style>
1042
1057
  </head>
1043
1058
  <body class="article">
@@ -1048,7 +1063,7 @@ a.image {
1048
1063
  <a href="javascript:void(0)" id="current_section"></a>
1049
1064
  </div>
1050
1065
  <div id="header">
1051
- <h1>Phusion Passenger users guide, Nginx version</h1>
1066
+ <h1>Phusion Passenger users guide, Nginx version</h1>
1052
1067
  <div id="preamble">
1053
1068
  <div class="sectionbody">
1054
1069
  <div class="paragraph"><p><span class="image">
@@ -1083,19 +1098,135 @@ How to solve common problems.
1083
1098
  <div class="paragraph"><p>This guide assumes that the reader is somewhat familiar with Nginx and with
1084
1099
  using the command line.</p></div>
1085
1100
  </div>
1086
- </div>
1101
+ </div>
1087
1102
  <div id="toc">
1088
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><div id="toctitle">Table of Contents</div>
1089
- <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
1090
- </div>
1103
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><div id="toctitle">Table of Contents</div>
1104
+ <div class="foo toclevel2"><a href="#_support_information">1. Support information</a></div>
1105
+ <div class="foo toclevel3"><a href="#_supported_operating_systems">1.1. Supported operating systems</a></div>
1106
+ <div class="foo toclevel3"><a href="#_where_to_get_support">1.2. Where to get support</a></div>
1107
+ <div class="foo toclevel2"><a href="#_installation">2. Installation</a></div>
1108
+ <div class="foo toclevel3"><a href="#rubygems_generic_install">2.1. Generic installation, upgrade and downgrade method: via RubyGems</a></div>
1109
+ <div class="foo toclevel3"><a href="#tarball_generic_install">2.2. Generic installation, upgrade and downgrade method: via tarball</a></div>
1110
+ <div class="foo toclevel3"><a href="#_installing_or_upgrading_on_ubuntu">2.3. Installing or upgrading on Ubuntu</a></div>
1111
+ <div class="foo toclevel3"><a href="#_installing_or_upgrading_on_red_hat_fedora_centos_or_scientificlinux">2.4. Installing or upgrading on Red Hat, Fedora, CentOS or ScientificLinux</a></div>
1112
+ <div class="foo toclevel3"><a href="#_upgrading_from_open_source_to_enterprise">2.5. Upgrading from open source to Enterprise</a></div>
1113
+ <div class="foo toclevel3"><a href="#_non_interactive_automatic_headless_installs_or_upgrades">2.6. Non-interactive, automatic, headless installs or upgrades</a></div>
1114
+ <div class="foo toclevel3"><a href="#_installing_as_a_normal_nginx_module_without_using_the_installer">2.7. Installing as a normal Nginx module without using the installer</a></div>
1115
+ <div class="foo toclevel3"><a href="#_disabling_without_uninstalling">2.8. Disabling without uninstalling</a></div>
1116
+ <div class="foo toclevel3"><a href="#uninstalling">2.9. Uninstalling</a></div>
1117
+ <div class="foo toclevel3"><a href="#moving_phusion_passenger">2.10. Moving to a different directory</a></div>
1118
+ <div class="foo toclevel2"><a href="#deploying_a_ror_app">3. Deploying a Ruby on Rails 1.x or 2.x (but NOT Rails &gt;= 3) application</a></div>
1119
+ <div class="foo toclevel3"><a href="#_deploying_to_a_virtual_host_8217_s_root">3.1. Deploying to a virtual host’s root</a></div>
1120
+ <div class="foo toclevel3"><a href="#deploying_rails_to_sub_uri">3.2. Deploying to a sub URI</a></div>
1121
+ <div class="foo toclevel3"><a href="#_redeploying_restarting_the_ruby_on_rails_application">3.3. Redeploying (restarting the Ruby on Rails application)</a></div>
1122
+ <div class="foo toclevel3"><a href="#_migrations">3.4. Migrations</a></div>
1123
+ <div class="foo toclevel3"><a href="#_capistrano_integration">3.5. Capistrano integration</a></div>
1124
+ <div class="foo toclevel2"><a href="#deploying_a_rack_app">4. Deploying a Rack-based Ruby application (including Rails &gt;= 3)</a></div>
1125
+ <div class="foo toclevel3"><a href="#_tutorial_example_writing_and_deploying_a_hello_world_rack_application">4.1. Tutorial/example: writing and deploying a Hello World Rack application</a></div>
1126
+ <div class="foo toclevel3"><a href="#_deploying_to_a_virtual_host_8217_s_root_2">4.2. Deploying to a virtual host’s root</a></div>
1127
+ <div class="foo toclevel3"><a href="#deploying_rack_to_sub_uri">4.3. Deploying to a sub URI</a></div>
1128
+ <div class="foo toclevel3"><a href="#_redeploying_restarting_the_rack_application">4.4. Redeploying (restarting the Rack application)</a></div>
1129
+ <div class="foo toclevel3"><a href="#_rackup_specifications_for_various_web_frameworks">4.5. Rackup specifications for various web frameworks</a></div>
1130
+ <div class="foo toclevel4"><a href="#_camping">4.5.1. Camping</a></div>
1131
+ <div class="foo toclevel4"><a href="#_halcyon">4.5.2. Halcyon</a></div>
1132
+ <div class="foo toclevel4"><a href="#_mack">4.5.3. Mack</a></div>
1133
+ <div class="foo toclevel4"><a href="#_merb">4.5.4. Merb</a></div>
1134
+ <div class="foo toclevel4"><a href="#_ramaze">4.5.5. Ramaze</a></div>
1135
+ <div class="foo toclevel4"><a href="#_sinatra">4.5.6. Sinatra</a></div>
1136
+ <div class="foo toclevel2"><a href="#_deploying_a_wsgi_python_application">5. Deploying a WSGI (Python) application</a></div>
1137
+ <div class="foo toclevel3"><a href="#_tutorial_example_writing_and_deploying_a_hello_world_wsgi_application">5.1. Tutorial/example: writing and deploying a Hello World WSGI application</a></div>
1138
+ <div class="foo toclevel3"><a href="#_deploying_to_a_virtual_host_8217_s_root_3">5.2. Deploying to a virtual host’s root</a></div>
1139
+ <div class="foo toclevel3"><a href="#_redeploying_restarting_the_wsgi_application">5.3. Redeploying (restarting the WSGI application)</a></div>
1140
+ <div class="foo toclevel2"><a href="#_configuring_phusion_passenger">6. Configuring Phusion Passenger</a></div>
1141
+ <div class="foo toclevel3"><a href="#_passenger_root_lt_directory_gt">6.1. passenger_root &lt;directory&gt;</a></div>
1142
+ <div class="foo toclevel3"><a href="#_passenger_ruby_lt_filename_gt">6.2. passenger_ruby &lt;filename&gt;</a></div>
1143
+ <div class="foo toclevel3"><a href="#PassengerSpawnMethod">6.3. passenger_spawn_method &lt;string&gt;</a></div>
1144
+ <div class="foo toclevel3"><a href="#PassengerRollingRestarts">6.4. passenger_rolling_restarts &lt;on|off&gt;</a></div>
1145
+ <div class="foo toclevel3"><a href="#_passenger_resist_deployment_errors_lt_on_off_gt">6.5. passenger_resist_deployment_errors &lt;on|off&gt;</a></div>
1146
+ <div class="foo toclevel3"><a href="#_important_deployment_options">6.6. Important deployment options</a></div>
1147
+ <div class="foo toclevel4"><a href="#_passenger_enabled_lt_on_off_gt">6.6.1. passenger_enabled &lt;on|off&gt;</a></div>
1148
+ <div class="foo toclevel4"><a href="#PassengerBaseURI">6.6.2. passenger_base_uri &lt;uri&gt;</a></div>
1149
+ <div class="foo toclevel3"><a href="#_connection_handling_options">6.7. Connection handling options</a></div>
1150
+ <div class="foo toclevel4"><a href="#_passenger_ignore_client_abort_lt_on_off_gt">6.7.1. passenger_ignore_client_abort &lt;on|off&gt;</a></div>
1151
+ <div class="foo toclevel4"><a href="#_passenger_set_cgi_param_lt_cgi_environment_name_gt_lt_value_gt">6.7.2. passenger_set_cgi_param &lt;CGI environment name&gt; &lt;value&gt;</a></div>
1152
+ <div class="foo toclevel4"><a href="#_passenger_pass_header_lt_header_name_gt">6.7.3. passenger_pass_header &lt;header name&gt;</a></div>
1153
+ <div class="foo toclevel4"><a href="#_passenger_buffer_response_lt_on_off_gt">6.7.4. passenger_buffer_response &lt;on|off&gt;</a></div>
1154
+ <div class="foo toclevel4"><a href="#_passenger_buffer_size">6.7.5. passenger_buffer_size</a></div>
1155
+ <div class="foo toclevel4"><a href="#_passenger_buffers">6.7.6. passenger_buffers</a></div>
1156
+ <div class="foo toclevel4"><a href="#_passenger_busy_buffer_size">6.7.7. passenger_busy_buffer_size</a></div>
1157
+ <div class="foo toclevel3"><a href="#_security_options">6.8. Security options</a></div>
1158
+ <div class="foo toclevel4"><a href="#PassengerUserSwitching">6.8.1. passenger_user_switching &lt;on|off&gt;</a></div>
1159
+ <div class="foo toclevel4"><a href="#_passenger_user_lt_username_gt">6.8.2. passenger_user &lt;username&gt;</a></div>
1160
+ <div class="foo toclevel4"><a href="#_passenger_group_lt_group_name_gt">6.8.3. passenger_group &lt;group name&gt;</a></div>
1161
+ <div class="foo toclevel4"><a href="#PassengerDefaultUser">6.8.4. passenger_default_user &lt;username&gt;</a></div>
1162
+ <div class="foo toclevel4"><a href="#PassengerDefaultGroup">6.8.5. Passenger_default_group &lt;group name&gt;</a></div>
1163
+ <div class="foo toclevel4"><a href="#_passenger_friendly_error_pages_lt_on_off_gt">6.8.6. passenger_friendly_error_pages &lt;on|off&gt;</a></div>
1164
+ <div class="foo toclevel3"><a href="#_resource_control_and_optimization_options">6.9. Resource control and optimization options</a></div>
1165
+ <div class="foo toclevel4"><a href="#PassengerMaxPoolSize">6.9.1. passenger_max_pool_size &lt;integer&gt;</a></div>
1166
+ <div class="foo toclevel4"><a href="#PassengerMinInstances">6.9.2. passenger_min_instances &lt;integer&gt;</a></div>
1167
+ <div class="foo toclevel4"><a href="#_passenger_max_instances_lt_integer_gt">6.9.3. passenger_max_instances &lt;integer&gt;</a></div>
1168
+ <div class="foo toclevel4"><a href="#_passenger_max_instances_per_app_lt_integer_gt">6.9.4. passenger_max_instances_per_app &lt;integer&gt;</a></div>
1169
+ <div class="foo toclevel4"><a href="#PassengerPoolIdleTime">6.9.5. passenger_pool_idle_time &lt;integer&gt;</a></div>
1170
+ <div class="foo toclevel4"><a href="#_passenger_max_preloader_idle_time_lt_integer_gt">6.9.6. passenger_max_preloader_idle_time &lt;integer&gt;</a></div>
1171
+ <div class="foo toclevel4"><a href="#PassengerConcurrencyModel">6.9.7. passenger_concurrency_model &lt;process|thread&gt;</a></div>
1172
+ <div class="foo toclevel4"><a href="#PassengerThreadCount">6.9.8. passenger_thread_count &lt;number&gt;</a></div>
1173
+ <div class="foo toclevel4"><a href="#PassengerMaxRequests">6.9.9. passenger_max_requests &lt;integer&gt;</a></div>
1174
+ <div class="foo toclevel4"><a href="#PassengerMaxRequestTime">6.9.10. passenger_max_request_time &lt;seconds&gt;</a></div>
1175
+ <div class="foo toclevel4"><a href="#PassengerMemoryLimit">6.9.11. passenger_memory_limit &lt;integer&gt;</a></div>
1176
+ <div class="foo toclevel4"><a href="#PassengerPreStart">6.9.12. passenger_pre_start &lt;url&gt;</a></div>
1177
+ <div class="foo toclevel3"><a href="#_logging_and_debugging_options">6.10. Logging and debugging options</a></div>
1178
+ <div class="foo toclevel4"><a href="#_passenger_log_level_lt_integer_gt">6.10.1. passenger_log_level &lt;integer&gt;</a></div>
1179
+ <div class="foo toclevel4"><a href="#_passenger_debug_log_file_lt_filename_gt">6.10.2. passenger_debug_log_file &lt;filename&gt;</a></div>
1180
+ <div class="foo toclevel4"><a href="#_passenger_debugger_lt_on_off_gt">6.10.3. passenger_debugger &lt;on|off&gt;</a></div>
1181
+ <div class="foo toclevel3"><a href="#_ruby_on_rails_specific_options">6.11. Ruby on Rails-specific options</a></div>
1182
+ <div class="foo toclevel4"><a href="#RailsEnv">6.11.1. rails_env &lt;string&gt;</a></div>
1183
+ <div class="foo toclevel3"><a href="#_rack_and_rails_gt_3_specific_options">6.12. Rack and Rails &gt;= 3 specific options</a></div>
1184
+ <div class="foo toclevel4"><a href="#RackEnv">6.12.1. rack_env &lt;string&gt;</a></div>
1185
+ <div class="foo toclevel3"><a href="#_deprecated_options">6.13. Deprecated options</a></div>
1186
+ <div class="foo toclevel4"><a href="#_rails_spawn_method">6.13.1. rails_spawn_method</a></div>
1187
+ <div class="foo toclevel2"><a href="#_analysis_and_system_maintenance">7. Analysis and system maintenance</a></div>
1188
+ <div class="foo toclevel3"><a href="#_inspecting_memory_usage">7.1. Inspecting memory usage</a></div>
1189
+ <div class="foo toclevel3"><a href="#_inspecting_phusion_passenger_8217_s_internal_status">7.2. Inspecting Phusion Passenger’s internal status</a></div>
1190
+ <div class="foo toclevel3"><a href="#debugging_frozen">7.3. Debugging frozen applications</a></div>
1191
+ <div class="foo toclevel3"><a href="#_accessing_individual_application_processes">7.4. Accessing individual application processes</a></div>
1192
+ <div class="foo toclevel3"><a href="#_attaching_an_irb_console_to_an_application_process">7.5. Attaching an IRB console to an application process</a></div>
1193
+ <div class="foo toclevel2"><a href="#_tips">8. Tips</a></div>
1194
+ <div class="foo toclevel3"><a href="#user_switching">8.1. User switching (security)</a></div>
1195
+ <div class="foo toclevel3"><a href="#reducing_memory_usage">8.2. Reducing memory consumption of Ruby on Rails applications by 33%</a></div>
1196
+ <div class="foo toclevel3"><a href="#capistrano">8.3. Capistrano recipe</a></div>
1197
+ <div class="foo toclevel3"><a href="#bundler_support">8.4. Bundler support</a></div>
1198
+ <div class="foo toclevel3"><a href="#moving_phusion_passenger">8.5. Moving Phusion Passenger to a different directory</a></div>
1199
+ <div class="foo toclevel3"><a href="#_installing_multiple_ruby_on_rails_versions">8.6. Installing multiple Ruby on Rails versions</a></div>
1200
+ <div class="foo toclevel3"><a href="#_making_the_application_restart_after_each_request">8.7. Making the application restart after each request</a></div>
1201
+ <div class="foo toclevel3"><a href="#sub_uri_deployment_uri_fix">8.8. How to fix broken images/CSS/JavaScript URIs in sub-URI deployments</a></div>
1202
+ <div class="foo toclevel3"><a href="#_out_of_band_garbage_work_and_out_of_band_garbage_collection">8.9. Out-of-Band Garbage Work and Out-of-Band Garbage Collection</a></div>
1203
+ <div class="foo toclevel2"><a href="#_under_the_hood">9. Under the hood</a></div>
1204
+ <div class="foo toclevel3"><a href="#_page_caching_support">9.1. Page caching support</a></div>
1205
+ <div class="foo toclevel3"><a href="#application_detection">9.2. How Phusion Passenger detects whether a virtual host is a web application</a></div>
1206
+ <div class="foo toclevel2"><a href="#_appendix_a_about_this_document">10. Appendix A: About this document</a></div>
1207
+ <div class="foo toclevel2"><a href="#_appendix_b_terminology">11. Appendix B: Terminology</a></div>
1208
+ <div class="foo toclevel3"><a href="#application_root">11.1. Application root</a></div>
1209
+ <div class="foo toclevel3"><a href="#idle_process">11.2. Idle process</a></div>
1210
+ <div class="foo toclevel3"><a href="#inactive_process">11.3. Inactive process</a></div>
1211
+ <div class="foo toclevel2"><a href="#spawning_methods_explained">12. Appendix C: Spawning methods explained</a></div>
1212
+ <div class="foo toclevel3"><a href="#_the_most_straightforward_and_traditional_way_direct_spawning">12.1. The most straightforward and traditional way: direct spawning</a></div>
1213
+ <div class="foo toclevel3"><a href="#_the_smart_spawning_method">12.2. The smart spawning method</a></div>
1214
+ <div class="foo toclevel4"><a href="#_how_it_works">12.2.1. How it works</a></div>
1215
+ <div class="foo toclevel4"><a href="#_summary_of_benefits">12.2.2. Summary of benefits</a></div>
1216
+ <div class="foo toclevel3"><a href="#_smart_spawning_gotcha_1_unintentional_file_descriptor_sharing">12.3. Smart spawning gotcha #1: unintentional file descriptor sharing</a></div>
1217
+ <div class="foo toclevel4"><a href="#_example_1_memcached_connection_sharing_harmful">12.3.1. Example 1: Memcached connection sharing (harmful)</a></div>
1218
+ <div class="foo toclevel4"><a href="#_example_2_log_file_sharing_not_harmful">12.3.2. Example 2: Log file sharing (not harmful)</a></div>
1219
+ <div class="foo toclevel3"><a href="#_smart_spawning_gotcha_2_the_need_to_revive_threads">12.4. Smart spawning gotcha #2: the need to revive threads</a></div>
1220
+ <div class="foo toclevel3"><a href="#_smart_spawning_gotcha_3_code_load_order">12.5. Smart spawning gotcha #3: code load order</a></div>
1221
+ </div>
1091
1222
  </div>
1092
1223
  <div id="content">
1093
1224
 
1094
1225
  <div class="sect1">
1095
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h2 id="_support_information" data-comment-topic="support-information-nl5gdn">1. Support information</h2>
1226
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_support_information"></span><h2 data-comment-topic="support-information-nl5gdn" data-anchor="_support_information">1. Support information</h2>
1096
1227
  <div class="sectionbody">
1097
1228
  <div class="sect2">
1098
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_supported_operating_systems" data-comment-topic="supported-operating-systems-a5n2x4">1.1. Supported operating systems</h3>
1229
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_supported_operating_systems"></span><h3 data-comment-topic="supported-operating-systems-a5n2x4" data-anchor="_supported_operating_systems">1.1. Supported operating systems</h3>
1099
1230
  <div class="paragraph"><p>Phusion Passenger works on any POSIX-compliant operating system. In other
1100
1231
  words: practically any operating system on earth, except Microsoft Windows.</p></div>
1101
1232
  <div class="paragraph"><p>Phusion Passenger is confirmed on a large number of operating systems and Linux
@@ -1108,7 +1239,7 @@ or
1108
1239
  if it doesn’t work on your POSIX-compliant operating system.</p></div>
1109
1240
  </div>
1110
1241
  <div class="sect2">
1111
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_where_to_get_support" data-comment-topic="where-to-get-support-2s9na5">1.2. Where to get support</h3>
1242
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_where_to_get_support"></span><h3 data-comment-topic="where-to-get-support-2s9na5" data-anchor="_where_to_get_support">1.2. Where to get support</h3>
1112
1243
  <div class="ulist"><ul>
1113
1244
  <li>
1114
1245
  <p>
@@ -1119,7 +1250,12 @@ if it doesn’t work on your POSIX-compliant operating system.</p></div>
1119
1250
  <li>
1120
1251
  <p>
1121
1252
  <a href="http://groups.google.com/group/phusion-passenger">Discussion forum</a> - post a
1122
- message here if you’re experiencing problems.
1253
+ 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.
1254
+ </p>
1255
+ </li>
1256
+ <li>
1257
+ <p>
1258
+ Email <a href="mailto:support@phusion.nl">support@phusion.nl</a> if you are a <a href="https://www.phusionpassenger.com/enterprise">Phusion Passenger Enterprise</a> customer. Please mention your order reference. If you are not an Enterprise customer, we kindly redirect you to the community discussion forum instead.
1123
1259
  </p>
1124
1260
  </li>
1125
1261
  <li>
@@ -1133,144 +1269,372 @@ if it doesn’t work on your POSIX-compliant operating system.</p></div>
1133
1269
  </div>
1134
1270
  </div>
1135
1271
  <div class="sect1">
1136
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h2 id="_installing_phusion_passenger" data-comment-topic="installing-phusion-passenger-hn03ac">2. Installing Phusion Passenger</h2>
1272
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_installation"></span><h2 data-comment-topic="installing-phusion-passenger-hn03ac" data-anchor="_installation">2. Installation</h2>
1137
1273
  <div class="sectionbody">
1138
- <div class="sect2">
1139
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_overview" data-comment-topic="overview-kvhzi4">2.1. Overview</h3>
1140
- <div class="paragraph"><p>As you might already know, Nginx does not support loadable modules, in contrast
1141
- to most other web servers (e.g. Apache). Therefore, to install Phusion Passenger
1142
- for Nginx, one must recompile and reinstall Nginx with Phusion Passenger support.
1143
- There are two ways to do this:</p></div>
1274
+ <div class="paragraph"><p>The Phusion Passenger installation process consists of two steps:</p></div>
1144
1275
  <div class="olist arabic"><ol class="arabic">
1145
1276
  <li>
1146
1277
  <p>
1147
- By running the Phusion Passenger installer for Nginx. This installer will
1148
- guide you through the entire installation process, including downloading,
1149
- compiling and installing Nginx. You should be able to get Nginx with Phusion
1150
- Passenger support up-and-running in a matter of minutes. This is the
1151
- recommended installation method.
1278
+ The <strong>obtainment step</strong>, where you download the Phusion Passenger files puts them somewhere on your system. This can be done through downloading the source tarball, installing the Ruby gem or installing a native OS package via APT or YUM.
1152
1279
  </p>
1153
1280
  </li>
1154
1281
  <li>
1155
1282
  <p>
1156
- By manually configuring and compiling Nginx with Phusion Passenger support,
1157
- through Nginx’s <span class="monospaced">--add-module</span> configure option. Generally, using our
1158
- installer is easier, so you should only use this method if you’re already
1159
- familiar with compiling Nginx.
1283
+ The <strong>integration step</strong>, where you configure Phusion Passenger so that it works properly with other system components such as Apache, Nginx, Ruby, Python, etc.
1160
1284
  </p>
1161
1285
  </li>
1162
1286
  </ol></div>
1163
- <div class="admonitionblock">
1164
- <table><tr>
1165
- <td class="icon">
1166
- <img src="./images/icons/tip.png" alt="Tip">
1167
- </td>
1168
- <td class="content">You might have to run the installation commands in the following sections
1169
- as <em>root</em>. If the installer fails because of permission errors, it will tell
1170
- you.</td>
1171
- </tr></table>
1287
+ <div class="paragraph"><p>Because Phusion Passenger is designed to run in a wide variety of operating systems and configurations, both steps can be done in multiple ways. Most users will be satisfied with the generic installation instructions which covers both steps, but some users may prefer OS-specific installation instructions in order to integrate better.</p></div>
1288
+ <div class="paragraph"><p>If you are not familiar with system administration and do not understand all the choices, then we recommend you to go with the <a href="#rubygems_generic_install">RubyGems generic installation method</a> (if you’re a Ruby user) or the <a href="#tarball_generic_install">tarball generic installation method</a> (if you’re not a Ruby user).</p></div>
1289
+ <div class="paragraph"><p>The steps for upgrading or downgrading Phusion Passenger is almost the same as the steps for installing. All the installation guides in this section will also teach you how to upgrade and downgrade.</p></div>
1290
+ <div class="sect2">
1291
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="rubygems_generic_install"></span><h3 data-comment-topic="generic-installation-upgrade-and-downgrade-method-via-rubygems-76uol7" data-anchor="rubygems_generic_install">2.1. Generic installation, upgrade and downgrade method: via RubyGems</h3>
1292
+ <span class="anchor_helper" id="is_ruby_home_or_system_wide_installed"></span><h4 class="float" data-anchor="is_ruby_home_or_system_wide_installed">Step 1: figuring out whether your Ruby is installed the home directory or system-wide</h4>
1293
+ <div class="paragraph"><p>Ruby may either be installed in the home directory, or system-wide. If it’s installed system-wide then we will want to install gems system-wide as well, so you need to switch to a root prompt first. If Ruby is installed in the home directory then we will want to install gems to the home directory as well, as a normal user.</p></div>
1294
+ <div class="paragraph"><p>To find out which case applies, run the following command to find out where the <span class="monospaced">ruby</span> command is:</p></div>
1295
+ <div class="listingblock">
1296
+ <div class="content monospaced">
1297
+ <pre>which ruby</pre>
1298
+ </div>
1299
+ </div>
1300
+ <div class="paragraph"><p>Do you see a filename that references <em>/home</em> or <em>/Users</em>? If so then your Ruby interpreter is installed in your home directory and you can proceed to step 2. Otherwise, you need to switch to a root prompt by running one of the following commands:</p></div>
1301
+ <div class="ulist"><ul>
1302
+ <li>
1303
+ <p>
1304
+ Are you using RVM? Run <span class="monospaced">rvmsudo -s</span>
1305
+ </p>
1306
+ </li>
1307
+ <li>
1308
+ <p>
1309
+ Are you not using RVM, or do you not know what RVM is? Run <span class="monospaced">sudo -s</span>
1310
+ </p>
1311
+ </li>
1312
+ <li>
1313
+ <p>
1314
+ Is <em>sudo</em> not installed on your system? Run <span class="monospaced">su -c bash</span>
1315
+ </p>
1316
+ </li>
1317
+ </ul></div>
1318
+ <div class="paragraph"><p>You must maintain this root prompt throughout this installation guide.</p></div>
1319
+ <span class="anchor_helper" id="_step_2_install_the_gem"></span><h4 class="float" data-anchor="_step_2_install_the_gem">Step 2: install the gem</h4>
1320
+ <div class="paragraph">
1321
+ <div class="title">Open Source</div>
1322
+ <p>Install the latest gem to obtain the files for the latest stable version of the open source Phusion Passenger:</p>
1172
1323
  </div>
1324
+ <div class="listingblock">
1325
+ <div class="content monospaced">
1326
+ <pre>gem install passenger</pre>
1327
+ </div>
1173
1328
  </div>
1174
- <div class="sect2">
1175
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="specifying_ruby_installation" data-comment-topic="specifying-the-correct-ruby-installation-jvqdv6">2.2. Specifying the correct Ruby installation</h3>
1176
- <div class="paragraph"><p>If your system has multiple Ruby installations — which is likely the case on
1177
- MacOS X, or if you’ve also installed
1178
- <a href="http://www.rubyenterpriseedition.com">Ruby Enterprise Edition</a> — then you
1179
- will need to tell the operating system which Ruby installation to use, prior to
1180
- running the Phusion Passenger installer. If you only have one Ruby installation
1181
- (the case on most Linux systems), then you can skip this section because Phusion
1182
- Passenger will automatically detect it.</p></div>
1183
- <div class="paragraph"><p>To specify a Ruby installation, prepend your Ruby installation’s <span class="monospaced">bin</span>
1184
- directory to the <span class="monospaced">PATH</span> environment variable. For example, if you have the
1185
- following Ruby installations:</p></div>
1329
+ <div class="paragraph"><p>Sometimes you will want to obtain the latest beta version of Phusion Passenger. Beta versions are not normally selected by <span class="monospaced">gem install</span>, so to opt-in for beta versions you have to add the <span class="monospaced">--pre</span> argument:</p></div>
1330
+ <div class="listingblock">
1331
+ <div class="content monospaced">
1332
+ <pre>gem install passenger --pre</pre>
1333
+ </div>
1334
+ </div>
1335
+ <div class="paragraph"><p>If you want to obtain a specific version of Phusion Passenger, e.g. because you are downgrading, then specify the version number with <span class="monospaced">--version</span>:</p></div>
1336
+ <div class="listingblock">
1337
+ <div class="content monospaced">
1338
+ <pre>gem install passenger --version 3.0.0</pre>
1339
+ </div>
1340
+ </div>
1341
+ <div class="paragraph"><p>If you want to obtain a specific <strong>beta</strong> version of Phusion Passenger then you must also pass <span class="monospaced">--pre</span>:</p></div>
1342
+ <div class="listingblock">
1343
+ <div class="content monospaced">
1344
+ <pre>gem install passenger --version 3.9.1.beta --pre</pre>
1345
+ </div>
1346
+ </div>
1347
+ <div class="paragraph">
1348
+ <div class="title">Enterprise</div>
1349
+ <p>The <span class="monospaced">gem install</span> command only installs the open source version of Phusion Passenger. <a href="https://www.phusionpassenger.com/enterprise">Phusion Passenger Enterprise</a> customers should obtain the gem from the <a href="https://www.phusionpassenger.com/orders">Customer Area</a> instead. Login with your order reference and password. The Customer Area will show you a list of files.</p>
1350
+ </div>
1351
+ <div class="paragraph"><p>First, download the <strong>license key</strong> and save it as <em>/etc/passenger-enterprise-license</em>.</p></div>
1352
+ <div class="paragraph"><p>Next, download the <strong>gem file</strong> for the version you want (<span class="monospaced">passenger-enterprise-server-x.x.x.gem</span>) and install it with:</p></div>
1353
+ <div class="listingblock">
1354
+ <div class="content monospaced">
1355
+ <pre>gem install passenger-enterprise-server-x.x.x.gem</pre>
1356
+ </div>
1357
+ </div>
1358
+ <span class="anchor_helper" id="add_rubygems_bin_dir_to_path"></span><h4 class="float" data-anchor="add_rubygems_bin_dir_to_path">Step 3: add the RubyGems bin directory to your $PATH</h4>
1359
+ <div class="paragraph"><p>If you all the following are applicable to you:</p></div>
1186
1360
  <div class="ulist"><ul>
1187
1361
  <li>
1188
1362
  <p>
1189
- /usr/bin/ruby
1363
+ You are on Debian or Ubuntu,
1364
+ </p>
1365
+ </li>
1366
+ <li>
1367
+ <p>
1368
+ and you installed RubyGems through APT,
1190
1369
  </p>
1191
1370
  </li>
1192
1371
  <li>
1193
1372
  <p>
1194
- /opt/myruby/bin/ruby
1373
+ and your Ruby interpreter is installed system-wide,
1195
1374
  </p>
1196
1375
  </li>
1197
1376
  </ul></div>
1198
- <div class="paragraph"><p>and you want to use the latter, then type:</p></div>
1377
+ <div class="paragraph"><p>…then you must ensure that the RubyGems bin directory is in your $PATH, which is the environment variable that dictates where your command prompt will look for commands. If any of the above conditions do not apply to you, then you can skip this step.</p></div>
1378
+ <div class="paragraph"><p>Open <em>/etc/bash.bashrc</em> or <em>/etc/bashrc</em> (whichever is available) and add the following to the end of the file. Also run this command in your terminal.</p></div>
1199
1379
  <div class="listingblock">
1200
1380
  <div class="content monospaced">
1201
- <pre>export PATH=/opt/myruby/bin:$PATH</pre>
1381
+ <pre>export PATH=$PATH:/var/lib/gems/1.8/bin:/var/lib/gems/1.9/bin</pre>
1202
1382
  </div>
1203
1383
  </div>
1384
+ <span class="anchor_helper" id="_step_4_loosen_permissions"></span><h4 class="float" data-anchor="_step_4_loosen_permissions">Step 4: loosen permissions</h4>
1385
+ <div class="paragraph"><p>If in step 1 you determined that your Ruby interpreter is installed in your home directory, then you need to make sure that the Phusion Passenger gem directory is accessible by your web server. To do that, you must ensure that the Phusion Passenger gem directory, as well as all parent directories, have the world-executable permission.</p></div>
1386
+ <div class="paragraph"><p>To find out where the Phusion Passenger gem directory is, run:</p></div>
1387
+ <div class="listingblock">
1388
+ <div class="content monospaced">
1389
+ <pre>passenger-config --root</pre>
1390
+ </div>
1204
1391
  </div>
1205
- <div class="sect2">
1206
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_installing_phusion_passenger_for_nginx_through_the_installer" data-comment-topic="installing-phusion-passenger-for-nginx-through-the-installer-1lqxes1">2.3. Installing Phusion Passenger for Nginx through the installer</h3>
1207
- <div class="sect3">
1208
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_obtaining_the_phusion_passenger_files_and_running_the_installer" data-comment-topic="obtaining-the-phusion-passenger-files-and-running-the-installer-6l6ula">2.3.1. Obtaining the Phusion Passenger files and running the installer</h4>
1209
- <div class="paragraph"><p>You must obtain the Phusion Passenger files in order to run the installer.
1210
- This can be done either by installing the Phusion Passenger gem, or by
1211
- downloading the source tarball.</p></div>
1212
- <div class="sect4">
1213
- <h5 id="_gem">Gem</h5>
1214
- <div class="paragraph"><p>First, install the Phusion Passenger gem by running:</p></div>
1392
+ <div class="paragraph"><p>Suppose that the above command outputs <em>/home/phusion/.rvm/gems/ruby-1.9.3-p362/gems/passenger-x.x.x</em>. Then you <span class="monospaced">chmod o+x</span> the directory itself and all parent directories up until <em>/home/phusion</em>:</p></div>
1215
1393
  <div class="listingblock">
1216
1394
  <div class="content monospaced">
1217
- <pre>gem install passenger</pre>
1395
+ <pre>chmod o+x /home/phusion/.rvm/gems/ruby-1.9.3-p362/gems/passenger-x.x.x
1396
+ chmod o+x /home/phusion/.rvm/gems/ruby-1.9.3-p362/gems
1397
+ chmod o+x /home/phusion/.rvm/gems/ruby-1.9.3-p362
1398
+ chmod o+x /home/phusion/.rvm/gems
1399
+ chmod o+x /home/phusion/.rvm
1400
+ chmod o+x /home/phusion</pre>
1218
1401
  </div>
1219
1402
  </div>
1220
- <div class="paragraph"><p>Next, run the Phusion Passenger installer for Nginx:</p></div>
1403
+ <span class="anchor_helper" id="run_passenger_installer"></span><h4 class="float" data-anchor="run_passenger_installer">Step 5: run the Phusion Passenger installer</h4>
1404
+ <div class="paragraph"><p>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. That’s what we will do in this step. The good news is that Phusion Passenger provides a tool to make this easy for you.</p></div>
1405
+ <div class="paragraph"><p>If you’ve already installed Nginx before, but without Phusion Passenger support, then you <strong>should</strong> 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.</p></div>
1406
+ <div class="paragraph"><p>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.</p></div>
1407
+ <div class="paragraph"><p>Here’s how you can uninstall the original Nginx:</p></div>
1408
+ <div class="ulist"><ul>
1409
+ <li>
1410
+ <p>
1411
+ If you installed the existing Nginx through APT, run: <span class="monospaced">sudo apt-get remove nginx nginx-full nginx-light nginx-naxsi nginx-common</span>
1412
+ </p>
1413
+ </li>
1414
+ <li>
1415
+ <p>
1416
+ If you installed the existing Nginx through YUM, run <span class="monospaced">yum remove nginx</span> as root.
1417
+ </p>
1418
+ </li>
1419
+ </ul></div>
1420
+ <div class="paragraph"><p>To proceed with installing or upgrading Phusion Passenger, run the Phusion Passenger Nginx installer and follow the on-screen instructions:</p></div>
1221
1421
  <div class="listingblock">
1222
1422
  <div class="content monospaced">
1223
1423
  <pre>passenger-install-nginx-module</pre>
1224
1424
  </div>
1225
1425
  </div>
1226
- <div class="paragraph"><p>Please follow the instructions given by the installer.</p></div>
1426
+ <div class="paragraph"><p>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.</p></div>
1427
+ <span class="anchor_helper" id="verify_passenger_running"></span><h4 class="float" data-anchor="verify_passenger_running">Step 6: Verifying that Phusion Passenger is running</h4>
1428
+ <div class="paragraph"><p>Restart your web server and run:</p></div>
1429
+ <div class="listingblock">
1430
+ <div class="content monospaced">
1431
+ <pre>passenger-memory-stats</pre>
1432
+ </div>
1227
1433
  </div>
1228
- <div class="sect4">
1229
- <h5 id="_source_tarball">Source tarball</h5>
1230
- <div class="paragraph"><p>The source tarball can be download from the
1231
- <a href="http://www.modrails.com/">Phusion Passenger website</a>. Extract the tarball to
1232
- whatever location you prefer. <strong>The Phusion Passenger files are to reside in that
1233
- location permanently.</strong> For example, if you would like Phusion Passenger to
1234
- reside in <span class="monospaced">/opt/passenger-x.x.x</span>, then type:</p></div>
1434
+ <div class="paragraph"><p>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!</p></div>
1435
+ <div class="paragraph"><p>If the output is not as expected, then please refer to the <a href="#troubleshooting">Troubleshooting</a> section.</p></div>
1436
+ </div>
1437
+ <div class="sect2">
1438
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="tarball_generic_install"></span><h3 data-comment-topic="generic-installation-upgrade-and-downgrade-method-via-tarball-2gkx43" data-anchor="tarball_generic_install">2.2. Generic installation, upgrade and downgrade method: via tarball</h3>
1439
+ <span class="anchor_helper" id="_step_1_download_and_extract_the_tarball"></span><h4 class="float" data-anchor="_step_1_download_and_extract_the_tarball">Step 1: download and extract the tarball</h4>
1440
+ <div class="paragraph"><p>Download the open source Phusion Passenger tarball from <a href="https://www.phusionpassenger.com/download#open_source">the Phusion Passenger website</a>. If you want a specific version, please refer to the release archive on <a href="http://rubyforge.org/frs/?group_id=5873&amp;release_id=46919">RubyForge</a>.</p></div>
1441
+ <div class="paragraph"><p>If you a <a href="https://www.phusionpassenger.com/enterprise">Phusion Passenger Enterprise</a> customer, download the Phusion Passenger Enterprise tarball from the <a href="https://www.phusionpassenger.com/orders">Customer Area</a>. Also be sure to download the <strong>license key</strong> and save it as <em>/etc/passenger-enterprise-license</em>.</p></div>
1442
+ <div class="paragraph"><p>Once you have downloaded the tarball, pick a location to extract it to. You can pick any location. A good location is <em>/opt/passenger</em>. Let’s call this location <span class="monospaced">$PREFIX</span>. Create this directory and extract the tarball as follows:</p></div>
1235
1443
  <div class="listingblock">
1236
1444
  <div class="content monospaced">
1237
- <pre>cd /opt
1238
- tar xzvf ~/YourDownloadsFolder/passenger-x.x.x.tar.gz</pre>
1445
+ <pre>mkdir $PREFIX
1446
+ cd $PREFIX
1447
+ tar xzvf /location-to/passenger-x.x.x.tar.gz
1448
+ cd $PREFIX/passenger-x.x.x</pre>
1239
1449
  </div>
1240
1450
  </div>
1241
- <div class="paragraph"><p>Next, run the Phusion Passenger installer for Nginx:</p></div>
1451
+ <div class="paragraph"><p>Note that <span class="monospaced">passenger-x.x.x</span> should be <span class="monospaced">passenger-enterprise-server-x.x.x</span> if you’re using Phusion Passenger Enterprise.</p></div>
1452
+ <span class="anchor_helper" id="_step_2_loosen_permissions"></span><h4 class="float" data-anchor="_step_2_loosen_permissions">Step 2: loosen permissions</h4>
1453
+ <div class="paragraph"><p>The Phusion Passenger directory must be accessible by the web server and by any web apps you want to run. To do that, you must ensure that the Phusion Passenger gem directory, as well as all parent directories, have the world-executable permission.</p></div>
1454
+ <div class="paragraph"><p>Suppose that the Phusion Passenger directory is <em>/opt/passenger/passenger-4.0.0</em>. Run <span class="monospaced">chmod o+x</span> on the directory itself and all parent directories.</p></div>
1242
1455
  <div class="listingblock">
1243
1456
  <div class="content monospaced">
1244
- <pre>/opt/passenger-x.x.x/bin/passenger-install-nginx-module</pre>
1457
+ <pre>chmod o+x /opt/passenger/passenger-4.0.0
1458
+ chmod o+x /opt/passenger
1459
+ chmod o+x /opt</pre>
1245
1460
  </div>
1246
1461
  </div>
1247
- <div class="paragraph"><p>Please follow the instructions given by the installer.</p></div>
1248
- <div class="admonitionblock">
1249
- <table><tr>
1250
- <td class="icon">
1251
- <img src="./images/icons/important.png" alt="Important">
1252
- </td>
1253
- <td class="content">Please do not remove the passenger-x.x.x folder after installation.
1254
- Furthermore, the passenger-x.x.x folder must be accessible by Nginx.</td>
1255
- </tr></table>
1462
+ <span class="anchor_helper" id="_step_3_installing_ruby_and_rake"></span><h4 class="float" data-anchor="_step_3_installing_ruby_and_rake">Step 3: installing Ruby and Rake</h4>
1463
+ <div class="paragraph"><p>Phusion Passenger supports multiple languages and its core is written in C++, but its installer and administration tools are written in Ruby, so you must install that.</p></div>
1464
+ <div class="paragraph"><p>Even though Ruby is required, Ruby will not be loaded during normal operation unless you deploy a Ruby web application on Phusion Passenger.</p></div>
1465
+ <div class="paragraph"><p>Run <span class="monospaced">ruby --version</span> and <span class="monospaced">rake --version</span> to find out whether both commands are already installed and recent enough. Phusion Passenger requires Ruby &gt;= 1.8.6. Any Rake version will do.</p></div>
1466
+ <div class="paragraph">
1467
+ <div class="title">Debian 6</div>
1468
+ <p>We recommend you to use <a href="http://wiki.brightbox.co.uk/docs:phusion-passenger">the Brightbox Ruby packages</a>. They provide more up-to-date versions of Ruby than Debian’s official repositories provide. Their Ubuntu Lucid repository is compatible with Debian 6. If you do not want to use the Brightbox repository, then follow the instructions for Debian 5.</p>
1256
1469
  </div>
1470
+ <div class="paragraph"><p>Create <em>/etc/apt/sources.list.d/brightbox-source.list</em>:</p></div>
1471
+ <div class="listingblock">
1472
+ <div class="content monospaced">
1473
+ <pre>deb http://ppa.launchpad.net/brightbox/ruby-ng/ubuntu lucid main</pre>
1474
+ </div>
1257
1475
  </div>
1476
+ <div class="paragraph"><p>Install the Brightbox APT public key:</p></div>
1477
+ <div class="listingblock">
1478
+ <div class="content monospaced">
1479
+ <pre>sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C3173AA6</pre>
1480
+ </div>
1258
1481
  </div>
1259
- <div class="sect3">
1260
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_non_interactive_automatic_installation" data-comment-topic="non-interactive-automatic-installation-1u97717">2.3.2. Non-interactive/automatic installation</h4>
1261
- <div class="paragraph"><p>By default, the installer is interactive. If you want to automate installation,
1262
- then you can do so by passing various answers to the installer through command
1263
- line options.</p></div>
1264
- <div class="paragraph"><p>Please run the installer with <span class="monospaced">--help</span> for a list of available command line
1265
- options.</p></div>
1482
+ <div class="paragraph"><p>Then install Ruby and Rake:</p></div>
1483
+ <div class="listingblock">
1484
+ <div class="content monospaced">
1485
+ <pre>sudo apt-get update
1486
+ sudo apt-get install ruby1.9.3
1487
+ sudo gem install rake</pre>
1488
+ </div>
1489
+ </div>
1490
+ <div class="paragraph">
1491
+ <div class="title">Debian 5</div>
1492
+ <p>Run:</p>
1266
1493
  </div>
1494
+ <div class="listingblock">
1495
+ <div class="content monospaced">
1496
+ <pre>sudo apt-get update
1497
+ sudo apt-get install ruby rake</pre>
1498
+ </div>
1499
+ </div>
1500
+ <div class="paragraph"><p>Then <a href="#add_rubygems_bin_dir_to_path">add the RubyGems bin directory to your $PATH</a>.</p></div>
1501
+ <div class="paragraph">
1502
+ <div class="title">Ubuntu</div>
1503
+ <p>We recommend you to use <a href="http://wiki.brightbox.co.uk/docs:phusion-passenger">the Brightbox Ruby packages</a>. They provide more up-to-date versions of Ruby than Ubuntu’s official repositories provide.</p>
1504
+ </div>
1505
+ <div class="listingblock">
1506
+ <div class="content monospaced">
1507
+ <pre>sudo apt-add-repository ppa:brightbox/passenger
1508
+ sudo apt-get update</pre>
1509
+ </div>
1510
+ </div>
1511
+ <div class="paragraph"><p>If you’re on the older Ubuntu 8.04 Hardy release, the <em>apt-add-repository</em> command isn’t available so you have to install the repository and the key by hand:</p></div>
1512
+ <div class="listingblock">
1513
+ <div class="content monospaced">
1514
+ <pre>sudo sh -c 'echo "deb http://ppa.launchpad.net/brightbox/passenger/ubuntu hardy main" &gt; /etc/apt/sources.list.d/brightbox-passenger.list'
1515
+ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C3173AA6
1516
+ sudo apt-get update</pre>
1517
+ </div>
1518
+ </div>
1519
+ <div class="paragraph">
1520
+ <div class="title">Other operating systems</div>
1521
+ <p>Please install Ruby from <a href="http://www.ruby-lang.org/">the Ruby website</a>. Once Ruby is installed, run the following command (<a href="#is_ruby_home_or_system_wide_installed">possibly as root</a>) to install Rake:</p>
1522
+ </div>
1523
+ <div class="listingblock">
1524
+ <div class="content monospaced">
1525
+ <pre>gem install rake</pre>
1526
+ </div>
1527
+ </div>
1528
+ <span class="anchor_helper" id="_step_4_figuring_out_whether_your_ruby_is_installed_the_home_directory_or_system_wide"></span><h4 class="float" data-anchor="_step_4_figuring_out_whether_your_ruby_is_installed_the_home_directory_or_system_wide">Step 4: figuring out whether your Ruby is installed the home directory or system-wide</h4>
1529
+ <div class="paragraph"><p>Depending on whether you installed Ruby system-wide, you need to enter a root prompt before continuing to step 5. Please refer to <a href="#is_ruby_home_or_system_wide_installed">this section</a>.</p></div>
1530
+ <span class="anchor_helper" id="_step_5_run_the_phusion_passenger_installer"></span><h4 class="float" data-anchor="_step_5_run_the_phusion_passenger_installer">Step 5: run the Phusion Passenger installer</h4>
1531
+ <div class="paragraph"><p>Please refer to <a href="#run_passenger_installer">this section</a>.
1532
+ Note that the <span class="monospaced">passenger-install-nginx-module</span> command is inside the <em>bin</em> subdirectory of the Phusion Passenger source directory, so you would have to run something like <em>/opt/passenger/passenger-x.x.x/bin/passenger-install-nginx-module</em>.</p></div>
1533
+ <span class="anchor_helper" id="_step_6_verifying_that_phusion_passenger_is_running"></span><h4 class="float" data-anchor="_step_6_verifying_that_phusion_passenger_is_running">Step 6: Verifying that Phusion Passenger is running</h4>
1534
+ <div class="paragraph"><p>Please refer to <a href="#verify_passenger_running">this section</a>. Note that all Phusion Passenger administration scripts are located inside the <em>bin</em> subdirectory of the Phusion Passenger source directory, so you would have to run something like <em>/opt/passenger/passenger-x.x.x/bin/passenger-memory-stats</em>.</p></div>
1267
1535
  </div>
1268
1536
  <div class="sect2">
1269
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_installing_phusion_passenger_for_nginx_manually" data-comment-topic="installing-phusion-passenger-for-nginx-manually-1qg1e2x">2.4. Installing Phusion Passenger for Nginx manually</h3>
1270
- <div class="paragraph"><p>You can also install Phusion Passenger the way you install any other Nginx module.
1271
- To do this, run Nginx’s configure script with <span class="monospaced">--add-module=/path-to-passenger-root/ext/nginx</span>.</p></div>
1272
- <div class="paragraph"><p>If you installed Phusion Passenger via the gem, then <em>path-to-passenger-root</em>
1273
- can be obtained with the command:</p></div>
1537
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_installing_or_upgrading_on_ubuntu"></span><h3 data-comment-topic="installing-or-upgrading-on-ubuntu-fw5fvp" data-anchor="_installing_or_upgrading_on_ubuntu">2.3. Installing or upgrading on Ubuntu</h3>
1538
+ <div class="paragraph"><p>John Leach from Brightbox has kindly provided a Ubuntu packages for Phusion Passenger. The packages are available from the <a href="http://wiki.brightbox.co.uk/docs:phusion-passenger">Brightbox repository</a>. Only packages for the open source version of Phusion Passenger are provided. <a href="https://www.phusionpassenger.com/enterprise">Phusion Passenger Enterprise</a> customers should use the <a href="#rubygems_generic_install">generic RubyGems installation method</a> or <a href="#tarball_generic_install">the generic tarball installation method</a> instead.</p></div>
1539
+ <div class="paragraph"><p>Add the following line to the Third Party Software Sources:</p></div>
1540
+ <div class="listingblock">
1541
+ <div class="content monospaced">
1542
+ <pre>deb http://apt.brightbox.net hardy main</pre>
1543
+ </div>
1544
+ </div>
1545
+ <div class="paragraph"><p>The simplest way to do that is to create a file in <em>/etc/apt/sources.list.d</em> containing the deb instruction, and then run <span class="monospaced">sudo apt-get update</span>.</p></div>
1546
+ <div class="paragraph"><p>Once you’ve done that, you can proceed with installing Phusion Passenger by running:</p></div>
1547
+ <div class="listingblock">
1548
+ <div class="content monospaced">
1549
+ <pre>sudo apt-get install libapache2-mod-passenger</pre>
1550
+ </div>
1551
+ </div>
1552
+ <div class="paragraph"><p>or, for the Nginx version:</p></div>
1553
+ <div class="listingblock">
1554
+ <div class="content monospaced">
1555
+ <pre>sudo apt-get install nginx-brightbox</pre>
1556
+ </div>
1557
+ </div>
1558
+ <div class="paragraph"><p>Please also visit <a href="http://wiki.brightbox.co.uk/docs:phusion-passenger">the package’s wiki page</a> for more documentation about this package.</p></div>
1559
+ </div>
1560
+ <div class="sect2">
1561
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_installing_or_upgrading_on_red_hat_fedora_centos_or_scientificlinux"></span><h3 data-comment-topic="installing-or-upgrading-on-red-hat-fedora-centos-or-scientificlinux-1uus5a1" data-anchor="_installing_or_upgrading_on_red_hat_fedora_centos_or_scientificlinux">2.4. Installing or upgrading on Red Hat, Fedora, CentOS or ScientificLinux</h3>
1562
+ <div class="paragraph"><p>YUM repositories with RPMs are maintained by <a href="https://github.com/erikogan/passenger">Erik Ogan</a> and <a href="http://stealthymonkeys.com/">Stealthy Monkeys Consulting</a>. Only packages for the open source version of Phusion Passenger are provided. <a href="https://www.phusionpassenger.com/enterprise">Phusion Passenger Enterprise</a> customers should use the <a href="#rubygems_generic_install">generic RubyGems installation method</a> or <a href="#tarball_generic_install">the generic tarball installation method</a> instead.</p></div>
1563
+ <span class="anchor_helper" id="_step_1_install_the_release_package"></span><h4 class="float" data-anchor="_step_1_install_the_release_package">Step 1: Install the release package</h4>
1564
+ <div class="paragraph"><p>The easiest way to install Phusion Passenger and keep it up to date is to install the passenger-release package from the <a href="http://passenger.stealthymonkeys.com/">main repository</a>.</p></div>
1565
+ <div class="paragraph"><p>Fedora Core 15:</p></div>
1566
+ <div class="listingblock">
1567
+ <div class="content monospaced">
1568
+ <pre>yum install http://passenger.stealthymonkeys.com/fedora/15/passenger-release.noarch.rpm</pre>
1569
+ </div>
1570
+ </div>
1571
+ <div class="paragraph"><p>Fedora Core 14:</p></div>
1572
+ <div class="listingblock">
1573
+ <div class="content monospaced">
1574
+ <pre>yum install http://passenger.stealthymonkeys.com/fedora/14/passenger-release.noarch.rpm</pre>
1575
+ </div>
1576
+ </div>
1577
+ <div class="paragraph"><p>RHEL 5 / CentOS 5 / ScientificLinux 5: (Note: these packages depend on <a href="http://fedoraproject.org/wiki/EPEL">EPEL</a>.)</p></div>
1578
+ <div class="listingblock">
1579
+ <div class="content monospaced">
1580
+ <pre>rpm -Uvh http://passenger.stealthymonkeys.com/rhel/5/passenger-release.noarch.rpm</pre>
1581
+ </div>
1582
+ </div>
1583
+ <div class="paragraph"><p>RHEL 6 / CentOS 6 / ScientificLinux 6:</p></div>
1584
+ <div class="listingblock">
1585
+ <div class="content monospaced">
1586
+ <pre>yum install http://passenger.stealthymonkeys.com/rhel/6/passenger-release.noarch.rpm</pre>
1587
+ </div>
1588
+ </div>
1589
+ <span class="anchor_helper" id="_step_2_use_yum"></span><h4 class="float" data-anchor="_step_2_use_yum">Step 2: Use YUM</h4>
1590
+ <div class="paragraph"><p>From there you can use <a href="http://prefetch.net/articles/yum.html">YUM</a> to install packages. For example, try one of these:</p></div>
1591
+ <div class="paragraph"><p>Phusion Passenger for Apache:</p></div>
1592
+ <div class="listingblock">
1593
+ <div class="content monospaced">
1594
+ <pre>yum install nginx-passenger</pre>
1595
+ </div>
1596
+ </div>
1597
+ <div class="paragraph"><p>Phusion Passenger for Nginx:</p></div>
1598
+ <div class="listingblock">
1599
+ <div class="content monospaced">
1600
+ <pre>yum install mod_passenger</pre>
1601
+ </div>
1602
+ </div>
1603
+ <div class="paragraph"><p>Phusion Passenger Standalone:</p></div>
1604
+ <div class="listingblock">
1605
+ <div class="content monospaced">
1606
+ <pre>yum install passenger-standalone</pre>
1607
+ </div>
1608
+ </div>
1609
+ <span class="anchor_helper" id="_building_your_own_packages"></span><h4 class="float" data-anchor="_building_your_own_packages">Building your own packages</h4>
1610
+ <div class="paragraph"><p>There are instructions for building your own packages and Yum repositories in the <a href="https://github.com/FooBarWidget/passenger/tree/master/rpm#readme">rpm directory ReadMe</a> within the <a href="https://github.com/FooBarWidget/passenger">GitHub repository</a>.</p></div>
1611
+ </div>
1612
+ <div class="sect2">
1613
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_upgrading_from_open_source_to_enterprise"></span><h3 data-comment-topic="upgrading-from-open-source-to-enterprise-1a58c2b" data-anchor="_upgrading_from_open_source_to_enterprise">2.5. Upgrading from open source to Enterprise</h3>
1614
+ <div class="paragraph"><p>Phusion Passenger comes in two variants: an open source version, as well as an <a href="https://www.phusionpassenger.com/enterprise">Enterprise version</a> which introduces a myriad of useful features that can improve stability and performance and efficiency.</p></div>
1615
+ <div class="paragraph"><p>Customers who have bought Phusion Passenger Enterprise can upgrade their open source installation to Enterprise as follows:</p></div>
1616
+ <div class="olist arabic"><ol class="arabic">
1617
+ <li>
1618
+ <p>
1619
+ <a href="#uninstalling">Uninstall the open source Phusion Passenger</a>.
1620
+ </p>
1621
+ </li>
1622
+ <li>
1623
+ <p>
1624
+ Install the Enterprise version by following one of the installation guides in this section (e.g. <a href="#rubygems_generic_install">RubyGems generic installation</a> or <a href="#tarball_generic_install">tarball generic installation</a>).
1625
+ </p>
1626
+ </li>
1627
+ </ol></div>
1628
+ <div class="paragraph"><p>The uninstallation is necessary because the Enterprise Ruby gem has a different gem name (<em>passenger-enterprise-server</em> instead of <em>passenger</em>), but the same administration command names (e.g. <span class="monospaced">passenger-status</span>). Uninstalling the open source version avoids any conflicts.</p></div>
1629
+ </div>
1630
+ <div class="sect2">
1631
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_non_interactive_automatic_headless_installs_or_upgrades"></span><h3 data-comment-topic="non-interactive-automatic-headless-installs-or-upgrades-834ymv" data-anchor="_non_interactive_automatic_headless_installs_or_upgrades">2.6. Non-interactive, automatic, headless installs or upgrades</h3>
1632
+ <div class="paragraph"><p>By default, the installer (<span class="monospaced">passenger-install-nginx-module</span>) is interactive. If you want to automate installation then you can do so by passing various answers to the installer through command line options. Please run the installer with <span class="monospaced">--help</span> for a list of available command line options.</p></div>
1633
+ </div>
1634
+ <div class="sect2">
1635
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_installing_as_a_normal_nginx_module_without_using_the_installer"></span><h3 data-comment-topic="installing-as-a-normal-nginx-module-without-using-the-installer-1kkpes5" data-anchor="_installing_as_a_normal_nginx_module_without_using_the_installer">2.7. Installing as a normal Nginx module without using the installer</h3>
1636
+ <div class="paragraph"><p>You can also install Phusion Passenger the way you install any other Nginx module, e.g. with <span class="monospaced">--add-module</span>. Run Nginx’s configure script with <span class="monospaced">--add-module=/path-to-passenger-root/ext/nginx</span>.</p></div>
1637
+ <div class="paragraph"><p>If you installed Phusion Passenger via the gem, then <em>path-to-passenger-root</em> can be obtained with the command:</p></div>
1274
1638
  <div class="listingblock">
1275
1639
  <div class="content monospaced">
1276
1640
  <pre>passenger-config --root</pre>
@@ -1292,35 +1656,15 @@ line into your Nginx configuration file:</p></div>
1292
1656
  <div class="paragraph"><p>After having done so, restart Nginx.</p></div>
1293
1657
  </div>
1294
1658
  <div class="sect2">
1295
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_upgrading_or_downgrading_phusion_passenger_or_nginx_itself" data-comment-topic="upgrading-or-downgrading-phusion-passenger-or-nginx-itself-8dulxz">2.5. Upgrading or downgrading Phusion Passenger or Nginx itself</h3>
1296
- <div class="paragraph"><p>Whether you’re upgrading/downgrading Phusion Passenger or Nginx itself (or perhaps both),
1297
- Nginx will have to be recompiled and reinstalled. The procedure is exactly the same as
1298
- a normal installation so just follow the instructions in section 2.3 or 2.4.</p></div>
1299
- <div class="paragraph"><p>When following the installation instructions, eventually <span class="monospaced">passenger-install-nginx-module</span>
1300
- or this document will instruct you to copy &amp; paste some settings into the Nginx
1301
- configuration file; something that looks along the lines of:</p></div>
1302
- <div class="listingblock">
1303
- <div class="content monospaced">
1304
- <pre>passenger_root ...;
1305
- passenger_ruby ...;</pre>
1306
- </div>
1307
- </div>
1308
- <div class="paragraph"><p>Because you already had Phusion Passenger installed, you already had similar settings
1309
- in your Nginx configuration file, just with different values. <strong>Replace</strong> the old settings with
1310
- the new ones that you are instructed to paste. It is important that the old settings are
1311
- removed, otherwise Phusion Passenger may malfunction.</p></div>
1312
- <div class="paragraph"><p>When you’re done, restart Nginx.</p></div>
1313
- </div>
1314
- <div class="sect2">
1315
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_unloading_disabling_phusion_passenger_from_nginx_without_uninstalling_it" data-comment-topic="unloading-disabling-phusion-passenger-from-nginx-without-uninstalling-it-v447e0">2.6. Unloading (disabling) Phusion Passenger from Nginx without uninstalling it</h3>
1316
- <div class="paragraph"><p>You can temporarily unload (disable) Phusion Passenger from Nginx, without
1317
- uninstalling the Phusion Passenger files, so that Nginx behaves as if Phusion
1318
- Passenger was never installed in the first place. This might be useful to you if,
1319
- for example, you seem to be experiencing a problem caused by Phusion Passenger,
1320
- but you want to make sure whether that’s actually the case, without having
1321
- to go through the hassle of uninstalling Phusion Passenger completely. When disabled,
1659
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_disabling_without_uninstalling"></span><h3 data-comment-topic="disabling-without-uninstalling-1t5tqan" data-anchor="_disabling_without_uninstalling">2.8. Disabling without uninstalling</h3>
1660
+ <div class="paragraph"><p>You can temporarily unload (disable) Phusion Passenger from the web server, without
1661
+ uninstalling the Phusion Passenger files, so that the web server behaves as if Phusion
1662
+ Passenger was never installed in the first place. This might be useful to you if -
1663
+ for example - you seem to be experiencing a problem caused by Phusion Passenger,
1664
+ but you want to make sure whether that’s actually the case without having
1665
+ to through the hassle of uninstalling Phusion Passenger completely. When disabled,
1322
1666
  Phusion Passenger will not occupy any memory or CPU or otherwise interfere with
1323
- Nginx.</p></div>
1667
+ the web server.</p></div>
1324
1668
  <div class="paragraph"><p>To unload Phusion Passenger, edit your Nginx configuration file(s)
1325
1669
  and comment out all Phusion Passenger configuration directives.</p></div>
1326
1670
  <div class="paragraph"><p>For example, if your configuration file looks like this…</p></div>
@@ -1361,41 +1705,61 @@ http {
1361
1705
  listen 80;
1362
1706
  root /webapps/foo/public;
1363
1707
  # passenger_enabled on;
1364
- # passenger_use_global_queue on;
1365
1708
  }
1366
1709
  }</pre>
1367
1710
  </div>
1368
1711
  </div>
1369
- <div class="paragraph"><p>After you’ve done this, save the file and restart Nginx.</p></div>
1712
+ <div class="paragraph"><p>After you’ve done this, save the configuration file and restart the web server.</p></div>
1370
1713
  </div>
1371
1714
  <div class="sect2">
1372
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_uninstalling_phusion_passenger" data-comment-topic="uninstalling-phusion-passenger-wuycvb">2.7. Uninstalling Phusion Passenger</h3>
1715
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="uninstalling"></span><h3 data-comment-topic="uninstalling-phusion-passenger-wuycvb" data-anchor="uninstalling">2.9. Uninstalling</h3>
1373
1716
  <div class="paragraph"><p>To uninstall Phusion Passenger, please first remove all Phusion Passenger
1374
- configuration directives from your Nginx configuration file(s). After you’ve
1717
+ configuration directives from your web server configuration file(s). After you’ve
1375
1718
  done this, you need to remove the Phusion Passenger files.</p></div>
1376
1719
  <div class="ulist"><ul>
1377
1720
  <li>
1378
1721
  <p>
1379
- If you installed Phusion Passenger via a gem, then type <span class="monospaced">gem uninstall passenger</span>.
1380
- You might have to run this as root.
1722
+ If you installed Phusion Passenger via a Ruby gem, then run <span class="monospaced">gem uninstall passenger</span> (or, if you’re an <a href="https://www.phusionpassenger.com/enterprise">Phusion Passenger Enterprise</a> user, <span class="monospaced">gem uninstall passenger-enterprise-server</span>).
1723
+ You <a href="#is_ruby_home_or_system_wide_installed">might have to run this as root</a>.
1381
1724
  </p>
1382
1725
  </li>
1383
1726
  <li>
1384
1727
  <p>
1385
1728
  If you installed Phusion Passenger via a source tarball, then remove the directory
1386
1729
  in which you placed the extracted Phusion Passenger files. This directory is the
1387
- same as the one pointed to the by <em>PassengerRoot</em> configuration directive.
1730
+ same as the one pointed to the by <span class="monospaced">PassengerRoot</span>/<span class="monospaced">passenger_root</span> configuration directive.
1731
+ </p>
1732
+ </li>
1733
+ <li>
1734
+ <p>
1735
+ If you installed Phusion Passenger through APT or YUM, then use them to uninstall Phusion Passenger.
1388
1736
  </p>
1389
1737
  </li>
1390
1738
  </ul></div>
1391
- <div class="paragraph"><p>After having done so, recompile and reinstall Nginx itself, this time without
1392
- Phusion Passenger support, in order to purge any Phusion Passenger code from the
1393
- Nginx binary.</p></div>
1739
+ <div class="paragraph"><p>Nginx does not have to be recompiled. Altough it contains Phusion Passenger code, it will not do anything when Phusion Passenger is disabled.</p></div>
1740
+ </div>
1741
+ <div class="sect2">
1742
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="moving_phusion_passenger"></span><h3 data-comment-topic="moving-to-a-different-directory-gif3wo" data-anchor="moving_phusion_passenger">2.10. Moving to a different directory</h3>
1743
+ <div class="paragraph"><p>If you installed Phusion Passenger through a tarball then you can move the Phusion Passenger directory to another location. This is not possible if you used any of the other installation methods.</p></div>
1744
+ <div class="paragraph"><p>First, move the directory to whereever you like:</p></div>
1745
+ <div class="listingblock">
1746
+ <div class="content monospaced">
1747
+ <pre>mv /opt/passenger/passenger-4.0.0 /usr/local/passenger-4.0.0</pre>
1748
+ </div>
1749
+ </div>
1750
+ <div class="paragraph"><p>Next you must tell your web server that Phusion Passenger has moved.
1751
+ Open your Nginx configuration file and set the <em>passenger_root</em> directive to the new location:</p></div>
1752
+ <div class="listingblock">
1753
+ <div class="content monospaced">
1754
+ <pre>passenger_root /usr/local/passenger-4.0.0</pre>
1755
+ </div>
1756
+ </div>
1757
+ <div class="paragraph"><p>Restart your web server to finalize the change.</p></div>
1394
1758
  </div>
1395
1759
  </div>
1396
1760
  </div>
1397
1761
  <div class="sect1">
1398
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h2 id="deploying_a_ror_app" data-comment-topic="deploying-a-ruby-on-rails-1-x-or-2-x-but-not-rails-3-application-b69gqa">3. Deploying a Ruby on Rails 1.x or 2.x (but NOT Rails &gt;= 3) application</h2>
1762
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="deploying_a_ror_app"></span><h2 data-comment-topic="deploying-a-ruby-on-rails-1-x-or-2-x-but-not-rails-3-application-b69gqa" data-anchor="deploying_a_ror_app">3. Deploying a Ruby on Rails 1.x or 2.x (but NOT Rails &gt;= 3) application</h2>
1399
1763
  <div class="sectionbody">
1400
1764
  <div class="paragraph"><p>Suppose you have a Ruby on Rails application in <em>/webapps/mycook</em>, and you own
1401
1765
  the domain <em>www.mycook.com</em>. You can either deploy your application to the
@@ -1413,7 +1777,7 @@ are run, is “production”. You can change this by changing the
1413
1777
  </tr></table>
1414
1778
  </div>
1415
1779
  <div class="sect2">
1416
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_deploying_to_a_virtual_host_8217_s_root" data-comment-topic="deploying-to-a-virtual-host-s-root-1mh24z5">3.1. Deploying to a virtual host’s root</h3>
1780
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_deploying_to_a_virtual_host_8217_s_root"></span><h3 data-comment-topic="deploying-to-a-virtual-host-s-root-1mh24z5" data-anchor="_deploying_to_a_virtual_host_8217_s_root">3.1. Deploying to a virtual host’s root</h3>
1417
1781
  <div class="paragraph"><p>Add a <em>server</em> virtual host entry to your Nginx configuration file. The virtual
1418
1782
  host’s root must point to your Ruby on Rails application’s <em>public</em> folder.</p></div>
1419
1783
  <div class="paragraph"><p>Inside the <em>server</em> block, set <em>passenger_enabled on</em>.</p></div>
@@ -1437,7 +1801,7 @@ host’s root must point to your Ruby on Rails application’s <em>public</em> f
1437
1801
  <div class="paragraph"><p>Then restart Nginx. The application has now been deployed.</p></div>
1438
1802
  </div>
1439
1803
  <div class="sect2">
1440
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="deploying_rails_to_sub_uri" data-comment-topic="deploying-to-a-sub-uri-1il2qj7">3.2. Deploying to a sub URI</h3>
1804
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="deploying_rails_to_sub_uri"></span><h3 data-comment-topic="deploying-to-a-sub-uri-1il2qj7" data-anchor="deploying_rails_to_sub_uri">3.2. Deploying to a sub URI</h3>
1441
1805
  <div class="paragraph"><p>Suppose that you already have a <em>server</em> virtual host entry:</p></div>
1442
1806
  <div class="listingblock">
1443
1807
  <div class="content monospaced">
@@ -1506,7 +1870,7 @@ option to the <em>server</em> block:</p></div>
1506
1870
  </div>
1507
1871
  </div>
1508
1872
  <div class="sect2">
1509
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_redeploying_restarting_the_ruby_on_rails_application" data-comment-topic="redeploying-restarting-the-ruby-on-rails-application--1eso761">3.3. Redeploying (restarting the Ruby on Rails application)</h3>
1873
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_redeploying_restarting_the_ruby_on_rails_application"></span><h3 data-comment-topic="redeploying-restarting-the-ruby-on-rails-application--1eso761" data-anchor="_redeploying_restarting_the_ruby_on_rails_application">3.3. Redeploying (restarting the Ruby on Rails application)</h3>
1510
1874
  <div class="paragraph"><p>Deploying a new version of a Ruby on Rails application is as simple as
1511
1875
  re-uploading the application files, and restarting the application.</p></div>
1512
1876
  <div class="paragraph"><p>There are two ways to restart the application:</p></div>
@@ -1537,20 +1901,20 @@ of this file has changed in order to determine whether the application should
1537
1901
  be restarted.</p></div>
1538
1902
  </div>
1539
1903
  <div class="sect2">
1540
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_migrations" data-comment-topic="migrations-9yyb8w">3.4. Migrations</h3>
1904
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_migrations"></span><h3 data-comment-topic="migrations-9yyb8w" data-anchor="_migrations">3.4. Migrations</h3>
1541
1905
  <div class="paragraph"><p>Phusion Passenger is not related to Ruby on Rails migrations in any way. To
1542
1906
  run migrations on your deployment server, please login to your deployment
1543
1907
  server (e.g. with <em>ssh</em>) and type <span class="monospaced">rake db:migrate RAILS_ENV=production</span> in
1544
1908
  a shell console, just like one would normally run migrations.</p></div>
1545
1909
  </div>
1546
1910
  <div class="sect2">
1547
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_capistrano_integration" data-comment-topic="capistrano-integration-1ktunm6">3.5. Capistrano integration</h3>
1911
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_capistrano_integration"></span><h3 data-comment-topic="capistrano-integration-1ktunm6" data-anchor="_capistrano_integration">3.5. Capistrano integration</h3>
1548
1912
  <div class="paragraph"><p>See <a href="#capistrano">Capistrano recipe</a>.</p></div>
1549
1913
  </div>
1550
1914
  </div>
1551
1915
  </div>
1552
1916
  <div class="sect1">
1553
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h2 id="deploying_a_rack_app" data-comment-topic="deploying-a-rack-based-ruby-application-including-rails-3--12benx3">4. Deploying a Rack-based Ruby application (including Rails &gt;= 3)</h2>
1917
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="deploying_a_rack_app"></span><h2 data-comment-topic="deploying-a-rack-based-ruby-application-including-rails-3--12benx3" data-anchor="deploying_a_rack_app">4. Deploying a Rack-based Ruby application (including Rails &gt;= 3)</h2>
1554
1918
  <div class="sectionbody">
1555
1919
  <div class="paragraph"><p>Phusion Passenger supports arbitrary Ruby web applications that follow the
1556
1920
  <a href="http://rack.rubyforge.org/">Rack</a> interface.</p></div>
@@ -1603,7 +1967,7 @@ are run, is “production”. You can change this by changing the
1603
1967
  </tr></table>
1604
1968
  </div>
1605
1969
  <div class="sect2">
1606
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_tutorial_example_writing_and_deploying_a_hello_world_rack_application" data-comment-topic="tutorial-example-writing-and-deploying-a-hello-world-rack-application-1wstx99">4.1. Tutorial/example: writing and deploying a Hello World Rack application</h3>
1970
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_tutorial_example_writing_and_deploying_a_hello_world_rack_application"></span><h3 data-comment-topic="tutorial-example-writing-and-deploying-a-hello-world-rack-application-1wstx99" data-anchor="_tutorial_example_writing_and_deploying_a_hello_world_rack_application">4.1. Tutorial/example: writing and deploying a Hello World Rack application</h3>
1607
1971
  <div class="paragraph"><p>First we create a Phusion Passenger-compliant Rack directory structure:</p></div>
1608
1972
  <div class="listingblock">
1609
1973
  <div class="content monospaced">
@@ -1645,7 +2009,7 @@ the Nginx configuration file:</p></div>
1645
2009
  under the URL <em>http://www.rackexample.com/</em>.</p></div>
1646
2010
  </div>
1647
2011
  <div class="sect2">
1648
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_deploying_to_a_virtual_host_8217_s_root_2" data-comment-topic="deploying-to-a-virtual-host-s-root-f02erj">4.2. Deploying to a virtual host’s root</h3>
2012
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_deploying_to_a_virtual_host_8217_s_root_2"></span><h3 data-comment-topic="deploying-to-a-virtual-host-s-root-f02erj" data-anchor="_deploying_to_a_virtual_host_8217_s_root_2">4.2. Deploying to a virtual host’s root</h3>
1649
2013
  <div class="paragraph"><p>Add a <em>server</em> virtual host entry to your Nginx configuration file. The virtual host’s
1650
2014
  root must point to your Rack application’s <em>public</em> folder. You must also set
1651
2015
  <em>passenger_enabled on</em> in the <em>server</em> block.</p></div>
@@ -1667,7 +2031,7 @@ root must point to your Rack application’s <em>public</em> folder. You must al
1667
2031
  <div class="paragraph"><p>Then restart Nginx. The application has now been deployed.</p></div>
1668
2032
  </div>
1669
2033
  <div class="sect2">
1670
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="deploying_rack_to_sub_uri" data-comment-topic="deploying-to-a-sub-uri-37q0ou">4.3. Deploying to a sub URI</h3>
2034
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="deploying_rack_to_sub_uri"></span><h3 data-comment-topic="deploying-to-a-sub-uri-37q0ou" data-anchor="deploying_rack_to_sub_uri">4.3. Deploying to a sub URI</h3>
1671
2035
  <div class="paragraph"><p>Suppose that you already have a virtual host:</p></div>
1672
2036
  <div class="listingblock">
1673
2037
  <div class="content monospaced">
@@ -1737,7 +2101,7 @@ option to the <em>server</em> block:</p></div>
1737
2101
  </div>
1738
2102
  </div>
1739
2103
  <div class="sect2">
1740
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_redeploying_restarting_the_rack_application" data-comment-topic="redeploying-restarting-the-rack-application--xnbfam">4.4. Redeploying (restarting the Rack application)</h3>
2104
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_redeploying_restarting_the_rack_application"></span><h3 data-comment-topic="redeploying-restarting-the-rack-application--xnbfam" data-anchor="_redeploying_restarting_the_rack_application">4.4. Redeploying (restarting the Rack application)</h3>
1741
2105
  <div class="paragraph"><p>Deploying a new version of a Rack application is as simple as
1742
2106
  re-uploading the application files, and restarting the application.</p></div>
1743
2107
  <div class="paragraph"><p>There are two ways to restart the application:</p></div>
@@ -1764,10 +2128,10 @@ command line:</p></div>
1764
2128
  </div>
1765
2129
  </div>
1766
2130
  <div class="sect2">
1767
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_rackup_specifications_for_various_web_frameworks" data-comment-topic="rackup-specifications-for-various-web-frameworks-1a2cs41">4.5. Rackup specifications for various web frameworks</h3>
2131
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_rackup_specifications_for_various_web_frameworks"></span><h3 data-comment-topic="rackup-specifications-for-various-web-frameworks-1a2cs41" data-anchor="_rackup_specifications_for_various_web_frameworks">4.5. Rackup specifications for various web frameworks</h3>
1768
2132
  <div class="paragraph"><p>This subsection shows example <em>config.ru</em> files for various web frameworks.</p></div>
1769
2133
  <div class="sect3">
1770
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_camping" data-comment-topic="camping-16vz2yb">4.5.1. Camping</h4>
2134
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_camping"></span><h4 data-comment-topic="camping-16vz2yb" data-anchor="_camping">4.5.1. Camping</h4>
1771
2135
  <div class="listingblock">
1772
2136
  <div class="content monospaced">
1773
2137
  <pre>require 'rubygems'
@@ -1786,7 +2150,7 @@ run Rack::Adapter::Camping.new(Blog)</pre>
1786
2150
  <div class="paragraph"><p>For Camping versions 2.0 and up, using <span class="monospaced">run Blog</span> as the final line will do.</p></div>
1787
2151
  </div>
1788
2152
  <div class="sect3">
1789
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_halcyon" data-comment-topic="halcyon-1benlfl">4.5.2. Halcyon</h4>
2153
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_halcyon"></span><h4 data-comment-topic="halcyon-1benlfl" data-anchor="_halcyon">4.5.2. Halcyon</h4>
1790
2154
  <div class="listingblock">
1791
2155
  <div class="content monospaced">
1792
2156
  <pre>require 'rubygems'
@@ -1798,7 +2162,7 @@ run Halcyon::Runner.new</pre>
1798
2162
  </div>
1799
2163
  </div>
1800
2164
  <div class="sect3">
1801
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_mack" data-comment-topic="mack-1ezijq6">4.5.3. Mack</h4>
2165
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_mack"></span><h4 data-comment-topic="mack-1ezijq6" data-anchor="_mack">4.5.3. Mack</h4>
1802
2166
  <div class="listingblock">
1803
2167
  <div class="content monospaced">
1804
2168
  <pre>ENV["MACK_ENV"] = ENV["RACK_ENV"]
@@ -1810,7 +2174,7 @@ run Mack::Utils::Server.build_app</pre>
1810
2174
  </div>
1811
2175
  </div>
1812
2176
  <div class="sect3">
1813
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_merb" data-comment-topic="merb-ddsh55">4.5.4. Merb</h4>
2177
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_merb"></span><h4 data-comment-topic="merb-ddsh55" data-anchor="_merb">4.5.4. Merb</h4>
1814
2178
  <div class="listingblock">
1815
2179
  <div class="content monospaced">
1816
2180
  <pre>require 'rubygems'
@@ -1829,7 +2193,7 @@ run Merb::Rack::Application.new</pre>
1829
2193
  </div>
1830
2194
  </div>
1831
2195
  <div class="sect3">
1832
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_ramaze" data-comment-topic="ramaze-1p2zod">4.5.5. Ramaze</h4>
2196
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_ramaze"></span><h4 data-comment-topic="ramaze-1p2zod" data-anchor="_ramaze">4.5.5. Ramaze</h4>
1833
2197
  <div class="listingblock">
1834
2198
  <div class="content monospaced">
1835
2199
  <pre>require "rubygems"
@@ -1842,7 +2206,7 @@ run Ramaze::Adapter::Base</pre>
1842
2206
  </div>
1843
2207
  </div>
1844
2208
  <div class="sect3">
1845
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_sinatra" data-comment-topic="sinatra-a7u9ag">4.5.6. Sinatra</h4>
2209
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_sinatra"></span><h4 data-comment-topic="sinatra-a7u9ag" data-anchor="_sinatra">4.5.6. Sinatra</h4>
1846
2210
  <div class="listingblock">
1847
2211
  <div class="content monospaced">
1848
2212
  <pre>require 'rubygems'
@@ -1857,7 +2221,7 @@ run Sinatra::Application</pre>
1857
2221
  </div>
1858
2222
  </div>
1859
2223
  <div class="sect1">
1860
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h2 id="_deploying_a_wsgi_python_application" data-comment-topic="deploying-a-wsgi-python-application-1or2efo">5. Deploying a WSGI (Python) application</h2>
2224
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_deploying_a_wsgi_python_application"></span><h2 data-comment-topic="deploying-a-wsgi-python-application-1or2efo" data-anchor="_deploying_a_wsgi_python_application">5. Deploying a WSGI (Python) application</h2>
1861
2225
  <div class="sectionbody">
1862
2226
  <div class="paragraph"><p>Phusion Passenger supports all WSGI-compliant Python web applications. Suppose that you have a WSGI application in <em>/webapps/wsgiapp</em>. Then that folder must contain at least three entries:</p></div>
1863
2227
  <div class="ulist"><ul>
@@ -1890,7 +2254,7 @@ run Sinatra::Application</pre>
1890
2254
  </div>
1891
2255
  </div>
1892
2256
  <div class="sect2">
1893
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_tutorial_example_writing_and_deploying_a_hello_world_wsgi_application" data-comment-topic="tutorial-example-writing-and-deploying-a-hello-world-wsgi-application-k5ron2">5.1. Tutorial/example: writing and deploying a Hello World WSGI application</h3>
2257
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_tutorial_example_writing_and_deploying_a_hello_world_wsgi_application"></span><h3 data-comment-topic="tutorial-example-writing-and-deploying-a-hello-world-wsgi-application-k5ron2" data-anchor="_tutorial_example_writing_and_deploying_a_hello_world_wsgi_application">5.1. Tutorial/example: writing and deploying a Hello World WSGI application</h3>
1894
2258
  <div class="paragraph"><p>First we create a Phusion Passenger-compliant WSGI directory structure:</p></div>
1895
2259
  <div class="listingblock">
1896
2260
  <div class="content monospaced">
@@ -1907,7 +2271,7 @@ $ some_awesome_editor passenger_wsgi.py
1907
2271
  ...type in some source code...
1908
2272
  $ cat passenger_wsgi.py
1909
2273
  def application(environ, start_response):
1910
- start_response(200, [('Content-Type', 'text/plain')])
2274
+ start_response('200 OK', [('Content-Type', 'text/plain')])
1911
2275
  return ["hello world!\n"]</pre>
1912
2276
  </div>
1913
2277
  </div>
@@ -1931,7 +2295,7 @@ the Nginx configuration file:</p></div>
1931
2295
  under the URL <em>http://www.wsgiexample.com/</em>.</p></div>
1932
2296
  </div>
1933
2297
  <div class="sect2">
1934
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_deploying_to_a_virtual_host_8217_s_root_3" data-comment-topic="deploying-to-a-virtual-host-s-root-1chcpbj">5.2. Deploying to a virtual host’s root</h3>
2298
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_deploying_to_a_virtual_host_8217_s_root_3"></span><h3 data-comment-topic="deploying-to-a-virtual-host-s-root-1chcpbj" data-anchor="_deploying_to_a_virtual_host_8217_s_root_3">5.2. Deploying to a virtual host’s root</h3>
1935
2299
  <div class="paragraph"><p>Add a <em>server</em> virtual host entry to your Nginx configuration file. The virtual host’s
1936
2300
  root must point to your WSGI application’s <em>public</em> folder. You must also set
1937
2301
  <em>passenger_enabled on</em> in the <em>server</em> block.</p></div>
@@ -1953,7 +2317,7 @@ root must point to your WSGI application’s <em>public</em> folder. You must al
1953
2317
  <div class="paragraph"><p>Then restart Nginx. The application has now been deployed.</p></div>
1954
2318
  </div>
1955
2319
  <div class="sect2">
1956
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_redeploying_restarting_the_wsgi_application" data-comment-topic="redeploying-restarting-the-wsgi-application--10zdh2k">5.3. Redeploying (restarting the WSGI application)</h3>
2320
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_redeploying_restarting_the_wsgi_application"></span><h3 data-comment-topic="redeploying-restarting-the-wsgi-application--10zdh2k" data-anchor="_redeploying_restarting_the_wsgi_application">5.3. Redeploying (restarting the WSGI application)</h3>
1957
2321
  <div class="paragraph"><p>Deploying a new version of a WSGI application is as simple as
1958
2322
  re-uploading the application files, and restarting the application.</p></div>
1959
2323
  <div class="paragraph"><p>There are two ways to restart the application:</p></div>
@@ -1982,14 +2346,14 @@ command line:</p></div>
1982
2346
  </div>
1983
2347
  </div>
1984
2348
  <div class="sect1">
1985
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h2 id="_configuring_phusion_passenger" data-comment-topic="configuring-phusion-passenger-1g1svey">6. Configuring Phusion Passenger</h2>
2349
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_configuring_phusion_passenger"></span><h2 data-comment-topic="configuring-phusion-passenger-1g1svey" data-anchor="_configuring_phusion_passenger">6. Configuring Phusion Passenger</h2>
1986
2350
  <div class="sectionbody">
1987
2351
  <div class="paragraph"><p>After installation, Phusion Passenger does not need any further configurations.
1988
2352
  Nevertheless, the system administrator may be interested in changing
1989
2353
  Phusion Passenger’s behavior. Phusion Passenger supports the following configuration
1990
2354
  options in the Nginx configuration file:</p></div>
1991
2355
  <div class="sect2">
1992
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_passenger_root_lt_directory_gt" data-comment-topic="passenger-root-directory--bqvhhz">6.1. passenger_root &lt;directory&gt;</h3>
2356
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_root_lt_directory_gt"></span><h3 data-comment-topic="passenger-root-directory--bqvhhz" data-anchor="_passenger_root_lt_directory_gt">6.1. passenger_root &lt;directory&gt;</h3>
1993
2357
  <div class="paragraph"><p>The location to the Phusion Passenger root directory. This configuration option
1994
2358
  is essential to Phusion Passenger, and allows Phusion Passenger to locate its own
1995
2359
  data files. The correct value is given by the installer.</p></div>
@@ -1999,7 +2363,7 @@ this option as well. Please read
1999
2363
  <div class="paragraph"><p>This required option may only occur once, in the <em>http</em> configuration block.</p></div>
2000
2364
  </div>
2001
2365
  <div class="sect2">
2002
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_passenger_ruby_lt_filename_gt" data-comment-topic="passenger-ruby-filename--1gnok5k">6.2. passenger_ruby &lt;filename&gt;</h3>
2366
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_ruby_lt_filename_gt"></span><h3 data-comment-topic="passenger-ruby-filename--1gnok5k" data-anchor="_passenger_ruby_lt_filename_gt">6.2. passenger_ruby &lt;filename&gt;</h3>
2003
2367
  <div class="paragraph"><p>This option allows one to specify the Ruby interpreter to use.</p></div>
2004
2368
  <div class="ulist"><ul>
2005
2369
  <li>
@@ -2026,7 +2390,7 @@ In an <em>if</em> configuration scope.
2026
2390
  <div class="paragraph"><p>In each place, it may be specified at most once. The default value is <em>ruby</em>, meaning that the Ruby interpreter will be looked up according to the <span class="monospaced">PATH</span> environment variable.</p></div>
2027
2391
  </div>
2028
2392
  <div class="sect2">
2029
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="PassengerSpawnMethod" data-comment-topic="passenger-spawn-method-string--1sc6njl">6.3. passenger_spawn_method &lt;string&gt;</h3>
2393
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerSpawnMethod"></span><h3 data-comment-topic="passenger-spawn-method-string--1sc6njl" data-anchor="PassengerSpawnMethod">6.3. passenger_spawn_method &lt;string&gt;</h3>
2030
2394
  <div class="admonitionblock">
2031
2395
  <table><tr>
2032
2396
  <td class="icon">
@@ -2119,7 +2483,7 @@ In an <em>if</em> configuration scope.
2119
2483
  <div class="paragraph"><p>In each place, it may be specified at most once. The default value is <em>smart</em>.</p></div>
2120
2484
  </div>
2121
2485
  <div class="sect2">
2122
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="PassengerRollingRestarts" data-comment-topic="passenger-rolling-restarts">6.4. passenger_rolling_restarts &lt;on|off&gt;</h3>
2486
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerRollingRestarts"></span><h3 data-comment-topic="passenger-rolling-restarts" data-anchor="PassengerRollingRestarts">6.4. passenger_rolling_restarts &lt;on|off&gt;</h3>
2123
2487
  <div class="paragraph"><p><strong>This feature is only available in <a href="https://www.phusionpassenger.com/enterprise">Phusion Passenger Enterprise</a>. It was introduced in version 3.0.0. <a href="https://www.phusionpassenger.com/download">Buy Phusion Passenger Enterprise here.</a></strong></p></div>
2124
2488
  <div class="paragraph"><p>Enables or disables support for rolling restarts. Normally when you
2125
2489
  restart an application (by touching restart.txt), Phusion Passenger would
@@ -2192,7 +2556,7 @@ In an <em>if</em> configuration scope.
2192
2556
  <div class="paragraph"><p>In each place, it may be specified at most once. The default value is <em>off</em>.</p></div>
2193
2557
  </div>
2194
2558
  <div class="sect2">
2195
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_passenger_resist_deployment_errors_lt_on_off_gt" data-comment-topic="passenger-resist-deployment-errors-on-off--k9yf1">6.5. passenger_resist_deployment_errors &lt;on|off&gt;</h3>
2559
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_resist_deployment_errors_lt_on_off_gt"></span><h3 data-comment-topic="passenger-resist-deployment-errors-on-off--k9yf1" data-anchor="_passenger_resist_deployment_errors_lt_on_off_gt">6.5. passenger_resist_deployment_errors &lt;on|off&gt;</h3>
2196
2560
  <div class="paragraph"><p><strong>This feature is only available in <a href="https://www.phusionpassenger.com/enterprise">Phusion Passenger Enterprise</a>. It was introduced in version 3.0.0. <a href="https://www.phusionpassenger.com/download">Buy Phusion Passenger Enterprise here.</a></strong></p></div>
2197
2561
  <div class="paragraph"><p>Enables or disables resistance against deployment errors.</p></div>
2198
2562
  <div class="paragraph"><p>Suppose you’ve upgraded your application and you’ve issues a command to restart it (by touching restart.txt), but the application code contains an error that prevents Phusion Passenger from successfully spawning a process (e.g. a syntax error). Phusion Passenger would normally display an error message in response to this.</p></div>
@@ -2242,9 +2606,9 @@ In an <em>if</em> configuration scope.
2242
2606
  <div class="paragraph"><p>In each place, it may be specified at most once. The default value is <em>off</em>.</p></div>
2243
2607
  </div>
2244
2608
  <div class="sect2">
2245
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_important_deployment_options" data-comment-topic="important-deployment-options-av567">6.6. Important deployment options</h3>
2609
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_important_deployment_options"></span><h3 data-comment-topic="important-deployment-options-av567" data-anchor="_important_deployment_options">6.6. Important deployment options</h3>
2246
2610
  <div class="sect3">
2247
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passenger_enabled_lt_on_off_gt" data-comment-topic="passenger-enabled-on-off--1rpb2t7">6.6.1. passenger_enabled &lt;on|off&gt;</h4>
2611
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_enabled_lt_on_off_gt"></span><h4 data-comment-topic="passenger-enabled-on-off--1rpb2t7" data-anchor="_passenger_enabled_lt_on_off_gt">6.6.1. passenger_enabled &lt;on|off&gt;</h4>
2248
2612
  <div class="paragraph"><p>This option may be specified in the <em>http</em> configuration block, a
2249
2613
  <em>server</em> configuration block, a <em>location</em> configuration block or
2250
2614
  an <em>if</em> configuration scope, to enable or disable Phusion Passenger
@@ -2256,7 +2620,7 @@ and <a href="#deploying_a_rack_app">Deploying a Rack-based Ruby application</a>
2256
2620
  for examples.</p></div>
2257
2621
  </div>
2258
2622
  <div class="sect3">
2259
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="PassengerBaseURI" data-comment-topic="passenger-base-uri-uri--1xtuo50">6.6.2. passenger_base_uri &lt;uri&gt;</h4>
2623
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerBaseURI"></span><h4 data-comment-topic="passenger-base-uri-uri--1xtuo50" data-anchor="PassengerBaseURI">6.6.2. passenger_base_uri &lt;uri&gt;</h4>
2260
2624
  <div class="paragraph"><p>Used to specify that the given URI is an distinct application that should
2261
2625
  be served by Phusion Passenger. This option can be used for both Rails and
2262
2626
  Rack applications. See <a href="#deploying_rails_to_sub_uri">Deploying Rails to a sub URI</a>
@@ -2289,9 +2653,9 @@ In an <em>if</em> configuration scope.
2289
2653
  </div>
2290
2654
  </div>
2291
2655
  <div class="sect2">
2292
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_connection_handling_options" data-comment-topic="connection-handling-options-8jgq90">6.7. Connection handling options</h3>
2656
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_connection_handling_options"></span><h3 data-comment-topic="connection-handling-options-8jgq90" data-anchor="_connection_handling_options">6.7. Connection handling options</h3>
2293
2657
  <div class="sect3">
2294
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passenger_ignore_client_abort_lt_on_off_gt" data-comment-topic="passenger-ignore-client-abort">6.7.1. passenger_ignore_client_abort &lt;on|off&gt;</h4>
2658
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_ignore_client_abort_lt_on_off_gt"></span><h4 data-comment-topic="passenger-ignore-client-abort" data-anchor="_passenger_ignore_client_abort_lt_on_off_gt">6.7.1. passenger_ignore_client_abort &lt;on|off&gt;</h4>
2295
2659
  <div class="paragraph"><p>Normally, when the HTTP client aborts the connection (e.g. when the user clicked on "Stop"
2296
2660
  in the browser), the connection with the application process will be closed too. If the
2297
2661
  application process continues to send its response, then that will result in EPIPE errors
@@ -2327,7 +2691,7 @@ In an <em>if</em> configuration scope.
2327
2691
  <div class="paragraph"><p>In each place, it may be specified at most once. The default value is <em>off</em>.</p></div>
2328
2692
  </div>
2329
2693
  <div class="sect3">
2330
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passenger_set_cgi_param_lt_cgi_environment_name_gt_lt_value_gt" data-comment-topic="passenger-set-cgi-param-cgi-environment-name-value--rx9gc0">6.7.2. passenger_set_cgi_param &lt;CGI environment name&gt; &lt;value&gt;</h4>
2694
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_set_cgi_param_lt_cgi_environment_name_gt_lt_value_gt"></span><h4 data-comment-topic="passenger-set-cgi-param-cgi-environment-name-value--rx9gc0" data-anchor="_passenger_set_cgi_param_lt_cgi_environment_name_gt_lt_value_gt">6.7.2. passenger_set_cgi_param &lt;CGI environment name&gt; &lt;value&gt;</h4>
2331
2695
  <div class="paragraph"><p>Allows one to define additional CGI environment variables to pass to the backend
2332
2696
  application. This is equivalent to ngx_http_fastcgi_module’s <em>fastcgi_param</em>
2333
2697
  directive, and is comparable to ngx_http_proxy_module’s <em>proxy_set_header</em> option.
@@ -2378,7 +2742,7 @@ In an <em>if</em> configuration scope.
2378
2742
  </ul></div>
2379
2743
  </div>
2380
2744
  <div class="sect3">
2381
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passenger_pass_header_lt_header_name_gt" data-comment-topic="passenger-pass-header-header-name--1cg31je">6.7.3. passenger_pass_header &lt;header name&gt;</h4>
2745
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_pass_header_lt_header_name_gt"></span><h4 data-comment-topic="passenger-pass-header-header-name--1cg31je" data-anchor="_passenger_pass_header_lt_header_name_gt">6.7.3. passenger_pass_header &lt;header name&gt;</h4>
2382
2746
  <div class="paragraph"><p>Some headers generated by backend applications are not forwarded to the HTTP client,
2383
2747
  e.g. <em>X-Accel-Redirect</em> which is directly processed by Nginx and then discarded from
2384
2748
  the final response. This directive allows one to force Nginx to pass those headers
@@ -2416,18 +2780,34 @@ In an <em>if</em> configuration scope.
2416
2780
  </ul></div>
2417
2781
  </div>
2418
2782
  <div class="sect3">
2419
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passenger_buffer_response_lt_on_off_gt" data-comment-topic="passenger-buffer-response">6.7.4. passenger_buffer_response &lt;on|off&gt;</h4>
2420
- <div class="paragraph"><p>When turned on, application-generated responses are buffered in memory and also on
2421
- disk if the response is larger than a certain threshold. By buffering responses,
2422
- protection is provided against slow HTTP clients that can not read your response
2423
- immediately.</p></div>
2424
- <div class="paragraph"><p>For example, consider an HTTP client that’s on a dial-up modem link, and your
2425
- application process generates a 2 MB response. If response buffering is turned
2426
- off then your application process will be blocked until the entire 2 MB has been
2783
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_buffer_response_lt_on_off_gt"></span><h4 data-comment-topic="passenger-buffer-response" data-anchor="_passenger_buffer_response_lt_on_off_gt">6.7.4. passenger_buffer_response &lt;on|off&gt;</h4>
2784
+ <div class="paragraph"><p>When turned on, application-generated responses are buffered by Nginx. Buffering will
2785
+ happen in memory and also on disk if the response is larger than a certain threshold.</p></div>
2786
+ <div class="paragraph"><p>Before we proceed with explaining this configuration option, we want to state the following to avoid confusion. If you use Phusion Passenger for Nginx, there are in fact two response buffering systems active:</p></div>
2787
+ <div class="olist arabic"><ol class="arabic">
2788
+ <li>
2789
+ <p>
2790
+ The Nginx response buffering system. <span class="monospaced">passenger_buffer_response</span> turns this on or off.
2791
+ </p>
2792
+ </li>
2793
+ <li>
2794
+ <p>
2795
+ The Phusion Passenger response buffering system, a.k.a. <em>real-time disk-backed response buffering</em>. This buffering system is always on, regardless of the value of <span class="monospaced">passenger_buffer_response</span>.
2796
+ </p>
2797
+ </li>
2798
+ </ol></div>
2799
+ <div class="paragraph"><p>Response buffering is useful because it protects against slow HTTP clients that do not read responses immediately or quickly enough. Buffering prevents such slow clients from blocking web applications that have limited concurrency. Because Phusion Passenger’s response buffering is always turned on, you are always protected. Therefore, <span class="monospaced">passenger_buffer_response</span> is off by default, and you never should have to turn it on.</p></div>
2800
+ <div class="paragraph"><p>If for whatever reason you want to turn Nginx-level response buffering on, you can do so with this option.</p></div>
2801
+ <div class="paragraph"><p>Nginx’s response buffering works differently from Phusion Passenger’s. Nginx’s buffering system buffers the entire response before attempting to send it to the client, while Phusion Passenger’s attempts to send the data to the client immediately. Therefore, if you turn on <span class="monospaced">passenger_buffer_response</span>, you may interfere with applications that want to stream responses to the client.</p></div>
2802
+ <div class="paragraph"><p>How does response buffering - whether it’s done by Nginx or by Phusion Passenger - exactly protect against slow clients?
2803
+ Consider an HTTP client that’s on a dial-up modem link, and your
2804
+ application process generates a 2 MB response. If the response is buffered
2805
+ then your application process will be blocked until the entire 2 MB has been
2427
2806
  sent out to the HTTP client. This disallows your application process to do any useful
2428
- work in the mean time. By enabling response buffering, Phusion Passenger will read
2429
- the application response as quickly as possible and will take care of slow clients.</p></div>
2430
- <div class="paragraph"><p>However, keep in mind that enabling this option will make streaming responses
2807
+ work in the mean time. By buffering responses, Phusion Passenger or Nginx will read
2808
+ the application response as quickly as possible and will take care of forwarding the data
2809
+ to slow clients.</p></div>
2810
+ <div class="paragraph"><p>So keep in mind that enabling <span class="monospaced">passenger_buffering_response</span> will make streaming responses
2431
2811
  impossible. Consider for example this piece of Rails code:</p></div>
2432
2812
  <div class="listingblock">
2433
2813
  <div class="content monospaced">
@@ -2457,11 +2837,11 @@ app = lambda do |env|
2457
2837
  end</pre>
2458
2838
  </div>
2459
2839
  </div>
2460
- <div class="paragraph"><p>When response buffering is turned on, Phusion Passenger will wait until
2840
+ <div class="paragraph"><p>When <span class="monospaced">passenger_buffer_response</span> is turned on, Nginx will wait until
2461
2841
  the application is done sending the entire response before forwarding it
2462
2842
  to the client. The client will not receive anything for 10 seconds,
2463
2843
  after which it receives the entire response at once.
2464
- When response buffering is turned off, it works as expected: the client
2844
+ When <span class="monospaced">passenger_buffer_response</span> is turned off, it works as expected: the client
2465
2845
  receives an "entry X" message every second for 10 seconds.</p></div>
2466
2846
  <div class="paragraph"><p>This option may occur in the following places:</p></div>
2467
2847
  <div class="ulist"><ul>
@@ -2486,30 +2866,30 @@ In an <em>if</em> configuration scope.
2486
2866
  </p>
2487
2867
  </li>
2488
2868
  </ul></div>
2489
- <div class="paragraph"><p>In each place, it may be specified at most once. The default value is <em>on</em>.</p></div>
2869
+ <div class="paragraph"><p>In each place, it may be specified at most once. The default value is <em>off</em>.</p></div>
2490
2870
  </div>
2491
2871
  <div class="sect3">
2492
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passenger_buffer_size" data-comment-topic="passenger-buffer-size-1jfkq87">6.7.5. passenger_buffer_size</h4>
2872
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_buffer_size"></span><h4 data-comment-topic="passenger-buffer-size-1jfkq87" data-anchor="_passenger_buffer_size">6.7.5. passenger_buffer_size</h4>
2493
2873
  </div>
2494
2874
  <div class="sect3">
2495
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passenger_buffers" data-comment-topic="passenger-busy-buffers">6.7.6. passenger_buffers</h4>
2875
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_buffers"></span><h4 data-comment-topic="passenger-busy-buffers" data-anchor="_passenger_buffers">6.7.6. passenger_buffers</h4>
2496
2876
  </div>
2497
2877
  <div class="sect3">
2498
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passenger_busy_buffer_size" data-comment-topic="passenger-busy-buffer-size-124sj61">6.7.7. passenger_busy_buffer_size</h4>
2878
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_busy_buffer_size"></span><h4 data-comment-topic="passenger-busy-buffer-size-124sj61" data-anchor="_passenger_busy_buffer_size">6.7.7. passenger_busy_buffer_size</h4>
2499
2879
  <div class="paragraph"><p>These options have the same effect as proxy_module’s similarly named options.
2500
2880
  They can be used to modify the maximum allowed HTTP header size.</p></div>
2501
2881
  </div>
2502
2882
  </div>
2503
2883
  <div class="sect2">
2504
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_security_options" data-comment-topic="security-options-1bv93g4">6.8. Security options</h3>
2884
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_security_options"></span><h3 data-comment-topic="security-options-1bv93g4" data-anchor="_security_options">6.8. Security options</h3>
2505
2885
  <div class="sect3">
2506
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="PassengerUserSwitching" data-comment-topic="passenger-user-switching-on-off--1p37u3l">6.8.1. passenger_user_switching &lt;on|off&gt;</h4>
2886
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerUserSwitching"></span><h4 data-comment-topic="passenger-user-switching-on-off--1p37u3l" data-anchor="PassengerUserSwitching">6.8.1. passenger_user_switching &lt;on|off&gt;</h4>
2507
2887
  <div class="paragraph"><p>Whether to enable <a href="#user_switching">user switching support</a>.</p></div>
2508
2888
  <div class="paragraph"><p>This option may only occur once, in the <em>http</em> configuration block.
2509
2889
  The default value is <em>on</em>.</p></div>
2510
2890
  </div>
2511
2891
  <div class="sect3">
2512
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passenger_user_lt_username_gt" data-comment-topic="passenger-user-username--b06ur7">6.8.2. passenger_user &lt;username&gt;</h4>
2892
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_user_lt_username_gt"></span><h4 data-comment-topic="passenger-user-username--b06ur7" data-anchor="_passenger_user_lt_username_gt">6.8.2. passenger_user &lt;username&gt;</h4>
2513
2893
  <div class="paragraph"><p>If <a href="#user_switching">user switching support</a> is enabled, then Phusion Passenger will
2514
2894
  by default run the web application as the owner of the file <em>config/environment.rb</em>
2515
2895
  (for Rails apps) or <em>config.ru</em> (for Rack apps). This option allows you to override
@@ -2541,7 +2921,7 @@ In an <em>if</em> configuration scope.
2541
2921
  <div class="paragraph"><p>In each place, it may be specified at most once.</p></div>
2542
2922
  </div>
2543
2923
  <div class="sect3">
2544
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passenger_group_lt_group_name_gt" data-comment-topic="passenger-user-group-name--1fco4j7">6.8.3. passenger_group &lt;group name&gt;</h4>
2924
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_group_lt_group_name_gt"></span><h4 data-comment-topic="passenger-user-group-name--1fco4j7" data-anchor="_passenger_group_lt_group_name_gt">6.8.3. passenger_group &lt;group name&gt;</h4>
2545
2925
  <div class="paragraph"><p>If <a href="#user_switching">user switching support</a> is enabled, then Phusion Passenger will
2546
2926
  by default run the web application as the primary group of the owner of the file
2547
2927
  <em>config/environment.rb</em> (for Rails apps) or <em>config.ru</em> (for Rack apps). This option
@@ -2575,7 +2955,7 @@ In an <em>if</em> configuration scope.
2575
2955
  <div class="paragraph"><p>In each place, it may be specified at most once.</p></div>
2576
2956
  </div>
2577
2957
  <div class="sect3">
2578
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="PassengerDefaultUser" data-comment-topic="passenger-default-user-username--1h6cdmf">6.8.4. passenger_default_user &lt;username&gt;</h4>
2958
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerDefaultUser"></span><h4 data-comment-topic="passenger-default-user-username--1h6cdmf" data-anchor="PassengerDefaultUser">6.8.4. passenger_default_user &lt;username&gt;</h4>
2579
2959
  <div class="paragraph"><p>Phusion Passenger enables <a href="#user_switching">user switching support</a> by default.
2580
2960
  This configuration option allows one to specify the user that applications must
2581
2961
  run as, if user switching fails or is disabled.</p></div>
@@ -2583,7 +2963,7 @@ run as, if user switching fails or is disabled.</p></div>
2583
2963
  The default value is <em>nobody</em>.</p></div>
2584
2964
  </div>
2585
2965
  <div class="sect3">
2586
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="PassengerDefaultGroup" data-comment-topic="passenger-default-group-group-name--1qxn2qa">6.8.5. Passenger_default_group &lt;group name&gt;</h4>
2966
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerDefaultGroup"></span><h4 data-comment-topic="passenger-default-group-group-name--1qxn2qa" data-anchor="PassengerDefaultGroup">6.8.5. Passenger_default_group &lt;group name&gt;</h4>
2587
2967
  <div class="paragraph"><p>Phusion Passenger enables <a href="#user_switching">user switching support</a> by default.
2588
2968
  This configuration option allows one to specify the group that applications must
2589
2969
  run as, if user switching fails or is disabled.</p></div>
@@ -2592,7 +2972,7 @@ The default value is the primary group of the user specifified by
2592
2972
  <a href="#PassengerDefaultUser">passenger_default_user</a>.</p></div>
2593
2973
  </div>
2594
2974
  <div class="sect3">
2595
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passenger_friendly_error_pages_lt_on_off_gt" data-comment-topic="passenger-friendly-error-pages-on-off--1ti1a0e">6.8.6. passenger_friendly_error_pages &lt;on|off&gt;</h4>
2975
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_friendly_error_pages_lt_on_off_gt"></span><h4 data-comment-topic="passenger-friendly-error-pages-on-off--1ti1a0e" data-anchor="_passenger_friendly_error_pages_lt_on_off_gt">6.8.6. passenger_friendly_error_pages &lt;on|off&gt;</h4>
2596
2976
  <div class="paragraph"><p>Phusion Passenger can display friendly error pages whenever an application fails
2597
2977
  to start. This friendly error page presents the startup error message, some
2598
2978
  suggestions for solving the problem, and a backtrace. This feature is very useful
@@ -2627,9 +3007,9 @@ In an <em>if</em> configuration scope.
2627
3007
  </div>
2628
3008
  </div>
2629
3009
  <div class="sect2">
2630
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_resource_control_and_optimization_options" data-comment-topic="resource-control-and-optimization-options-xd7evs">6.9. Resource control and optimization options</h3>
3010
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_resource_control_and_optimization_options"></span><h3 data-comment-topic="resource-control-and-optimization-options-xd7evs" data-anchor="_resource_control_and_optimization_options">6.9. Resource control and optimization options</h3>
2631
3011
  <div class="sect3">
2632
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="PassengerMaxPoolSize" data-comment-topic="passenger-max-pool-size-integer--3jzefs">6.9.1. passenger_max_pool_size &lt;integer&gt;</h4>
3012
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerMaxPoolSize"></span><h4 data-comment-topic="passenger-max-pool-size-integer--3jzefs" data-anchor="PassengerMaxPoolSize">6.9.1. passenger_max_pool_size &lt;integer&gt;</h4>
2633
3013
  <div class="paragraph"><p>The maximum number of <a href="#application_process">application processes</a> that may
2634
3014
  simultanously exist. A larger number results in higher memory usage,
2635
3015
  but improved ability to handle concurrent HTTP clients.</p></div>
@@ -2656,7 +3036,7 @@ by about 33%, and it’s not hard to install.</td>
2656
3036
  </div>
2657
3037
  </div>
2658
3038
  <div class="sect3">
2659
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="PassengerMinInstances" data-comment-topic="passenger-min-instances-integer--uclykt">6.9.2. passenger_min_instances &lt;integer&gt;</h4>
3039
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerMinInstances"></span><h4 data-comment-topic="passenger-min-instances-integer--uclykt" data-anchor="PassengerMinInstances">6.9.2. passenger_min_instances &lt;integer&gt;</h4>
2660
3040
  <div class="paragraph"><p>This specifies the minimum number of application processes that should exist for a
2661
3041
  given application. You should set this option to a
2662
3042
  non-zero value if you want to avoid potentially long startup times after a website
@@ -2731,7 +3111,7 @@ In an <em>if</em> configuration scope.
2731
3111
  <div class="paragraph"><p>In each place, it may be specified at most once. The default value is <em>1</em>.</p></div>
2732
3112
  </div>
2733
3113
  <div class="sect3">
2734
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passenger_max_instances_lt_integer_gt" data-comment-topic="passenger-max-instances">6.9.3. passenger_max_instances &lt;integer&gt;</h4>
3114
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_max_instances_lt_integer_gt"></span><h4 data-comment-topic="passenger-max-instances" data-anchor="_passenger_max_instances_lt_integer_gt">6.9.3. passenger_max_instances &lt;integer&gt;</h4>
2735
3115
  <div class="paragraph"><p><strong>This feature is only available in <a href="https://www.phusionpassenger.com/enterprise">Phusion Passenger Enterprise</a>. It was introduced in version 3.0.0. <a href="https://www.phusionpassenger.com/download">Buy Phusion Passenger Enterprise here.</a></strong></p></div>
2736
3116
  <div class="paragraph"><p>The maximum number of application processes that may simultaneously exist
2737
3117
  for an application. This helps to make sure that a single application
@@ -2782,7 +3162,7 @@ on the other hand will be free to spawn up to 10 processes if it gets a lot of t
2782
3162
  </div>
2783
3163
  </div>
2784
3164
  <div class="sect3">
2785
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passenger_max_instances_per_app_lt_integer_gt" data-comment-topic="passenger-max-instances-per-app-integer--1xhbbne">6.9.4. passenger_max_instances_per_app &lt;integer&gt;</h4>
3165
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_max_instances_per_app_lt_integer_gt"></span><h4 data-comment-topic="passenger-max-instances-per-app-integer--1xhbbne" data-anchor="_passenger_max_instances_per_app_lt_integer_gt">6.9.4. passenger_max_instances_per_app &lt;integer&gt;</h4>
2786
3166
  <div class="paragraph"><p>The maximum number of application processes that may simultaneously exist
2787
3167
  for a single application. This helps to make sure that a single application
2788
3168
  will not occupy all available slots in the application pool.</p></div>
@@ -2794,7 +3174,7 @@ will be enforced.</p></div>
2794
3174
  The default value is <em>0</em>.</p></div>
2795
3175
  </div>
2796
3176
  <div class="sect3">
2797
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="PassengerPoolIdleTime" data-comment-topic="passenger-pool-idle-time-integer--xcw65o">6.9.5. passenger_pool_idle_time &lt;integer&gt;</h4>
3177
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerPoolIdleTime"></span><h4 data-comment-topic="passenger-pool-idle-time-integer--xcw65o" data-anchor="PassengerPoolIdleTime">6.9.5. passenger_pool_idle_time &lt;integer&gt;</h4>
2798
3178
  <div class="paragraph"><p>The maximum number of seconds that an application process may be idle. That is,
2799
3179
  if an application process hasn’t received any traffic after the given number of
2800
3180
  seconds, then it will be shutdown in order to conserve memory.</p></div>
@@ -2816,7 +3196,7 @@ applications, each which must be available at all times.</p></div>
2816
3196
  The default value is <em>300</em>.</p></div>
2817
3197
  </div>
2818
3198
  <div class="sect3">
2819
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passenger_max_preloader_idle_time_lt_integer_gt" data-comment-topic="rails-app-spawner-idle-time-integer--1xjqe4b">6.9.6. passenger_max_preloader_idle_time &lt;integer&gt;</h4>
3199
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_max_preloader_idle_time_lt_integer_gt"></span><h4 data-comment-topic="rails-app-spawner-idle-time-integer--1xjqe4b" data-anchor="_passenger_max_preloader_idle_time_lt_integer_gt">6.9.6. passenger_max_preloader_idle_time &lt;integer&gt;</h4>
2820
3200
  <div class="paragraph"><p>The ApplicationSpawner server (explained in <a href="#spawning_methods_explained">Spawning methods explained</a>) has an idle timeout, just like the backend processes spawned by
2821
3201
  Phusion Passenger do. That is, it will automatically shutdown if it hasn’t done
2822
3202
  anything for a given period.</p></div>
@@ -2855,7 +3235,7 @@ In an <em>if</em> configuration scope.
2855
3235
  <div class="paragraph"><p>In each place, it may be specified at most once. The default value is <em>300</em> (5 minutes).</p></div>
2856
3236
  </div>
2857
3237
  <div class="sect3">
2858
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="PassengerConcurrencyModel" data-comment-topic="passenger-max-requests">6.9.7. passenger_concurrency_model &lt;process|thread&gt;</h4>
3238
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerConcurrencyModel"></span><h4 data-comment-topic="passenger-concurrency-model-process-thread--brcvkk" data-anchor="PassengerConcurrencyModel">6.9.7. passenger_concurrency_model &lt;process|thread&gt;</h4>
2859
3239
  <div class="paragraph"><p><strong>This feature is only available in <a href="https://www.phusionpassenger.com/enterprise">Phusion Passenger Enterprise</a>. It was introduced in version 4.0.0. <a href="https://www.phusionpassenger.com/download">Buy Phusion Passenger Enterprise here.</a></strong></p></div>
2860
3240
  <div class="paragraph"><p>Specifies the I/O concurrency model that should be used for application processes. Phusion Passenger supports two concurrency models:</p></div>
2861
3241
  <div class="ulist"><ul>
@@ -2896,7 +3276,7 @@ In an <em>if</em> configuration scope.
2896
3276
  <div class="paragraph"><p>In each place, it may be specified at most once. The default value is <em>process</em>.</p></div>
2897
3277
  </div>
2898
3278
  <div class="sect3">
2899
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="PassengerThreadCount" data-comment-topic="passenger-max-request-time-seconds--1qod9kg">6.9.8. passenger_thread_count &lt;number&gt;</h4>
3279
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerThreadCount"></span><h4 data-comment-topic="passenger-thread-count-number--1kd6ffy" data-anchor="PassengerThreadCount">6.9.8. passenger_thread_count &lt;number&gt;</h4>
2900
3280
  <div class="paragraph"><p><strong>This feature is only available in <a href="https://www.phusionpassenger.com/enterprise">Phusion Passenger Enterprise</a>. It was introduced in version 4.0.0. <a href="https://www.phusionpassenger.com/download">Buy Phusion Passenger Enterprise here.</a></strong></p></div>
2901
3281
  <div class="paragraph"><p>Specifies the number of threads that Phusion Passenger should spawn per application process. This option only has effect if <a href="#PassengerConcurrencyModel">passenger_concurrency_model</a> is <em>thread</em>.</p></div>
2902
3282
  <div class="paragraph"><p>This option may occur in the following places:</p></div>
@@ -2925,7 +3305,7 @@ In an <em>if</em> configuration scope.
2925
3305
  <div class="paragraph"><p>In each place, it may be specified at most once. The default value is <em>1</em>.</p></div>
2926
3306
  </div>
2927
3307
  <div class="sect3">
2928
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="PassengerMaxRequests" data-comment-topic="passenger-max-requests-integer--sgzint">6.9.9. passenger_max_requests &lt;integer&gt;</h4>
3308
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerMaxRequests"></span><h4 data-comment-topic="passenger-max-requests-integer--sgzint" data-anchor="PassengerMaxRequests">6.9.9. passenger_max_requests &lt;integer&gt;</h4>
2929
3309
  <div class="paragraph"><p>The maximum number of requests an application process will process. After
2930
3310
  serving that many requests, the application process will be shut down and
2931
3311
  Phusion Passenger will restart it. A value of 0 means that there is no maximum:
@@ -2973,7 +3353,7 @@ measure to avoid memory leaks.</p></div>
2973
3353
  </div>
2974
3354
  </div>
2975
3355
  <div class="sect3">
2976
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="PassengerMaxRequestTime" data-comment-topic="passenger-pre-start-url--1f2phk7">6.9.10. passenger_max_request_time &lt;seconds&gt;</h4>
3356
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerMaxRequestTime"></span><h4 data-comment-topic="passenger-max-request-time-seconds--1htog2g" data-anchor="PassengerMaxRequestTime">6.9.10. passenger_max_request_time &lt;seconds&gt;</h4>
2977
3357
  <div class="paragraph"><p><strong>This feature is only available in <a href="https://www.phusionpassenger.com/enterprise">Phusion Passenger Enterprise</a>. It was introduced in version 3.0.0. <a href="https://www.phusionpassenger.com/download">Buy Phusion Passenger Enterprise here.</a></strong></p></div>
2978
3358
  <div class="paragraph"><p>The maximum amount of time, in seconds, that an application process may take
2979
3359
  to process a request. If the request takes longer than this amount of time,
@@ -3044,7 +3424,7 @@ measure to avoid freezing applications.</p></div>
3044
3424
  </div>
3045
3425
  </div>
3046
3426
  <div class="sect3">
3047
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="PassengerMemoryLimit" data-comment-topic="passenger-memory-limit-integer--1ry7dwx">6.9.11. passenger_memory_limit &lt;integer&gt;</h4>
3427
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerMemoryLimit"></span><h4 data-comment-topic="passenger-memory-limit-integer--1ry7dwx" data-anchor="PassengerMemoryLimit">6.9.11. passenger_memory_limit &lt;integer&gt;</h4>
3048
3428
  <div class="paragraph"><p><strong>This feature is only available in <a href="https://www.phusionpassenger.com/enterprise">Phusion Passenger Enterprise</a>. It was introduced in version 3.0.0. <a href="https://www.phusionpassenger.com/download">Buy Phusion Passenger Enterprise here.</a></strong></p></div>
3049
3429
  <div class="paragraph"><p>The maximum amount of memory that an application process may use, in megabytes.
3050
3430
  Once an application process has surpassed its memory limit, it will process
@@ -3130,7 +3510,7 @@ measure to avoid memory leaks.</p></div>
3130
3510
  </div>
3131
3511
  </div>
3132
3512
  <div class="sect3">
3133
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="PassengerPreStart" data-comment-topic="passenger-pre-start-url--npldeb">6.9.12. passenger_pre_start &lt;url&gt;</h4>
3513
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerPreStart"></span><h4 data-comment-topic="passenger-pre-start-url--npldeb" data-anchor="PassengerPreStart">6.9.12. passenger_pre_start &lt;url&gt;</h4>
3134
3514
  <div class="paragraph"><p>By default, Phusion Passenger does not start any application processes until said
3135
3515
  web application is first accessed. The result is that the first visitor of said
3136
3516
  web application might experience a small delay as Phusion Passenger is starting
@@ -3345,9 +3725,9 @@ the request ending up at a different web server in the cluster.</p></div>
3345
3725
  </div>
3346
3726
  </div>
3347
3727
  <div class="sect2">
3348
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_logging_and_debugging_options" data-comment-topic="logging-and-debugging-options-14e91ni">6.10. Logging and debugging options</h3>
3728
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_logging_and_debugging_options"></span><h3 data-comment-topic="logging-and-debugging-options-14e91ni" data-anchor="_logging_and_debugging_options">6.10. Logging and debugging options</h3>
3349
3729
  <div class="sect3">
3350
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passenger_log_level_lt_integer_gt" data-comment-topic="passenger-log-level-integer--17snhon">6.10.1. passenger_log_level &lt;integer&gt;</h4>
3730
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_log_level_lt_integer_gt"></span><h4 data-comment-topic="passenger-log-level-integer--17snhon" data-anchor="_passenger_log_level_lt_integer_gt">6.10.1. passenger_log_level &lt;integer&gt;</h4>
3351
3731
  <div class="paragraph"><p>This option allows one to specify how much information Phusion Passenger should
3352
3732
  write to the Nginx error log file. A higher log level value means that more
3353
3733
  information will be logged.</p></div>
@@ -3380,14 +3760,14 @@ information will be logged.</p></div>
3380
3760
  The default is <em>0</em>.</p></div>
3381
3761
  </div>
3382
3762
  <div class="sect3">
3383
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passenger_debug_log_file_lt_filename_gt" data-comment-topic="passenger-debug-log-file-filename--21ubaj">6.10.2. passenger_debug_log_file &lt;filename&gt;</h4>
3763
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_debug_log_file_lt_filename_gt"></span><h4 data-comment-topic="passenger-debug-log-file-filename--21ubaj" data-anchor="_passenger_debug_log_file_lt_filename_gt">6.10.2. passenger_debug_log_file &lt;filename&gt;</h4>
3384
3764
  <div class="paragraph"><p>By default Phusion Passenger debugging and error messages are written to the global
3385
3765
  web server error log. This option allows one to specify the file that debugging and
3386
3766
  error messages should be written to instead.</p></div>
3387
3767
  <div class="paragraph"><p>This option may only occur once, in the <em>http</em> configuration block.</p></div>
3388
3768
  </div>
3389
3769
  <div class="sect3">
3390
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passenger_debugger_lt_on_off_gt" data-comment-topic="passenger-debugger-on-off--1wkuq85">6.10.3. passenger_debugger &lt;on|off&gt;</h4>
3770
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_debugger_lt_on_off_gt"></span><h4 data-comment-topic="passenger-debugger-on-off--1wkuq85" data-anchor="_passenger_debugger_lt_on_off_gt">6.10.3. passenger_debugger &lt;on|off&gt;</h4>
3391
3771
  <div class="paragraph"><p><strong>This feature is only available in <a href="https://www.phusionpassenger.com/enterprise">Phusion Passenger Enterprise</a>. It was introduced in version 3.0.0. <a href="https://www.phusionpassenger.com/download">Buy Phusion Passenger Enterprise here.</a></strong></p></div>
3392
3772
  <div class="paragraph"><p>Turns support for application debugging on or off. In case of Ruby applications,
3393
3773
  turning this option on will cause them to load the <span class="monospaced">ruby-debug</span> gem (when on Ruby 1.8)
@@ -3427,9 +3807,9 @@ In an <em>if</em> configuration scope.
3427
3807
  </div>
3428
3808
  </div>
3429
3809
  <div class="sect2">
3430
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_ruby_on_rails_specific_options" data-comment-topic="ruby-on-rails-specific-options-12vfokt">6.11. Ruby on Rails-specific options</h3>
3810
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_ruby_on_rails_specific_options"></span><h3 data-comment-topic="ruby-on-rails-specific-options-12vfokt" data-anchor="_ruby_on_rails_specific_options">6.11. Ruby on Rails-specific options</h3>
3431
3811
  <div class="sect3">
3432
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="RailsEnv" data-comment-topic="rails-env-string--jlh7v9">6.11.1. rails_env &lt;string&gt;</h4>
3812
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="RailsEnv"></span><h4 data-comment-topic="rails-env-string--jlh7v9" data-anchor="RailsEnv">6.11.1. rails_env &lt;string&gt;</h4>
3433
3813
  <div class="paragraph"><p>This option allows one to specify the default <span class="monospaced">RAILS_ENV</span> value.</p></div>
3434
3814
  <div class="paragraph"><p>This option may occur in the following places:</p></div>
3435
3815
  <div class="ulist"><ul>
@@ -3458,9 +3838,9 @@ In an <em>if</em> configuration scope.
3458
3838
  </div>
3459
3839
  </div>
3460
3840
  <div class="sect2">
3461
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_rack_and_rails_gt_3_specific_options" data-comment-topic="rack-specific-options-13yvdxs">6.12. Rack and Rails &gt;= 3 specific options</h3>
3841
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_rack_and_rails_gt_3_specific_options"></span><h3 data-comment-topic="rack-specific-options-13yvdxs" data-anchor="_rack_and_rails_gt_3_specific_options">6.12. Rack and Rails &gt;= 3 specific options</h3>
3462
3842
  <div class="sect3">
3463
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="RackEnv" data-comment-topic="rack-env-string--tqmrt0">6.12.1. rack_env &lt;string&gt;</h4>
3843
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="RackEnv"></span><h4 data-comment-topic="rack-env-string--tqmrt0" data-anchor="RackEnv">6.12.1. rack_env &lt;string&gt;</h4>
3464
3844
  <div class="paragraph"><p>This option allows one to specify the default <span class="monospaced">RACK_ENV</span> value.</p></div>
3465
3845
  <div class="paragraph"><p>This option may occur in the following places:</p></div>
3466
3846
  <div class="ulist"><ul>
@@ -3489,23 +3869,23 @@ In an <em>if</em> configuration scope.
3489
3869
  </div>
3490
3870
  </div>
3491
3871
  <div class="sect2">
3492
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_deprecated_options" data-comment-topic="deprecated-options-1dtzo0g">6.13. Deprecated options</h3>
3872
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_deprecated_options"></span><h3 data-comment-topic="deprecated-options-1dtzo0g" data-anchor="_deprecated_options">6.13. Deprecated options</h3>
3493
3873
  <div class="paragraph"><p>The following options have been deprecated, but are still supported for backwards
3494
3874
  compatibility reasons.</p></div>
3495
3875
  <div class="sect3">
3496
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_rails_spawn_method" data-comment-topic="rails-spawn-method-17vdnpt">6.13.1. rails_spawn_method</h4>
3876
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_rails_spawn_method"></span><h4 data-comment-topic="rails-spawn-method-17vdnpt" data-anchor="_rails_spawn_method">6.13.1. rails_spawn_method</h4>
3497
3877
  <div class="paragraph"><p>Deprecated in favor of <a href="#PassengerSpawnMethod">passenger_spawn_method</a>.</p></div>
3498
3878
  </div>
3499
3879
  </div>
3500
3880
  </div>
3501
3881
  </div>
3502
3882
  <div class="sect1">
3503
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h2 id="_analysis_and_system_maintenance" data-comment-topic="analysis-and-system-maintenance-1nnlnj8">7. Analysis and system maintenance</h2>
3883
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_analysis_and_system_maintenance"></span><h2 data-comment-topic="analysis-and-system-maintenance-1nnlnj8" data-anchor="_analysis_and_system_maintenance">7. Analysis and system maintenance</h2>
3504
3884
  <div class="sectionbody">
3505
3885
  <div class="paragraph"><p>Phusion Passenger provides a set of tools, which are useful for system analysis,
3506
3886
  maintenance and troubleshooting.</p></div>
3507
3887
  <div class="sect2">
3508
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_inspecting_memory_usage" data-comment-topic="inspecting-memory-usage-1k6y8v0">7.1. Inspecting memory usage</h3>
3888
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_inspecting_memory_usage"></span><h3 data-comment-topic="inspecting-memory-usage-1k6y8v0" data-anchor="_inspecting_memory_usage">7.1. Inspecting memory usage</h3>
3509
3889
  <div class="paragraph"><p>Process inspection tools such as <span class="monospaced">ps</span> and <span class="monospaced">top</span> are useful, but they
3510
3890
  <a href="http://groups.google.com/group/phusion-passenger/msg/1fd1c233456d3180">rarely show the correct memory usage</a>.
3511
3891
  The real memory usage is usually lower than what <span class="monospaced">ps</span> and <span class="monospaced">top</span> report.</p></div>
@@ -3558,7 +3938,7 @@ the Resident Set Size is reported instead.</td>
3558
3938
  </div>
3559
3939
  </div>
3560
3940
  <div class="sect2">
3561
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_inspecting_phusion_passenger_8217_s_internal_status" data-comment-topic="inspecting-phusion-passenger-s-internal-status-v36wbc">7.2. Inspecting Phusion Passenger’s internal status</h3>
3941
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_inspecting_phusion_passenger_8217_s_internal_status"></span><h3 data-comment-topic="inspecting-phusion-passenger-s-internal-status-v36wbc" data-anchor="_inspecting_phusion_passenger_8217_s_internal_status">7.2. Inspecting Phusion Passenger’s internal status</h3>
3562
3942
  <div class="paragraph"><p>One can inspect Phusion Passenger’s internal status with the tool <span class="monospaced">passenger-status</span>.
3563
3943
  This tool must typically be run as root. For example:</p></div>
3564
3944
  <div class="listingblock">
@@ -3690,7 +4070,7 @@ Your application is frozen, i.e. has stopped responding. See
3690
4070
  </ol></div>
3691
4071
  </div>
3692
4072
  <div class="sect2">
3693
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="debugging_frozen" data-comment-topic="debugging-frozen-applications-qoctl8">7.3. Debugging frozen applications</h3>
4073
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="debugging_frozen"></span><h3 data-comment-topic="debugging-frozen-applications-qoctl8" data-anchor="debugging_frozen">7.3. Debugging frozen applications</h3>
3694
4074
  <div class="paragraph"><p>If one of your application instances is frozen (stopped responding), then you
3695
4075
  can figure out where it is frozen by killing it with <em>SIGABRT</em>. This will cause the
3696
4076
  application to raise an exception, with a backtrace.</p></div>
@@ -3712,7 +4092,7 @@ will restart killed application instances, as if nothing bad happened.</td>
3712
4092
  </div>
3713
4093
  </div>
3714
4094
  <div class="sect2">
3715
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_accessing_individual_application_processes" data-comment-topic="accessing-individual-application-processes-1qe4fqk">7.4. Accessing individual application processes</h3>
4095
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_accessing_individual_application_processes"></span><h3 data-comment-topic="accessing-individual-application-processes-1qe4fqk" data-anchor="_accessing_individual_application_processes">7.4. Accessing individual application processes</h3>
3716
4096
  <div class="paragraph"><p>When a request is sent to the web server, Phusion Passenger will automatically forward
3717
4097
  the request to the most suitable application process, but sometimes it is desirable to
3718
4098
  be able to directly access the individual application processes. Use cases include, but
@@ -3778,16 +4158,17 @@ through the <em>X-Passenger-Connect-Password</em> HTTP header, like this:</p></d
3778
4158
  </div>
3779
4159
  </div>
3780
4160
  <div class="sect2">
3781
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_attaching_an_irb_console_to_an_application_process" data-comment-topic="attaching-an-irb-console-to-an-application-process-d36enw">7.5. Attaching an IRB console to an application process</h3>
4161
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_attaching_an_irb_console_to_an_application_process"></span><h3 data-comment-topic="attaching-an-irb-console-to-an-application-process-d36enw" data-anchor="_attaching_an_irb_console_to_an_application_process">7.5. Attaching an IRB console to an application process</h3>
4162
+ <div class="paragraph"><p><strong>This feature is only available in <a href="https://www.phusionpassenger.com/enterprise">Phusion Passenger Enterprise</a>. It was introduced in version 3.0.0. <a href="https://www.phusionpassenger.com/download">Buy Phusion Passenger Enterprise here.</a></strong></p></div>
3782
4163
  <div class="paragraph"><p>You can attach an IRB console to any application process and inspect its state by executing arbitrary Ruby code. Do this by invoking <span class="monospaced">passenger-irb &lt;PID&gt;</span> where <em>&lt;PID&gt;</em> is the PID of the application process you wish to inspect. Note that the IRB console is currently only available for Ruby apps, not for apps in any other languages.</p></div>
3783
4164
  </div>
3784
4165
  </div>
3785
4166
  </div>
3786
4167
  <div class="sect1">
3787
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h2 id="_tips" data-comment-topic="tips-n4c22d">8. Tips</h2>
4168
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_tips"></span><h2 data-comment-topic="tips-n4c22d" data-anchor="_tips">8. Tips</h2>
3788
4169
  <div class="sectionbody">
3789
4170
  <div class="sect2">
3790
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="user_switching" data-comment-topic="user-switching-security--zmsy9o">8.1. User switching (security)</h3>
4171
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="user_switching"></span><h3 data-comment-topic="user-switching-security--zmsy9o" data-anchor="user_switching">8.1. User switching (security)</h3>
3791
4172
  <div class="paragraph"><p>There is a problem that plagues most PHP web hosts, namely the fact that all PHP
3792
4173
  applications are run in the same user context as the web server. So for
3793
4174
  example, Joe’s PHP application will be able to read Jane’s PHP application’s
@@ -3827,14 +4208,14 @@ Under no circumstances will applications be run as <em>root</em>. If
3827
4208
  option.</p></div>
3828
4209
  </div>
3829
4210
  <div class="sect2">
3830
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="reducing_memory_usage" data-comment-topic="reducing-memory-consumption-of-ruby-on-rails-applications-by-33--1o3z66q">8.2. Reducing memory consumption of Ruby on Rails applications by 33%</h3>
4211
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="reducing_memory_usage"></span><h3 data-comment-topic="reducing-memory-consumption-of-ruby-on-rails-applications-by-33--1o3z66q" data-anchor="reducing_memory_usage">8.2. Reducing memory consumption of Ruby on Rails applications by 33%</h3>
3831
4212
  <div class="paragraph"><p>Is it possible to reduce memory consumption of your Rails applications by 33% on average,
3832
4213
  by using <a href="http://www.rubyenterpriseedition.com/">Ruby Enterprise Edition</a>.
3833
4214
  Please visit the website for details.</p></div>
3834
4215
  <div class="paragraph"><p>Note that this feature does not apply to Rack applications.</p></div>
3835
4216
  </div>
3836
4217
  <div class="sect2">
3837
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="capistrano" data-comment-topic="capistrano-recipe-pfn4qu">8.3. Capistrano recipe</h3>
4218
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="capistrano"></span><h3 data-comment-topic="capistrano-recipe-pfn4qu" data-anchor="capistrano">8.3. Capistrano recipe</h3>
3838
4219
  <div class="paragraph"><p>Phusion Passenger can be combined with <a href="http://capify.org/">Capistrano</a>.
3839
4220
  The following Capistrano recipe demonstrates Phusion Passenger support.
3840
4221
  It assumes that you’re using Git as version control system.</p></div>
@@ -3869,7 +4250,7 @@ end</pre>
3869
4250
  </div>
3870
4251
  </div>
3871
4252
  <div class="sect2">
3872
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="bundler_support" data-comment-topic="bundler-support-19v1h43">8.4. Bundler support</h3>
4253
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="bundler_support"></span><h3 data-comment-topic="bundler-support-19v1h43" data-anchor="bundler_support">8.4. Bundler support</h3>
3873
4254
  <div class="paragraph"><p>Phusion Passenger has automatic support for <a href="http://gembundler.com/git.html">Bundler</a>.
3874
4255
  It works as follows:</p></div>
3875
4256
  <div class="ulist"><ul>
@@ -3902,7 +4283,7 @@ the application startup file. In this file you can do whatever you need to setup
3902
4283
  or a similar system.</p></div>
3903
4284
  </div>
3904
4285
  <div class="sect2">
3905
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="moving_phusion_passenger" data-comment-topic="moving-phusion-passenger-to-a-different-directory-1hel5cp">8.5. Moving Phusion Passenger to a different directory</h3>
4286
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="moving_phusion_passenger"></span><h3 data-comment-topic="moving-phusion-passenger-to-a-different-directory-1hel5cp" data-anchor="moving_phusion_passenger">8.5. Moving Phusion Passenger to a different directory</h3>
3906
4287
  <div class="paragraph"><p>It is possible to relocate the Phusion Passenger files to a different directory. It
3907
4288
  involves two steps:</p></div>
3908
4289
  <div class="olist arabic"><ol class="arabic">
@@ -3943,7 +4324,7 @@ Edit your Apache configuration file, and set:
3943
4324
  </ol></div>
3944
4325
  </div>
3945
4326
  <div class="sect2">
3946
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_installing_multiple_ruby_on_rails_versions" data-comment-topic="installing-multiple-ruby-on-rails-versions-1bp1fff">8.6. Installing multiple Ruby on Rails versions</h3>
4327
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_installing_multiple_ruby_on_rails_versions"></span><h3 data-comment-topic="installing-multiple-ruby-on-rails-versions-1bp1fff" data-anchor="_installing_multiple_ruby_on_rails_versions">8.6. Installing multiple Ruby on Rails versions</h3>
3947
4328
  <div class="paragraph"><p>Each Ruby on Rails applications that are going to be deployed may require a
3948
4329
  specific Ruby on Rails version. You can install a specific version with
3949
4330
  this command:</p></div>
@@ -3957,7 +4338,7 @@ this command:</p></div>
3957
4338
  other. Phusion Passenger will automatically make use of the correct version.</p></div>
3958
4339
  </div>
3959
4340
  <div class="sect2">
3960
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_making_the_application_restart_after_each_request" data-comment-topic="making-the-application-restart-after-each-request-vimy48">8.7. Making the application restart after each request</h3>
4341
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_making_the_application_restart_after_each_request"></span><h3 data-comment-topic="making-the-application-restart-after-each-request-vimy48" data-anchor="_making_the_application_restart_after_each_request">8.7. Making the application restart after each request</h3>
3961
4342
  <div class="paragraph"><p>In some situations it might be desirable to restart the web application after
3962
4343
  each request, for example when developing a non-Rails application that doesn’t
3963
4344
  support code reloading, or when developing a web framework.</p></div>
@@ -3980,7 +4361,7 @@ does not support code reloading.</td>
3980
4361
  </div>
3981
4362
  </div>
3982
4363
  <div class="sect2">
3983
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="sub_uri_deployment_uri_fix" data-comment-topic="how-to-fix-broken-images-css-javascript-uris-in-sub-uri-deployments-11mzwt6">8.8. How to fix broken images/CSS/JavaScript URIs in sub-URI deployments</h3>
4364
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="sub_uri_deployment_uri_fix"></span><h3 data-comment-topic="how-to-fix-broken-images-css-javascript-uris-in-sub-uri-deployments-11mzwt6" data-anchor="sub_uri_deployment_uri_fix">8.8. How to fix broken images/CSS/JavaScript URIs in sub-URI deployments</h3>
3984
4365
  <div class="paragraph"><p>Some people experience broken images and other broken static assets when they
3985
4366
  deploy their application to a sub-URI (i.e. <em>http://mysite.com/railsapp/</em>).
3986
4367
  The reason for this usually is that you used a
@@ -4017,16 +4398,91 @@ append a timestamp to the URI to better facilitate HTTP caching. For more inform
4017
4398
  please refer to
4018
4399
  <a href="http://api.rubyonrails.org/classes/ActionView/Helpers/AssetTagHelper.html">the Rails API docs</a>.</p></div>
4019
4400
  </div>
4401
+ <div class="sect2">
4402
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_out_of_band_garbage_work_and_out_of_band_garbage_collection"></span><h3 data-comment-topic="out-of-band-garbage-work-and-out-of-band-garbage-collection-v89lu2" data-anchor="_out_of_band_garbage_work_and_out_of_band_garbage_collection">8.9. Out-of-Band Garbage Work and Out-of-Band Garbage Collection</h3>
4403
+ <div class="paragraph"><p><strong>Available since Phusion Passenger 4.0.0.</strong></p></div>
4404
+ <div class="paragraph"><p><strong>At this time, this feature is only available on Ruby.</strong></p></div>
4405
+ <div class="paragraph"><p>The Out-of-Band Work feature allows you to run arbitrary long-running tasks outside normal request cycles. This works by letting current requests to the process finish, then telling the process to perform the out-of-band work, then resuming passing requests to the process after said work is finished.</p></div>
4406
+ <div class="paragraph"><p>A specific (and perhaps primary) use case of of Out-of-Band Work is <strong>Out-of-Band Garbage Collection</strong>. The garbage collector is run outside normal request cycles so that garbage collection runs inside normal request cycles can finish a lot faster. This can potentially save tens to hundreds of milliseconds of latency in requests.</p></div>
4407
+ <div class="paragraph"><p>Because Out-of-Band Work is implemented at the Phusion Passenger inter-process request routing level, and not by, say, spawning a thread inside the application process, Out-of-Band Work has the following useful properties:</p></div>
4408
+ <div class="ulist"><ul>
4409
+ <li>
4410
+ <p>
4411
+ It works well even with tasks that can pause all threads. The MRI Ruby garbage collector is a stop-the-world mark-and-sweep garbage collector.
4412
+ </p>
4413
+ </li>
4414
+ <li>
4415
+ <p>
4416
+ Phusion Passenger can spawn more processes as necessary, in order to prevent situations in which all application processes are busy performing out-of-band work. Phusion Passenger guarantees that there’s at least one process that’s ready to process requests.
4417
+ </p>
4418
+ </li>
4419
+ </ul></div>
4420
+ <div class="paragraph"><p>Applications can use Out-of-Band Work as follows:</p></div>
4421
+ <div class="olist arabic"><ol class="arabic">
4422
+ <li>
4423
+ <p>
4424
+ Request out-of-band work by outputting the <span class="monospaced">X-Passenger-Request-OOB-Work</span> header during a request. It does not matter what the value is. At this time, it is not possible to request out-of-band work from outside requests.
4425
+ </p>
4426
+ </li>
4427
+ <li>
4428
+ <p>
4429
+ You can actually perform out-of-band work when you receive a <span class="monospaced">:oob_work</span> Phusion Passenger event.
4430
+ </p>
4431
+ </li>
4432
+ </ol></div>
4433
+ <div class="paragraph"><p>Note that even though you can request out-of-band work, there’s no guarantee that Phusion Passenger will send an <span class="monospaced">oob_work</span> event in a timely manner, if at all. It is also possible that Phusion Passenger sends an <span class="monospaced">oob_work</span> event without you ever having requested one. This latter could for example happen if the OOB work is administrator-initiated. Do not make any assumptions in your code.</p></div>
4434
+ <div class="paragraph"><p>Here’s an example which implements out-of-band garbage collection using the Out-of-Band framework:</p></div>
4435
+ <div class="listingblock">
4436
+ <div class="content">
4437
+ <!-- Generator: GNU source-highlight 2.11.1
4438
+ by Lorenzo Bettini
4439
+ http://www.lorenzobettini.it
4440
+ http://www.gnu.org/software/src-highlite -->
4441
+ <pre><tt><span style="font-style: italic"><span style="color: #9A1900"># Somewhere in a controller method:</span></span>
4442
+ <span style="font-style: italic"><span style="color: #9A1900"># Tell Phusion Passenger we want to perform OOB work.</span></span>
4443
+ response<span style="color: #990000">.</span>headers<span style="color: #990000">[</span><span style="color: #FF0000">"X-Passenger-Request-OOB-Work"</span><span style="color: #990000">]</span> <span style="color: #990000">=</span> <span style="color: #FF0000">"true"</span>
4444
+
4445
+ <span style="font-style: italic"><span style="color: #9A1900"># Somewhere during application initialization:</span></span>
4446
+ PhusionPassenger<span style="color: #990000">.</span>on_event<span style="color: #990000">(:</span>oob_work<span style="color: #990000">)</span> <span style="font-weight: bold"><span style="color: #0000FF">do</span></span>
4447
+ <span style="font-style: italic"><span style="color: #9A1900"># Phusion Passenger has told us that we're ready to perform OOB work.</span></span>
4448
+ t0 <span style="color: #990000">=</span> Time<span style="color: #990000">.</span>now
4449
+ GC<span style="color: #990000">.</span>start
4450
+ Rails<span style="color: #990000">.</span>logger<span style="color: #990000">.</span>info <span style="color: #FF0000">"Out-Of-Bound GC finished in #{Time.now - t0} sec"</span>
4451
+ <span style="font-weight: bold"><span style="color: #0000FF">end</span></span></tt></pre>
4452
+ </div>
4453
+ </div>
4454
+ <div class="paragraph"><p>For your convenience, Phusion Passenger provides a Rack middleware for out-of-band garbage collection. Add this to your <span class="monospaced">config.ru</span>:</p></div>
4455
+ <div class="listingblock">
4456
+ <div class="content">
4457
+ <!-- Generator: GNU source-highlight 2.11.1
4458
+ by Lorenzo Bettini
4459
+ http://www.lorenzobettini.it
4460
+ http://www.gnu.org/software/src-highlite -->
4461
+ <pre><tt><span style="font-weight: bold"><span style="color: #000080">require</span></span> <span style="color: #FF0000">'phusion_passenger/rack/out_of_band_gc'</span>
4462
+
4463
+ <span style="font-style: italic"><span style="color: #9A1900"># Trigger out-of-band GC every 5 requests.</span></span>
4464
+ use PhusionPassenger<span style="color: #990000">::</span>Rack<span style="color: #990000">::</span>OutOfBandGc<span style="color: #990000">,</span> <span style="color: #993399">5</span></tt></pre>
4465
+ </div>
4466
+ </div>
4467
+ <div class="paragraph"><p>References:</p></div>
4468
+ <div class="ulist"><ul>
4469
+ <li>
4470
+ <p>
4471
+ <a href="http://blog.phusion.nl/2013/01/22/phusion-passenger-4-technology-preview-out-of-band-work/">The Phusion Blog article which first introduced this feature.</a>
4472
+ </p>
4473
+ </li>
4474
+ </ul></div>
4475
+ </div>
4020
4476
  </div>
4021
4477
  </div>
4022
4478
  <div class="sect1">
4023
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h2 id="_under_the_hood" data-comment-topic="under-the-hood-8uney">9. Under the hood</h2>
4479
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_under_the_hood"></span><h2 data-comment-topic="under-the-hood-8uney" data-anchor="_under_the_hood">9. Under the hood</h2>
4024
4480
  <div class="sectionbody">
4025
4481
  <div class="paragraph"><p>Phusion Passenger hides a lot of complexity for the end user (i.e. the web server
4026
4482
  system administrator), but sometimes it is desirable to know what is going on.
4027
4483
  This section describes a few things that Phusion Passenger does under the hood.</p></div>
4028
4484
  <div class="sect2">
4029
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_page_caching_support" data-comment-topic="page-caching-support-nafhf6">9.1. Page caching support</h3>
4485
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_page_caching_support"></span><h3 data-comment-topic="page-caching-support-nafhf6" data-anchor="_page_caching_support">9.1. Page caching support</h3>
4030
4486
  <div class="paragraph"><p>For each HTTP request, Phusion Passenger will automatically look for a corresponding
4031
4487
  page cache file, and serve that if it exists. It does this by appending ".html" to
4032
4488
  the filename that the URI normally maps to, and checking whether that file exists.
@@ -4062,7 +4518,7 @@ the <em>public</em> directory. In that case you’ll need to use mod_rewrite to
4062
4518
  page cache files.</p></div>
4063
4519
  </div>
4064
4520
  <div class="sect2">
4065
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="application_detection" data-comment-topic="how-phusion-passenger-detects-whether-a-virtual-host-is-a-web-application-13qbmhn">9.2. How Phusion Passenger detects whether a virtual host is a web application</h3>
4521
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="application_detection"></span><h3 data-comment-topic="how-phusion-passenger-detects-whether-a-virtual-host-is-a-web-application-13qbmhn" data-anchor="application_detection">9.2. How Phusion Passenger detects whether a virtual host is a web application</h3>
4066
4522
  <div class="paragraph"><p>After you’ve read the deployment instructions you might wonder how Phusion Passenger
4067
4523
  knows that the server root points to a web application that Phusion Passenger is
4068
4524
  able to serve, and how it knows what kind of web application it is (e.g. Rails or Rack).</p></div>
@@ -4103,7 +4559,7 @@ Phusion Passenger will look for <em>config.ru</em> instead of <em>config/environ
4103
4559
  </div>
4104
4560
  </div>
4105
4561
  <div class="sect1">
4106
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h2 id="_appendix_a_about_this_document" data-comment-topic="appendix-a-about-this-document-zfvixm">10. Appendix A: About this document</h2>
4562
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_appendix_a_about_this_document"></span><h2 data-comment-topic="appendix-a-about-this-document-zfvixm" data-anchor="_appendix_a_about_this_document">10. Appendix A: About this document</h2>
4107
4563
  <div class="sectionbody">
4108
4564
  <div class="paragraph"><p>The text of this document is licensed under the
4109
4565
  <a href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons
@@ -4121,10 +4577,10 @@ Attribution-Share Alike 3.0 Unported License</a>.</p></div>
4121
4577
  </div>
4122
4578
  </div>
4123
4579
  <div class="sect1">
4124
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h2 id="_appendix_b_terminology" data-comment-topic="appendix-b-terminology-wzv5ro">11. Appendix B: Terminology</h2>
4580
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_appendix_b_terminology"></span><h2 data-comment-topic="appendix-b-terminology-wzv5ro" data-anchor="_appendix_b_terminology">11. Appendix B: Terminology</h2>
4125
4581
  <div class="sectionbody">
4126
4582
  <div class="sect2">
4127
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="application_root" data-comment-topic="application-root-1fd6bqv">11.1. Application root</h3>
4583
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="application_root"></span><h3 data-comment-topic="application-root-1fd6bqv" data-anchor="application_root">11.1. Application root</h3>
4128
4584
  <div class="paragraph"><p>The root directory of an application that’s served by Phusion Passenger.</p></div>
4129
4585
  <div class="paragraph"><p>In case of Ruby on Rails applications, this is the directory that contains
4130
4586
  <em>Rakefile</em>, <em>app/</em>, <em>config/</em>, <em>public/</em>, etc. In other words, the directory
@@ -4186,17 +4642,17 @@ For example, take the following directory structure:</p></div>
4186
4642
  </div>
4187
4643
  </div>
4188
4644
  <div class="sect2">
4189
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="idle_process" data-comment-topic="idle-process-13byfw9">11.2. Idle process</h3>
4645
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="idle_process"></span><h3 data-comment-topic="idle-process-13byfw9" data-anchor="idle_process">11.2. Idle process</h3>
4190
4646
  <div class="paragraph"><p>An "idle process" refers to a process that hasn’t processed any requests for a while.</p></div>
4191
4647
  </div>
4192
4648
  <div class="sect2">
4193
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="inactive_process" data-comment-topic="inactive-process-1d2h0po">11.3. Inactive process</h3>
4649
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="inactive_process"></span><h3 data-comment-topic="inactive-process-1d2h0po" data-anchor="inactive_process">11.3. Inactive process</h3>
4194
4650
  <div class="paragraph"><p>An "inactive process" refers to a process that’s current not processing any requests. An idle process is always inactive, but an inactive process is not always considered idle.</p></div>
4195
4651
  </div>
4196
4652
  </div>
4197
4653
  </div>
4198
4654
  <div class="sect1">
4199
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h2 id="spawning_methods_explained" data-comment-topic="appendix-c-spawning-methods-explained-tcp8e6">12. Appendix C: Spawning methods explained</h2>
4655
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="spawning_methods_explained"></span><h2 data-comment-topic="appendix-c-spawning-methods-explained-tcp8e6" data-anchor="spawning_methods_explained">12. Appendix C: Spawning methods explained</h2>
4200
4656
  <div class="sectionbody">
4201
4657
  <div class="paragraph"><p>At its core, Phusion Passenger is an HTTP proxy and process manager. It spawns
4202
4658
  Ruby on Rails/Rack/WSGI worker processes (which may also be referred to as
@@ -4206,7 +4662,7 @@ processes.</p></div>
4206
4662
  Let’s go over the different spawning methods. For simplicity’s sake, let’s
4207
4663
  assume that we’re only talking about Ruby on Rails applications.</p></div>
4208
4664
  <div class="sect2">
4209
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_the_most_straightforward_and_traditional_way_direct_spawning" data-comment-topic="the-most-straightforward-and-traditional-way-conservative-spawning-civ29z">12.1. The most straightforward and traditional way: direct spawning</h3>
4665
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_the_most_straightforward_and_traditional_way_direct_spawning"></span><h3 data-comment-topic="the-most-straightforward-and-traditional-way-conservative-spawning-civ29z" data-anchor="_the_most_straightforward_and_traditional_way_direct_spawning">12.1. The most straightforward and traditional way: direct spawning</h3>
4210
4666
  <div class="paragraph"><p>Phusion Passenger could create a new Ruby process, which will then load the
4211
4667
  Rails application along with the entire Rails framework. This process will then
4212
4668
  enter an request handling main loop.</p></div>
@@ -4223,7 +4679,7 @@ other hand creates processes that reuse the already loaded Ruby interpreter. In
4223
4679
  programmers jargon, Phusion Passenger calls fork(), but not exec().</p></div>
4224
4680
  </div>
4225
4681
  <div class="sect2">
4226
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_the_smart_spawning_method" data-comment-topic="the-smart-spawning-method-7nhgtj">12.2. The smart spawning method</h3>
4682
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_the_smart_spawning_method"></span><h3 data-comment-topic="the-smart-spawning-method-7nhgtj" data-anchor="_the_smart_spawning_method">12.2. The smart spawning method</h3>
4227
4683
  <div class="admonitionblock">
4228
4684
  <table><tr>
4229
4685
  <td class="icon">
@@ -4244,7 +4700,7 @@ copy-on-write semantics of the virtual memory system on modern operating
4244
4700
  systems. As a side effect, the startup time is also reduced. This is technique
4245
4701
  is exploited by Phusion Passenger’s <em>smart</em> spawn method.</p></div>
4246
4702
  <div class="sect3">
4247
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_how_it_works" data-comment-topic="how-it-works-f9umga">12.2.1. How it works</h4>
4703
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_how_it_works"></span><h4 data-comment-topic="how-it-works-f9umga" data-anchor="_how_it_works">12.2.1. How it works</h4>
4248
4704
  <div class="paragraph"><p>When the <em>smart</em> spawn method is being used, Phusion Passenger will first
4249
4705
  create a so-called <em>ApplicationSpawner server</em> process. This process loads the
4250
4706
  entire Rails application along with the Rails framework, by loading
@@ -4285,7 +4741,7 @@ ApplicationSpawner servers have an idle timeout just like worker processes.
4285
4741
  </ul></div>
4286
4742
  </div>
4287
4743
  <div class="sect3">
4288
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_summary_of_benefits" data-comment-topic="summary-of-benefits-qovyvk">12.2.2. Summary of benefits</h4>
4744
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_summary_of_benefits"></span><h4 data-comment-topic="summary-of-benefits-qovyvk" data-anchor="_summary_of_benefits">12.2.2. Summary of benefits</h4>
4289
4745
  <div class="paragraph"><p>Suppose that Phusion Passenger needs a new worker process for an application
4290
4746
  that uses Rails 2.2.1.</p></div>
4291
4747
  <div class="paragraph"><p>If the <em>smart</em> spawning method is used, and an ApplicationSpawner server
@@ -4301,7 +4757,7 @@ gotchas you can easily reap the benefits of smart spawning.</p></div>
4301
4757
  </div>
4302
4758
  </div>
4303
4759
  <div class="sect2">
4304
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_smart_spawning_gotcha_1_unintentional_file_descriptor_sharing" data-comment-topic="smart-spawning-gotcha-1-unintentional-file-descriptor-sharing-cebw6q">12.3. Smart spawning gotcha #1: unintentional file descriptor sharing</h3>
4760
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_smart_spawning_gotcha_1_unintentional_file_descriptor_sharing"></span><h3 data-comment-topic="smart-spawning-gotcha-1-unintentional-file-descriptor-sharing-cebw6q" data-anchor="_smart_spawning_gotcha_1_unintentional_file_descriptor_sharing">12.3. Smart spawning gotcha #1: unintentional file descriptor sharing</h3>
4305
4761
  <div class="paragraph"><p>Because worker processes are created by forking from an ApplicationSpawner
4306
4762
  server, it will share all file descriptors that are opened by the
4307
4763
  ApplicationSpawner server. (This is part of the semantics of the Unix
@@ -4337,7 +4793,7 @@ http://www.gnu.org/software/src-highlite -->
4337
4793
  database upon creating a new worker process, which is why you normally do not
4338
4794
  encounter any database issues when using smart spawning mode.</p></div>
4339
4795
  <div class="sect3">
4340
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_example_1_memcached_connection_sharing_harmful" data-comment-topic="example-1-memcached-connection-sharing-harmful--1wfs3ad">12.3.1. Example 1: Memcached connection sharing (harmful)</h4>
4796
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_example_1_memcached_connection_sharing_harmful"></span><h4 data-comment-topic="example-1-memcached-connection-sharing-harmful--1wfs3ad" data-anchor="_example_1_memcached_connection_sharing_harmful">12.3.1. Example 1: Memcached connection sharing (harmful)</h4>
4341
4797
  <div class="paragraph"><p>Suppose we have a Rails application that connects to a Memcached server in
4342
4798
  <em>environment.rb</em>. This causes the ApplicationSpawner to have a socket connection
4343
4799
  (file descriptor) to the Memcached server, as shown in the following figure:</p></div>
@@ -4436,7 +4892,7 @@ http://www.gnu.org/software/src-highlite -->
4436
4892
  </div>
4437
4893
  </div>
4438
4894
  <div class="sect3">
4439
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_example_2_log_file_sharing_not_harmful" data-comment-topic="example-2-log-file-sharing-not-harmful--ox4yfy">12.3.2. Example 2: Log file sharing (not harmful)</h4>
4895
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_example_2_log_file_sharing_not_harmful"></span><h4 data-comment-topic="example-2-log-file-sharing-not-harmful--ox4yfy" data-anchor="_example_2_log_file_sharing_not_harmful">12.3.2. Example 2: Log file sharing (not harmful)</h4>
4440
4896
  <div class="paragraph"><p>There are also cases in which unintentional file descriptor sharing is not harmful.
4441
4897
  One such case is log file file descriptor sharing. Even if two processes write
4442
4898
  to the log file at the same time, the worst thing that can happen is that the
@@ -4448,7 +4904,7 @@ Memcached example, doesn’t help.</p></div>
4448
4904
  </div>
4449
4905
  </div>
4450
4906
  <div class="sect2">
4451
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_smart_spawning_gotcha_2_the_need_to_revive_threads" data-comment-topic="smart-spawning-gotcha-2-the-need-to-revive-threads-1ey176o">12.4. Smart spawning gotcha #2: the need to revive threads</h3>
4907
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_smart_spawning_gotcha_2_the_need_to_revive_threads"></span><h3 data-comment-topic="smart-spawning-gotcha-2-the-need-to-revive-threads-1ey176o" data-anchor="_smart_spawning_gotcha_2_the_need_to_revive_threads">12.4. Smart spawning gotcha #2: the need to revive threads</h3>
4452
4908
  <div class="paragraph"><p>Another part of the <em>fork()</em> system call’s semantics is the fact that threads
4453
4909
  disappear after a fork call. So if you’ve created any threads in environment.rb,
4454
4910
  then those threads will no longer be running in newly created worker process.
@@ -4474,7 +4930,7 @@ http://www.gnu.org/software/src-highlite -->
4474
4930
  </div>
4475
4931
  </div>
4476
4932
  <div class="sect2">
4477
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_smart_spawning_gotcha_3_code_load_order" data-comment-topic="smart-spawning-gotcha-3-code-load-order-12ydsn8">12.5. Smart spawning gotcha #3: code load order</h3>
4933
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_smart_spawning_gotcha_3_code_load_order"></span><h3 data-comment-topic="smart-spawning-gotcha-3-code-load-order-12ydsn8" data-anchor="_smart_spawning_gotcha_3_code_load_order">12.5. Smart spawning gotcha #3: code load order</h3>
4478
4934
  <div class="paragraph"><p>This gotcha is only applicable to the <em>smart</em> spawn method, not the <em>smart-lv2</em>
4479
4935
  spawn method.</p></div>
4480
4936
  <div class="paragraph"><p>If your application expects the Rails framework to be not loaded during the
@@ -4497,7 +4953,7 @@ has no effect.</p></div>
4497
4953
  <div id="footnotes"><hr></div>
4498
4954
  <div id="footer">
4499
4955
  <div id="footer-text">
4500
- Last updated 2012-10-24 16:27:54 CEST
4956
+ Last updated 2013-01-23 15:31:31 CET
4501
4957
  </div>
4502
4958
  </div>
4503
4959
  <script>/*! jQuery v1.7.1 jquery.com | jquery.org/license */
@@ -4835,6 +5291,7 @@ Mizuho.initializeTopBar = $.proxy(function() {
4835
5291
  var isMobileDevice = this.isMobileDevice();
4836
5292
  var timerId;
4837
5293
 
5294
+ // Create the floating table of contents used in the top bar.
4838
5295
  var $floattoc = $('<div id="floattoc"></div>').html($('#toc').html());
4839
5296
  $floattoc.find('#toctitle').remove();
4840
5297
  $floattoc.find('.comments').remove();
@@ -4853,6 +5310,8 @@ Mizuho.initializeTopBar = $.proxy(function() {
4853
5310
  self.internalLinkClicked(this, event);
4854
5311
  });
4855
5312
 
5313
+ // Callback for when the user clicks on the Table of Contents
5314
+ // button on the top bar.
4856
5315
  function showFloatingToc() {
4857
5316
  var scrollUpdateTimerId;
4858
5317
 
@@ -4945,6 +5404,9 @@ Mizuho.initializeTopBar = $.proxy(function() {
4945
5404
  $window.bind('scroll', onScroll);
4946
5405
  }
4947
5406
 
5407
+ // Called whenever the user scrolls. Updates the title of the
5408
+ // Table of Contents button in the top bar to the section that
5409
+ // the user is currently reading.
4948
5410
  function update() {
4949
5411
  if ($title.offset().top + $title.height() < $document.scrollTop()) {
4950
5412
  if (!$topbar.is(':visible')) {
@@ -4988,6 +5450,7 @@ Mizuho.initializeTopBar = $.proxy(function() {
4988
5450
  }, 100);
4989
5451
  }
4990
5452
 
5453
+
4991
5454
  if (isMobileDevice) {
4992
5455
  // Mobile devices don't support position fixed.
4993
5456
  $topbar.css('position', 'absolute');