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, Apache version</h1>
1066
+ <h1>Phusion Passenger users guide, Apache version</h1>
1052
1067
  <div id="preamble">
1053
1068
  <div class="sectionbody">
1054
1069
  <div class="paragraph"><p><span class="image">
@@ -1083,31 +1098,176 @@ How to solve common problems.
1083
1098
  <div class="paragraph"><p>This guide assumes that the reader is somewhat familiar with Apache 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="#locating_apache_conf">2.7. Locating the Apache configuration file</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_ruby_on_rails_1_x_or_2_x_but_not_rails_gt_3_x_application">3. Deploying a Ruby on Rails 1.x or 2.x (but NOT Rails &gt;= 3.x) 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_based_ruby_application_including_rails_gt_3">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="#_passengerroot_lt_directory_gt">6.1. PassengerRoot &lt;directory&gt;</a></div>
1142
+ <div class="foo toclevel3"><a href="#PassengerRuby">6.2. PassengerRuby &lt;filename&gt;</a></div>
1143
+ <div class="foo toclevel3"><a href="#PassengerAppRoot">6.3. PassengerAppRoot &lt;path/to/root&gt;</a></div>
1144
+ <div class="foo toclevel3"><a href="#PassengerSpawnMethod">6.4. PassengerSpawnMethod &lt;string&gt;</a></div>
1145
+ <div class="foo toclevel3"><a href="#_passengerenabled_lt_on_off_gt">6.5. PassengerEnabled &lt;on|off&gt;</a></div>
1146
+ <div class="foo toclevel3"><a href="#PassengerTempDir">6.6. PassengerTempDir &lt;directory&gt;</a></div>
1147
+ <div class="foo toclevel3"><a href="#PassengerUploadBufferDir">6.7. PassengerUploadBufferDir &lt;directory&gt;</a></div>
1148
+ <div class="foo toclevel3"><a href="#_passengerrestartdir_lt_directory_gt">6.8. PassengerRestartDir &lt;directory&gt;</a></div>
1149
+ <div class="foo toclevel3"><a href="#PassengerBufferResponse">6.9. PassengerBufferResponse &lt;on|off&gt;</a></div>
1150
+ <div class="foo toclevel3"><a href="#PassengerRollingRestarts">6.10. PassengerRollingRestarts &lt;on|off&gt;</a></div>
1151
+ <div class="foo toclevel3"><a href="#_passengerresistdeploymenterrors_lt_on_off_gt">6.11. PassengerResistDeploymentErrors &lt;on|off&gt;</a></div>
1152
+ <div class="foo toclevel3"><a href="#_security_options">6.12. Security options</a></div>
1153
+ <div class="foo toclevel4"><a href="#PassengerUserSwitching">6.12.1. PassengerUserSwitching &lt;on|off&gt;</a></div>
1154
+ <div class="foo toclevel4"><a href="#_passengeruser_lt_username_gt">6.12.2. PassengerUser &lt;username&gt;</a></div>
1155
+ <div class="foo toclevel4"><a href="#_passengergroup_lt_group_name_gt">6.12.3. PassengerGroup &lt;group name&gt;</a></div>
1156
+ <div class="foo toclevel4"><a href="#PassengerDefaultUser">6.12.4. PassengerDefaultUser &lt;username&gt;</a></div>
1157
+ <div class="foo toclevel4"><a href="#PassengerDefaultGroup">6.12.5. PassengerDefaultGroup &lt;group name&gt;</a></div>
1158
+ <div class="foo toclevel4"><a href="#_passengerfriendlyerrorpages_lt_on_off_gt">6.12.6. PassengerFriendlyErrorPages &lt;on|off&gt;</a></div>
1159
+ <div class="foo toclevel3"><a href="#_resource_control_and_optimization_options">6.13. Resource control and optimization options</a></div>
1160
+ <div class="foo toclevel4"><a href="#_passengermaxpoolsize_lt_integer_gt">6.13.1. PassengerMaxPoolSize &lt;integer&gt;</a></div>
1161
+ <div class="foo toclevel4"><a href="#PassengerMinInstances">6.13.2. PassengerMinInstances &lt;integer&gt;</a></div>
1162
+ <div class="foo toclevel4"><a href="#_passengermaxinstances_lt_integer_gt">6.13.3. PassengerMaxInstances &lt;integer&gt;</a></div>
1163
+ <div class="foo toclevel4"><a href="#_passengermaxinstancesperapp_lt_integer_gt">6.13.4. PassengerMaxInstancesPerApp &lt;integer&gt;</a></div>
1164
+ <div class="foo toclevel4"><a href="#PassengerPoolIdleTime">6.13.5. PassengerPoolIdleTime &lt;integer&gt;</a></div>
1165
+ <div class="foo toclevel4"><a href="#_passengermaxpreloaderidletime_lt_integer_gt">6.13.6. PassengerMaxPreloaderIdleTime &lt;integer&gt;</a></div>
1166
+ <div class="foo toclevel4"><a href="#PassengerConcurrencyModel">6.13.7. PassengerConcurrencyModel &lt;process|thread&gt;</a></div>
1167
+ <div class="foo toclevel4"><a href="#PassengerThreadCount">6.13.8. PassengerThreadCount &lt;number&gt;</a></div>
1168
+ <div class="foo toclevel4"><a href="#PassengerMaxRequests">6.13.9. PassengerMaxRequests &lt;integer&gt;</a></div>
1169
+ <div class="foo toclevel4"><a href="#PassengerMaxRequestTime">6.13.10. PassengerMaxRequestTime &lt;seconds&gt;</a></div>
1170
+ <div class="foo toclevel4"><a href="#PassengerMemoryLimit">6.13.11. PassengerMemoryLimit &lt;integer&gt;</a></div>
1171
+ <div class="foo toclevel4"><a href="#_passengerstatthrottlerate_lt_integer_gt">6.13.12. PassengerStatThrottleRate &lt;integer&gt;</a></div>
1172
+ <div class="foo toclevel4"><a href="#PassengerPreStart">6.13.13. PassengerPreStart &lt;url&gt;</a></div>
1173
+ <div class="foo toclevel4"><a href="#PassengerHighPerformance">6.13.14. PassengerHighPerformance &lt;on|off&gt;</a></div>
1174
+ <div class="foo toclevel3"><a href="#_compatibility_options">6.14. Compatibility options</a></div>
1175
+ <div class="foo toclevel4"><a href="#PassengerResolveSymlinksInDocumentRoot">6.14.1. PassengerResolveSymlinksInDocumentRoot &lt;on|off&gt;</a></div>
1176
+ <div class="foo toclevel4"><a href="#_passengerallowencodedslashes_lt_on_off_gt">6.14.2. PassengerAllowEncodedSlashes &lt;on|off&gt;</a></div>
1177
+ <div class="foo toclevel3"><a href="#_logging_and_debugging_options">6.15. Logging and debugging options</a></div>
1178
+ <div class="foo toclevel4"><a href="#_passengerloglevel_lt_integer_gt">6.15.1. PassengerLogLevel &lt;integer&gt;</a></div>
1179
+ <div class="foo toclevel4"><a href="#_passengerdebuglogfile_lt_filename_gt">6.15.2. PassengerDebugLogFile &lt;filename&gt;</a></div>
1180
+ <div class="foo toclevel4"><a href="#_passengerdebugger_lt_on_off_gt">6.15.3. PassengerDebugger &lt;on|off&gt;</a></div>
1181
+ <div class="foo toclevel3"><a href="#_classic_ruby_on_rails_8656_2_x_specific_options">6.16. Classic Ruby on Rails (⇐ 2.x)-specific options</a></div>
1182
+ <div class="foo toclevel4"><a href="#_railsautodetect_lt_on_off_gt">6.16.1. RailsAutoDetect &lt;on|off&gt;</a></div>
1183
+ <div class="foo toclevel4"><a href="#RailsBaseURI">6.16.2. RailsBaseURI &lt;uri&gt;</a></div>
1184
+ <div class="foo toclevel4"><a href="#rails_env">6.16.3. RailsEnv &lt;string&gt;</a></div>
1185
+ <div class="foo toclevel3"><a href="#_rack_and_rails_gt_3_specific_options">6.17. Rack and Rails &gt;= 3 specific options</a></div>
1186
+ <div class="foo toclevel4"><a href="#_rackautodetect_lt_on_off_gt">6.17.1. RackAutoDetect &lt;on|off&gt;</a></div>
1187
+ <div class="foo toclevel4"><a href="#RackBaseURI">6.17.2. RackBaseURI &lt;uri&gt;</a></div>
1188
+ <div class="foo toclevel4"><a href="#rack_env">6.17.3. RackEnv &lt;string&gt;</a></div>
1189
+ <div class="foo toclevel3"><a href="#_deprecated_options">6.18. Deprecated options</a></div>
1190
+ <div class="foo toclevel4"><a href="#_railsruby">6.18.1. RailsRuby</a></div>
1191
+ <div class="foo toclevel4"><a href="#_railsuserswitching">6.18.2. RailsUserSwitching</a></div>
1192
+ <div class="foo toclevel4"><a href="#_railsdefaultuser">6.18.3. RailsDefaultUser</a></div>
1193
+ <div class="foo toclevel4"><a href="#_railsallowmodrewrite">6.18.4. RailsAllowModRewrite</a></div>
1194
+ <div class="foo toclevel4"><a href="#_railsspawnmethod">6.18.5. RailsSpawnMethod</a></div>
1195
+ <div class="foo toclevel2"><a href="#troubleshooting">7. Troubleshooting</a></div>
1196
+ <div class="foo toclevel3"><a href="#_operating_system_specific_problems">7.1. Operating system-specific problems</a></div>
1197
+ <div class="foo toclevel4"><a href="#_macos_x_the_installer_cannot_locate_mamp_8217_s_apache">7.1.1. MacOS X: The installer cannot locate MAMP’s Apache</a></div>
1198
+ <div class="foo toclevel3"><a href="#_problems_during_installation">7.2. Problems during installation</a></div>
1199
+ <div class="foo toclevel4"><a href="#installing_ruby_dev">7.2.1. Ruby development headers aren’t installed</a></div>
1200
+ <div class="foo toclevel4"><a href="#_apache_development_headers_aren_8217_t_installed">7.2.2. Apache development headers aren’t installed</a></div>
1201
+ <div class="foo toclevel4"><a href="#_apr_development_headers_aren_8217_t_installed">7.2.3. APR development headers aren’t installed</a></div>
1202
+ <div class="foo toclevel4"><a href="#_phusion_passenger_is_using_the_wrong_apache_during_installation">7.2.4. Phusion Passenger is using the wrong Apache during installation</a></div>
1203
+ <div class="foo toclevel4"><a href="#_phusion_passenger_is_using_the_wrong_ruby_during_installation">7.2.5. Phusion Passenger is using the wrong Ruby during installation</a></div>
1204
+ <div class="foo toclevel3"><a href="#_problems_after_installation">7.3. Problems after installation</a></div>
1205
+ <div class="foo toclevel4"><a href="#_my_rails_application_works_on_mongrel_but_not_on_phusion_passenger">7.3.1. My Rails application works on Mongrel, but not on Phusion Passenger</a></div>
1206
+ <div class="foo toclevel4"><a href="#_phusion_passenger_has_been_compiled_against_the_wrong_apache_installation">7.3.2. Phusion Passenger has been compiled against the wrong Apache installation</a></div>
1207
+ <div class="foo toclevel4"><a href="#_i_get_a_403_forbidden_error">7.3.3. I get a "403 Forbidden" error</a></div>
1208
+ <div class="foo toclevel4"><a href="#_static_assets_such_as_images_and_stylesheets_aren_8217_t_being_displayed">7.3.4. Static assets such as images and stylesheets aren’t being displayed</a></div>
1209
+ <div class="foo toclevel4"><a href="#_the_apache_error_log_says_that_the_spawn_manager_script_does_not_exist_or_that_it_does_not_have_permission_to_execute_it">7.3.5. The Apache error log says that the spawn manager script does not exist, or that it does not have permission to execute it</a></div>
1210
+ <div class="foo toclevel4"><a href="#_the_rails_application_reports_that_it_8217_s_unable_to_start_because_of_a_permission_error">7.3.6. The Rails application reports that it’s unable to start because of a permission error</a></div>
1211
+ <div class="foo toclevel4"><a href="#_my_rails_application_8217_s_log_file_is_not_being_written_to">7.3.7. My Rails application’s log file is not being written to</a></div>
1212
+ <div class="foo toclevel4"><a href="#_i_8217_ve_deployed_my_app_on_ssl_but_the_app_thinks_its_not_on_ssl">7.3.8. I’ve deployed my app on SSL, but the app thinks its not on SSL</a></div>
1213
+ <div class="foo toclevel3"><a href="#conflicting_apache_modules">7.4. Conflicting Apache modules</a></div>
1214
+ <div class="foo toclevel4"><a href="#_mod_userdir">7.4.1. mod_userdir</a></div>
1215
+ <div class="foo toclevel4"><a href="#_multiviews_mod_negotiation">7.4.2. MultiViews (mod_negotiation)</a></div>
1216
+ <div class="foo toclevel4"><a href="#_virtualdocumentroot">7.4.3. VirtualDocumentRoot</a></div>
1217
+ <div class="foo toclevel2"><a href="#_analysis_and_system_maintenance">8. Analysis and system maintenance</a></div>
1218
+ <div class="foo toclevel3"><a href="#_inspecting_memory_usage">8.1. Inspecting memory usage</a></div>
1219
+ <div class="foo toclevel3"><a href="#_inspecting_phusion_passenger_8217_s_internal_status">8.2. Inspecting Phusion Passenger’s internal status</a></div>
1220
+ <div class="foo toclevel3"><a href="#debugging_frozen">8.3. Debugging frozen applications</a></div>
1221
+ <div class="foo toclevel3"><a href="#_accessing_individual_application_processes">8.4. Accessing individual application processes</a></div>
1222
+ <div class="foo toclevel3"><a href="#_attaching_an_irb_console_to_an_application_process">8.5. Attaching an IRB console to an application process</a></div>
1223
+ <div class="foo toclevel2"><a href="#_tips">9. Tips</a></div>
1224
+ <div class="foo toclevel3"><a href="#user_switching">9.1. User switching (security)</a></div>
1225
+ <div class="foo toclevel3"><a href="#reducing_memory_usage">9.2. Reducing memory consumption of Ruby on Rails applications by 33%</a></div>
1226
+ <div class="foo toclevel3"><a href="#capistrano">9.3. Capistrano recipe</a></div>
1227
+ <div class="foo toclevel3"><a href="#bundler_support">9.4. Bundler support</a></div>
1228
+ <div class="foo toclevel3"><a href="#moving_phusion_passenger">9.5. Moving Phusion Passenger to a different directory</a></div>
1229
+ <div class="foo toclevel3"><a href="#_installing_multiple_ruby_on_rails_versions">9.6. Installing multiple Ruby on Rails versions</a></div>
1230
+ <div class="foo toclevel3"><a href="#_making_the_application_restart_after_each_request">9.7. Making the application restart after each request</a></div>
1231
+ <div class="foo toclevel3"><a href="#sub_uri_deployment_uri_fix">9.8. How to fix broken images/CSS/JavaScript URIs in sub-URI deployments</a></div>
1232
+ <div class="foo toclevel3"><a href="#_out_of_band_garbage_work_and_out_of_band_garbage_collection">9.9. Out-of-Band Garbage Work and Out-of-Band Garbage Collection</a></div>
1233
+ <div class="foo toclevel3"><a href="#_x_sendfile_support">9.10. X-Sendfile support</a></div>
1234
+ <div class="foo toclevel3"><a href="#_upload_progress">9.11. Upload progress</a></div>
1235
+ <div class="foo toclevel2"><a href="#_under_the_hood">10. Under the hood</a></div>
1236
+ <div class="foo toclevel3"><a href="#_static_assets_serving">10.1. Static assets serving</a></div>
1237
+ <div class="foo toclevel3"><a href="#_page_caching_support">10.2. Page caching support</a></div>
1238
+ <div class="foo toclevel3"><a href="#application_detection">10.3. How Phusion Passenger detects whether a virtual host is a web application</a></div>
1239
+ <div class="foo toclevel2"><a href="#_appendix_a_about_this_document">11. Appendix A: About this document</a></div>
1240
+ <div class="foo toclevel2"><a href="#_appendix_b_terminology">12. Appendix B: Terminology</a></div>
1241
+ <div class="foo toclevel3"><a href="#application_root">12.1. Application root</a></div>
1242
+ <div class="foo toclevel3"><a href="#idle_process">12.2. Idle process</a></div>
1243
+ <div class="foo toclevel3"><a href="#inactive_process">12.3. Inactive process</a></div>
1244
+ <div class="foo toclevel2"><a href="#spawning_methods_explained">13. Appendix C: Spawning methods explained</a></div>
1245
+ <div class="foo toclevel3"><a href="#_the_most_straightforward_and_traditional_way_direct_spawning">13.1. The most straightforward and traditional way: direct spawning</a></div>
1246
+ <div class="foo toclevel3"><a href="#_the_smart_spawning_method">13.2. The smart spawning method</a></div>
1247
+ <div class="foo toclevel4"><a href="#_how_it_works">13.2.1. How it works</a></div>
1248
+ <div class="foo toclevel4"><a href="#_summary_of_benefits">13.2.2. Summary of benefits</a></div>
1249
+ <div class="foo toclevel3"><a href="#_smart_spawning_gotcha_1_unintentional_file_descriptor_sharing">13.3. Smart spawning gotcha #1: unintentional file descriptor sharing</a></div>
1250
+ <div class="foo toclevel4"><a href="#_example_1_memcached_connection_sharing_harmful">13.3.1. Example 1: Memcached connection sharing (harmful)</a></div>
1251
+ <div class="foo toclevel4"><a href="#_example_2_log_file_sharing_not_harmful">13.3.2. Example 2: Log file sharing (not harmful)</a></div>
1252
+ <div class="foo toclevel3"><a href="#_smart_spawning_gotcha_2_the_need_to_revive_threads">13.4. Smart spawning gotcha #2: the need to revive threads</a></div>
1253
+ <div class="foo toclevel3"><a href="#_smart_spawning_gotcha_3_code_load_order">13.5. Smart spawning gotcha #3: code load order</a></div>
1254
+ </div>
1091
1255
  </div>
1092
1256
  <div id="content">
1093
1257
 
1094
1258
  <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-zkewk3">1. Support information</h2>
1259
+ <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-zkewk3" data-anchor="_support_information">1. Support information</h2>
1096
1260
  <div class="sectionbody">
1097
1261
  <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-rhbg35">1.1. Supported operating systems</h3>
1262
+ <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-rhbg35" data-anchor="_supported_operating_systems">1.1. Supported operating systems</h3>
1099
1263
  <div class="paragraph"><p>Phusion Passenger works on any POSIX-compliant operating system. In other
1100
1264
  words: practically any operating system on earth, except Microsoft Windows.</p></div>
1101
1265
  <div class="paragraph"><p>Phusion Passenger is confirmed on a large number of operating systems and Linux
1102
1266
  distributions, including, but not limited to, Ubuntu, Debian, CentOS/Fedora/RHEL,
1103
1267
  Gentoo, Mac OS X, FreeBSD and Solaris. Both 32-bit and 64-bit platforms are supported.</p></div>
1104
- <div class="literalblock">
1105
- <div class="content monospaced">
1106
- <pre>The only POSIX-compliant operating system on which Phusion Passenger for Apache is
1268
+ <div class="paragraph"><p>The only POSIX-compliant operating system on which Phusion Passenger for Apache is
1107
1269
  known not to work at this time, is OpenBSD. Please use Phusion Passenger for Nginx
1108
- or Phusion Passenger Standalone instead.</pre>
1109
- </div>
1110
- </div>
1270
+ or Phusion Passenger Standalone instead.</p></div>
1111
1271
  <div class="paragraph"><p>Please
1112
1272
  <a href="http://code.google.com/p/phusion-passenger/issues/list">report a bug</a>
1113
1273
  or
@@ -1115,7 +1275,7 @@ or
1115
1275
  if it doesn’t work on your POSIX-compliant operating system.</p></div>
1116
1276
  </div>
1117
1277
  <div class="sect2">
1118
- <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-f3pbrb">1.2. Where to get support</h3>
1278
+ <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-f3pbrb" data-anchor="_where_to_get_support">1.2. Where to get support</h3>
1119
1279
  <div class="ulist"><ul>
1120
1280
  <li>
1121
1281
  <p>
@@ -1126,7 +1286,12 @@ if it doesn’t work on your POSIX-compliant operating system.</p></div>
1126
1286
  <li>
1127
1287
  <p>
1128
1288
  <a href="http://groups.google.com/group/phusion-passenger">Discussion forum</a> - post a
1129
- message here if you’re experiencing problems.
1289
+ 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.
1290
+ </p>
1291
+ </li>
1292
+ <li>
1293
+ <p>
1294
+ 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.
1130
1295
  </p>
1131
1296
  </li>
1132
1297
  <li>
@@ -1140,306 +1305,377 @@ if it doesn’t work on your POSIX-compliant operating system.</p></div>
1140
1305
  </div>
1141
1306
  </div>
1142
1307
  <div class="sect1">
1143
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h2 id="_installing_upgrading_and_uninstalling_phusion_passenger" data-comment-topic="installing-upgrading-and-uninstalling-phusion-passenger-laryvs">2. Installing, upgrading and uninstalling Phusion Passenger</h2>
1308
+ <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-upgrading-and-uninstalling-phusion-passenger-laryvs" data-anchor="_installation">2. Installation</h2>
1144
1309
  <div class="sectionbody">
1145
- <div class="sect2">
1146
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_generic_installation_instructions" data-comment-topic="generic-installation-instructions-17jo43j">2.1. Generic installation instructions</h3>
1147
- <div class="sect3">
1148
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="install_passenger" data-comment-topic="overview-of-installation-methods-12vnjyb">2.1.1. Overview of installation methods</h4>
1149
- <div class="paragraph"><p>There are three ways to install Phusion Passenger:</p></div>
1310
+ <div class="paragraph"><p>The Phusion Passenger installation process consists of two steps:</p></div>
1150
1311
  <div class="olist arabic"><ol class="arabic">
1151
1312
  <li>
1152
1313
  <p>
1153
- By installing the Phusion Passenger Ruby gem, as instructed on the
1154
- <a href="https://www.phusionpassenger.com/download">“Download” page on the Phusion
1155
- Passenger website</a>.
1314
+ 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.
1156
1315
  </p>
1157
1316
  </li>
1158
1317
  <li>
1159
1318
  <p>
1160
- By downloading the source tarball from the Phusion Passenger website
1161
- (<em>passenger-x.x.x.tar.gz</em>).
1319
+ 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.
1162
1320
  </p>
1163
1321
  </li>
1322
+ </ol></div>
1323
+ <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>
1324
+ <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>
1325
+ <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>
1326
+ <div class="sect2">
1327
+ <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="installing-via-the-gem-39jw1u" data-anchor="rubygems_generic_install">2.1. Generic installation, upgrade and downgrade method: via RubyGems</h3>
1328
+ <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>
1329
+ <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>
1330
+ <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>
1331
+ <div class="listingblock">
1332
+ <div class="content monospaced">
1333
+ <pre>which ruby</pre>
1334
+ </div>
1335
+ </div>
1336
+ <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>
1337
+ <div class="ulist"><ul>
1164
1338
  <li>
1165
1339
  <p>
1166
- By installing a native Linux package (e.g. Debian package).
1340
+ Are you using RVM? Run <span class="monospaced">rvmsudo -s</span>
1167
1341
  </p>
1168
1342
  </li>
1169
- </ol></div>
1170
- <div class="paragraph"><p>The following sections will explain each installation method. Please read the
1171
- section for the installation method that you prefer. In our opinion, installing
1172
- the gem or the native package is easiest. For these two installation methods,
1173
- Phusion Passenger provides an easy-to-use installer.</p></div>
1343
+ <li>
1344
+ <p>
1345
+ Are you not using RVM, or do you not know what RVM is? Run <span class="monospaced">sudo -s</span>
1346
+ </p>
1347
+ </li>
1348
+ <li>
1349
+ <p>
1350
+ Is <em>sudo</em> not installed on your system? Run <span class="monospaced">su -c bash</span>
1351
+ </p>
1352
+ </li>
1353
+ </ul></div>
1354
+ <div class="paragraph"><p>You must maintain this root prompt throughout this installation guide.</p></div>
1355
+ <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>
1356
+ <div class="paragraph">
1357
+ <div class="title">Open Source</div>
1358
+ <p>Install the latest gem to obtain the files for the latest stable version of the open source Phusion Passenger:</p>
1174
1359
  </div>
1175
- <div class="sect3">
1176
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_preparation_gem_and_source_tarball_only" data-comment-topic="preparation-gem-and-source-tarball-only--1sxhbgg">2.1.2. Preparation (gem and source tarball only)</h4>
1177
- <div class="paragraph"><p>If you want to install Phusion Passenger via the gem or the source tarball,
1178
- then some preparations might be required. You can skip this subsection if
1179
- you’re installing Phusion Passenger via a native Linux package, because no
1180
- compilation is necessary.</p></div>
1181
- <div class="sect4">
1182
- <h5 id="_switching_to_a_root_command_prompt">Switching to a root command prompt</h5>
1183
- <div class="paragraph"><p>Before installing, you will probably need to switch to the <span class="monospaced">root</span> user first.
1184
- When you install Phusion Passenger via a gem or a source tarball, some Phusion
1185
- Passenger files have to be compiled, which requires write access to the
1186
- directory in which the Phusion Passenger files are located. On Unix systems,
1187
- the root user is the user who has write access to the entire system. So unless
1188
- you know that your normal user account has write access to the Phusion Passenger
1189
- directory, you should switch to root before installing Phusion Passenger.</p></div>
1190
- <div class="paragraph"><p>You can switch to root by typing the following command:</p></div>
1191
1360
  <div class="listingblock">
1192
1361
  <div class="content monospaced">
1193
- <pre>sudo -s</pre>
1362
+ <pre>gem install passenger</pre>
1194
1363
  </div>
1195
1364
  </div>
1196
- <div class="paragraph"><p>This will open a command prompt as the root user, from which you can proceed
1197
- with installing Phusion Passenger.</p></div>
1198
- <div class="paragraph"><p>If your system does not have <em>sudo</em> installed, please type the following command instead, which should do the same thing:</p></div>
1365
+ <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>
1199
1366
  <div class="listingblock">
1200
1367
  <div class="content monospaced">
1201
- <pre>su</pre>
1368
+ <pre>gem install passenger --pre</pre>
1202
1369
  </div>
1203
1370
  </div>
1204
- </div>
1205
- <div class="sect4">
1206
- <h5 id="specifying_correct_apache_install">Specifying the correct Apache installation</h5>
1207
- <div class="paragraph"><p>The Phusion Passenger installer will attempt to automatically detect Apache,
1208
- and compile Phusion Passenger against that Apache version. It does this by
1209
- looking for the <span class="monospaced">apxs</span> or <span class="monospaced">apxs2</span> command in the PATH environment variable.
1210
- Apxs is an integral part of any Apache installation.</p></div>
1211
- <div class="paragraph"><p>However, some systems have multiple Apache installations. This is likely
1212
- the case on MacOS X: the OS ships with Apache, but users tend to install
1213
- another Apache version seperately, e.g. via MacPorts. If your system has
1214
- multiple Apache installations, then you will need to tell the Phusion Passenger
1215
- installer which one to use. It is very important that you specify the
1216
- correct Apache installation, because if you load Phusion Passenger in an
1217
- Apache installation that it wasn’t compiled against, then it will likely
1218
- crash.</p></div>
1219
- <div class="paragraph"><p>On yet other systems, Apache is installed in a non-standard location,
1220
- preventing the Phusion Passenger installer from detecting Apache. This
1221
- is most likely the case on systems on which Apache was installed by hand
1222
- from source, i.e. as opposed to installed through the system’s native
1223
- package manager. If this is the case, then you will also have to tell
1224
- the installer where it can find Apache.</p></div>
1225
- <div class="paragraph"><p>To do so, set the <span class="monospaced">APXS2</span> environment variable to the full path of the
1226
- correct <span class="monospaced">apxs</span> or <span class="monospaced">apxs2</span> command. Suppose that you want to use the Apache
1227
- installation in <em>/opt/apache2</em>. Then, assuming that the corresponding
1228
- <span class="monospaced">apxs</span> program’s path is <em>/opt/apache2/bin/apxs</em>, type:</p></div>
1371
+ <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>
1229
1372
  <div class="listingblock">
1230
1373
  <div class="content monospaced">
1231
- <pre>export APXS2=/opt/apache2/bin/apxs</pre>
1374
+ <pre>gem install passenger --version 3.0.0</pre>
1232
1375
  </div>
1233
1376
  </div>
1234
- <div class="admonitionblock">
1235
- <table><tr>
1236
- <td class="icon">
1237
- <img src="./images/icons/note.png" alt="Note">
1238
- </td>
1239
- <td class="content">On some systems, the <span class="monospaced">apxs</span> program might be called <span class="monospaced">apxs2</span>, and it might
1240
- be located in the <span class="monospaced">sbin</span> folder instead of the <span class="monospaced">bin</span> folder.</td>
1241
- </tr></table>
1377
+ <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>
1378
+ <div class="listingblock">
1379
+ <div class="content monospaced">
1380
+ <pre>gem install passenger --version 3.9.1.beta --pre</pre>
1381
+ </div>
1242
1382
  </div>
1243
- <div class="admonitionblock">
1244
- <table><tr>
1245
- <td class="icon">
1246
- <img src="./images/icons/note.png" alt="Note">
1247
- </td>
1248
- <td class="content">
1249
- <div class="title">Environment variables and <em>sudo</em>
1250
- </div>By default, the <em>sudo</em> command will erase any environment variables that it
1251
- doesn’t recognize, prior to executing the given command. So if you set APXS2 as a
1252
- normal user, then run <span class="monospaced">sudo passenger-install-apache2-module</span> (which is the command
1253
- for the Phusion Passenger installer), then the installer will not receive the
1254
- environment variable value that you set. To solve this problem, please become root
1255
- prior to setting any environment variables, as described in the previous subsection.</td>
1256
- </tr></table>
1383
+ <div class="paragraph">
1384
+ <div class="title">Enterprise</div>
1385
+ <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>
1257
1386
  </div>
1387
+ <div class="paragraph"><p>First, download the <strong>license key</strong> and save it as <em>/etc/passenger-enterprise-license</em>.</p></div>
1388
+ <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>
1389
+ <div class="listingblock">
1390
+ <div class="content monospaced">
1391
+ <pre>gem install passenger-enterprise-server-x.x.x.gem</pre>
1392
+ </div>
1258
1393
  </div>
1259
- <div class="sect4">
1260
- <h5 id="specifying_ruby_installation">Specifying the correct Ruby installation</h5>
1261
- <div class="paragraph"><p>If your system has multiple Ruby installations — which is likely the case on
1262
- MacOS X, or if you’ve also installed
1263
- <a href="http://www.rubyenterpriseedition.com">Ruby Enterprise Edition</a> — then you
1264
- will need to tell the operating system which Ruby installation to use, prior to
1265
- running the Phusion Passenger installer. If you only have one Ruby installation
1266
- (the case on most Linux systems), then you can skip this section because Phusion
1267
- Passenger will automatically detect it.</p></div>
1268
- <div class="paragraph"><p>To specify a Ruby installation, prepend your Ruby installation’s <span class="monospaced">bin</span>
1269
- directory to the <span class="monospaced">PATH</span> environment variable. For example, if you have the
1270
- following Ruby installations:</p></div>
1394
+ <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>
1395
+ <div class="paragraph"><p>If you all the following are applicable to you:</p></div>
1271
1396
  <div class="ulist"><ul>
1272
1397
  <li>
1273
1398
  <p>
1274
- /usr/bin/ruby
1399
+ You are on Debian or Ubuntu,
1400
+ </p>
1401
+ </li>
1402
+ <li>
1403
+ <p>
1404
+ and you installed RubyGems through APT,
1275
1405
  </p>
1276
1406
  </li>
1277
1407
  <li>
1278
1408
  <p>
1279
- /opt/myruby/bin/ruby
1409
+ and your Ruby interpreter is installed system-wide,
1280
1410
  </p>
1281
1411
  </li>
1282
1412
  </ul></div>
1283
- <div class="paragraph"><p>and you want to use the latter, then type:</p></div>
1413
+ <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>
1414
+ <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>
1284
1415
  <div class="listingblock">
1285
1416
  <div class="content monospaced">
1286
- <pre>export PATH=/opt/myruby/bin:$PATH</pre>
1417
+ <pre>export PATH=$PATH:/var/lib/gems/1.8/bin:/var/lib/gems/1.9/bin</pre>
1287
1418
  </div>
1288
1419
  </div>
1420
+ <span class="anchor_helper" id="_step_4_loosen_permissions"></span><h4 class="float" data-anchor="_step_4_loosen_permissions">Step 4: loosen permissions</h4>
1421
+ <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>
1422
+ <div class="paragraph"><p>To find out where the Phusion Passenger gem directory is, run:</p></div>
1423
+ <div class="listingblock">
1424
+ <div class="content monospaced">
1425
+ <pre>passenger-config --root</pre>
1426
+ </div>
1289
1427
  </div>
1428
+ <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>
1429
+ <div class="listingblock">
1430
+ <div class="content monospaced">
1431
+ <pre>chmod o+x /home/phusion/.rvm/gems/ruby-1.9.3-p362/gems/passenger-x.x.x
1432
+ chmod o+x /home/phusion/.rvm/gems/ruby-1.9.3-p362/gems
1433
+ chmod o+x /home/phusion/.rvm/gems/ruby-1.9.3-p362
1434
+ chmod o+x /home/phusion/.rvm/gems
1435
+ chmod o+x /home/phusion/.rvm
1436
+ chmod o+x /home/phusion</pre>
1437
+ </div>
1290
1438
  </div>
1291
- <div class="sect3">
1292
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_installing_via_the_gem" data-comment-topic="installing-via-the-gem-39jw1u">2.1.3. Installing via the gem</h4>
1293
- <div class="paragraph"><p>Please install the gem and then run the Phusion Passenger installer, by typing the
1294
- following commands:</p></div>
1439
+ <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>
1440
+ <div class="paragraph"><p>The Phusion Passenger gem only contains source files. In this step we will use the installer to compile the Phusion Passenger binaries, which include the various Phusion Passenger agent executables and the Phusion Passenger Apache module.</p></div>
1441
+ <div class="paragraph"><p>Run the following command and follow the on-screen instructions.</p></div>
1442
+ <div class="listingblock">
1443
+ <div class="content monospaced">
1444
+ <pre>passenger-install-apache2-module</pre>
1445
+ </div>
1446
+ </div>
1447
+ <div class="paragraph"><p>At the end of the installation process, you will be asked to copy and paste a configuration snippet (containing <span class="monospaced">LoadModule</span>, <span class="monospaced">PassengerRoot</span>, etc.) into your Apache configuration file. If you’re upgrading, then you already had a similar configuration snippet. Be sure to remove the old one before pasting the new one.</p></div>
1448
+ <div class="paragraph"><p>If you have trouble finding the Apache configuration file, see <a href="#locating_apache_conf">Locating the Apache configuration file</a>. If you’re on OS X Server &gt;= 10.8 (Mountain Lion) and you’re running Web Services, then you should definitely read that section because the configuration file may not be where you think it is.</p></div>
1449
+ <div class="paragraph"><p>If compilation doesn’t succeed, then please consult the <a href="#troubleshooting">Troubleshooting</a> section.</p></div>
1450
+ <div class="paragraph">
1451
+ <div class="title">What does the installer do?</div>
1452
+ <p>Despite the name, this "installer" doesn’t actually install anything. The installer checks whether all required dependencies are installed, invokes the compiler, and tells you how to modify the Apache
1453
+ configuration file. However, it doesn’t copy any files to outside the Phusion Passenger source directory.</p>
1454
+ </div>
1455
+ <div class="paragraph"><p><span class="monospaced">passenger-install-apache2-module</span> is actually just a user-friendly frontend around the command <span class="monospaced">rake apache2</span>, which performs the actual compilation of Phusion Passenger.</p></div>
1456
+ <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>
1457
+ <div class="paragraph"><p>Restart your web server and run:</p></div>
1295
1458
  <div class="listingblock">
1296
1459
  <div class="content monospaced">
1297
- <pre>gem install passenger-x.x.x.gem
1298
- passenger-install-apache2-module</pre>
1460
+ <pre>passenger-memory-stats</pre>
1299
1461
  </div>
1300
1462
  </div>
1301
- <div class="paragraph"><p>Please follow the instructions given by the installer.</p></div>
1463
+ <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>
1464
+ <div class="paragraph"><p>If the output is not as expected, then please refer to the <a href="#troubleshooting">Troubleshooting</a> section.</p></div>
1302
1465
  </div>
1303
- <div class="sect3">
1304
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_installing_via_the_source_tarball" data-comment-topic="installing-via-the-source-tarball-1cgxrqc">2.1.4. Installing via the source tarball</h4>
1305
- <div class="paragraph"><p>Extract the tarball to whatever location you prefer. <strong>The Phusion Passenger files
1306
- are to reside in that location permanently.</strong> For example, if you would like
1307
- Phusion Passenger to reside in <span class="monospaced">/opt/passenger-x.x.x</span>:</p></div>
1466
+ <div class="sect2">
1467
+ <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="installing-via-the-source-tarball-1cgxrqc" data-anchor="tarball_generic_install">2.2. Generic installation, upgrade and downgrade method: via tarball</h3>
1468
+ <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>
1469
+ <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>
1470
+ <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>
1471
+ <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>
1308
1472
  <div class="listingblock">
1309
1473
  <div class="content monospaced">
1310
- <pre>cd /opt
1311
- tar xzvf ~/YourDownloadsFolder/passenger-x.x.x.tar.gz</pre>
1474
+ <pre>mkdir $PREFIX
1475
+ cd $PREFIX
1476
+ tar xzvf /location-to/passenger-x.x.x.tar.gz
1477
+ cd $PREFIX/passenger-x.x.x</pre>
1312
1478
  </div>
1313
1479
  </div>
1314
- <div class="paragraph"><p>Next, run the included installer:</p></div>
1480
+ <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>
1481
+ <span class="anchor_helper" id="_step_2_loosen_permissions"></span><h4 class="float" data-anchor="_step_2_loosen_permissions">Step 2: loosen permissions</h4>
1482
+ <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>
1483
+ <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>
1315
1484
  <div class="listingblock">
1316
1485
  <div class="content monospaced">
1317
- <pre>/opt/passenger-x.x.x/bin/passenger-install-apache2-module</pre>
1486
+ <pre>chmod o+x /opt/passenger/passenger-4.0.0
1487
+ chmod o+x /opt/passenger
1488
+ chmod o+x /opt</pre>
1318
1489
  </div>
1319
1490
  </div>
1320
- <div class="paragraph"><p>Please follow the instructions given by the installer.</p></div>
1321
- <div class="admonitionblock">
1322
- <table><tr>
1323
- <td class="icon">
1324
- <img src="./images/icons/important.png" alt="Important">
1325
- </td>
1326
- <td class="content">Please do not remove the <em>passenger-x.x.x</em> folder after
1327
- installation. Furthermore, the <em>passenger-x.x.x</em> folder must be accessible by Apache.</td>
1328
- </tr></table>
1491
+ <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>
1492
+ <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>
1493
+ <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>
1494
+ <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>
1495
+ <div class="paragraph">
1496
+ <div class="title">Debian 6</div>
1497
+ <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>
1329
1498
  </div>
1499
+ <div class="paragraph"><p>Create <em>/etc/apt/sources.list.d/brightbox-source.list</em>:</p></div>
1500
+ <div class="listingblock">
1501
+ <div class="content monospaced">
1502
+ <pre>deb http://ppa.launchpad.net/brightbox/ruby-ng/ubuntu lucid main</pre>
1503
+ </div>
1330
1504
  </div>
1331
- <div class="sect3">
1332
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_installing_via_a_native_linux_package" data-comment-topic="installing-via-a-native-linux-package-i1tmhg">2.1.5. Installing via a native Linux package</h4>
1333
- <div class="paragraph"><p>John Leach from Brightbox has kindly provided a Ubuntu packages for Phusion Passenger. The package is available from the <a href="http://wiki.brightbox.co.uk/docs:phusion-passenger">Brightbox repository</a>.</p></div>
1505
+ <div class="paragraph"><p>Install the Brightbox APT public key:</p></div>
1506
+ <div class="listingblock">
1507
+ <div class="content monospaced">
1508
+ <pre>sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C3173AA6</pre>
1509
+ </div>
1334
1510
  </div>
1335
- <div class="sect3">
1336
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_what_does_the_installer_do" data-comment-topic="what-does-the-installer-do--3a7z1w">2.1.6. What does the installer do?</h4>
1337
- <div class="paragraph"><p>Although we call it an “installer”, it doesn’t actually install anything.
1338
- The installer checks whether all required dependencies are installed,
1339
- compiles Phusion Passenger for you, and tells you how to modify the Apache
1340
- configuration file, but it doesn’t copy any files around.</p></div>
1341
- <div class="paragraph"><p><span class="monospaced">passenger-install-apache2-module</span> is actually just a user-friendly frontend
1342
- around the command <span class="monospaced">rake apache2</span>, which performs the actual compilation of
1343
- Phusion Passenger.</p></div>
1511
+ <div class="paragraph"><p>Then install Ruby and Rake:</p></div>
1512
+ <div class="listingblock">
1513
+ <div class="content monospaced">
1514
+ <pre>sudo apt-get update
1515
+ sudo apt-get install ruby1.9.3
1516
+ sudo gem install rake</pre>
1517
+ </div>
1518
+ </div>
1519
+ <div class="paragraph">
1520
+ <div class="title">Debian 5</div>
1521
+ <p>Run:</p>
1522
+ </div>
1523
+ <div class="listingblock">
1524
+ <div class="content monospaced">
1525
+ <pre>sudo apt-get update
1526
+ sudo apt-get install ruby rake</pre>
1527
+ </div>
1344
1528
  </div>
1529
+ <div class="paragraph"><p>Then <a href="#add_rubygems_bin_dir_to_path">add the RubyGems bin directory to your $PATH</a>.</p></div>
1530
+ <div class="paragraph">
1531
+ <div class="title">Ubuntu</div>
1532
+ <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>
1533
+ </div>
1534
+ <div class="listingblock">
1535
+ <div class="content monospaced">
1536
+ <pre>sudo apt-add-repository ppa:brightbox/passenger
1537
+ sudo apt-get update</pre>
1538
+ </div>
1539
+ </div>
1540
+ <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>
1541
+ <div class="listingblock">
1542
+ <div class="content monospaced">
1543
+ <pre>sudo sh -c 'echo "deb http://ppa.launchpad.net/brightbox/passenger/ubuntu hardy main" &gt; /etc/apt/sources.list.d/brightbox-passenger.list'
1544
+ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C3173AA6
1545
+ sudo apt-get update</pre>
1546
+ </div>
1547
+ </div>
1548
+ <div class="paragraph">
1549
+ <div class="title">Other operating systems</div>
1550
+ <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>
1551
+ </div>
1552
+ <div class="listingblock">
1553
+ <div class="content monospaced">
1554
+ <pre>gem install rake</pre>
1555
+ </div>
1556
+ </div>
1557
+ <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>
1558
+ <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>
1559
+ <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>
1560
+ <div class="paragraph"><p>Please refer to <a href="#run_passenger_installer">this section</a>.
1561
+ Note that the <span class="monospaced">passenger-install-apache2-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-apache2-module</em>.</p></div>
1562
+ <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>
1563
+ <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>
1345
1564
  </div>
1346
1565
  <div class="sect2">
1347
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_operating_system_specific_instructions_and_information" data-comment-topic="operating-system-specific-instructions-and-information-1dfz365">2.2. Operating system-specific instructions and information</h3>
1348
- <div class="sect3">
1349
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_ubuntu_linux" data-comment-topic="ubuntu-linux-1xwc66">2.2.1. Ubuntu Linux</h4>
1350
- <div class="paragraph"><p>Ben Hughes has written an <a href="http://www.railsgarden.com/2008/04/12/configurating-passenger-mod_rails-on-slicehost-with-ubuntu-710/">article on installing Phusion Passenger on Ubuntu</a>.</p></div>
1566
+ <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-1xg22xs" data-anchor="_installing_or_upgrading_on_ubuntu">2.3. Installing or upgrading on Ubuntu</h3>
1567
+ <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>
1568
+ <div class="paragraph"><p>Add the following line to the Third Party Software Sources:</p></div>
1569
+ <div class="listingblock">
1570
+ <div class="content monospaced">
1571
+ <pre>deb http://apt.brightbox.net hardy main</pre>
1572
+ </div>
1351
1573
  </div>
1352
- <div class="sect3">
1353
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_opensolaris" data-comment-topic="opensolaris-1e0dynj">2.2.2. OpenSolaris</h4>
1354
- <div class="paragraph"><p>J Aaron Farr has written a <a href="http://cubiclemuses.com/cm/articles/2009/04/09/rails-passenger-open-solaris-ec2/">guide</a>
1355
- about setting up Ruby on Rails and Phusion Passenger on OpenSolaris and EC2.</p></div>
1574
+ <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>
1575
+ <div class="paragraph"><p>Once you’ve done that, you can proceed with installing Phusion Passenger by running:</p></div>
1576
+ <div class="listingblock">
1577
+ <div class="content monospaced">
1578
+ <pre>sudo apt-get install libapache2-mod-passenger</pre>
1579
+ </div>
1580
+ </div>
1581
+ <div class="paragraph"><p>or, for the Nginx version:</p></div>
1582
+ <div class="listingblock">
1583
+ <div class="content monospaced">
1584
+ <pre>sudo apt-get install nginx-brightbox</pre>
1585
+ </div>
1356
1586
  </div>
1587
+ <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>
1357
1588
  </div>
1358
1589
  <div class="sect2">
1359
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_upgrading_or_downgrading_phusion_passenger" data-comment-topic="upgrading-or-downgrading-phusion-passenger-1dl8km6">2.3. Upgrading or downgrading Phusion Passenger</h3>
1360
- <div class="paragraph"><p>Upgrading or downgrading Phusion Passenger for Apache involves several steps.</p></div>
1361
- <div class="olist arabic"><ol class="arabic">
1362
- <li>
1363
- <p>
1364
- First, you have to obtain and install the files associated with the version that you want to upgrade or downgrade to. You can do this in three ways: by using <a href="#upgrade_or_downgrade_with_rubygems">RubyGems</a>, by downloading a <a href="#upgrade_or_downgrade_with_tarball">tarball</a>, or by installing a <a href="#upgrade_or_downgrade_with_linux_packages">native Linux package</a>. If you installed a native Linux package, then skip to the last step. If not, read on.
1365
- </p>
1366
- </li>
1367
- <li>
1368
- <p>
1369
- Then you have to recompile the Phusion Passenger Apache module by invoking
1370
- </p>
1590
+ <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-1y5ie8b" 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>
1591
+ <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>
1592
+ <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>
1593
+ <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>
1594
+ <div class="paragraph"><p>Fedora Core 15:</p></div>
1371
1595
  <div class="listingblock">
1372
1596
  <div class="content monospaced">
1373
- <pre># If you used RubyGems
1374
- sudo passenger-install-apache2-module
1375
-
1376
- # If you used the tarball
1377
- sudo /path-to-passenger/bin/passenger-install-apache2-module</pre>
1597
+ <pre>yum install http://passenger.stealthymonkeys.com/fedora/15/passenger-release.noarch.rpm</pre>
1378
1598
  </div>
1379
1599
  </div>
1380
- </li>
1381
- <li>
1382
- <p>
1383
- Finally, <span class="monospaced">passenger-install-apache2-module</span> will tell you to copy &amp; paste some settings in the configuration file. Something that looks along the lines of:
1384
- </p>
1600
+ <div class="paragraph"><p>Fedora Core 14:</p></div>
1385
1601
  <div class="listingblock">
1386
1602
  <div class="content monospaced">
1387
- <pre>LoadModule passenger_module ...
1388
- PassengerRoot ...
1389
- PassengerRuby ...</pre>
1603
+ <pre>yum install http://passenger.stealthymonkeys.com/fedora/14/passenger-release.noarch.rpm</pre>
1390
1604
  </div>
1391
1605
  </div>
1392
- <div class="paragraph"><p>Because you already had Phusion Passenger installed, you already had similar settings
1393
- in your Apache configuration file, just with different values. <strong>Replace</strong> the old settings with
1394
- the new ones that the installer outputs. It is important that the old settings are removed,
1395
- otherwise Phusion Passenger may malfunction.
1396
- 4. Restart Apache. You’re now done.</p></div>
1397
- </li>
1398
- </ol></div>
1399
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="upgrade_or_downgrade_with_rubygems" class="float" data-comment-topic="obtaining-phusion-passenger-files-with-rubygems-8fz7a8">Obtaining Phusion Passenger files with RubyGems</h4>
1400
- <div class="paragraph">
1401
- <div class="title">Open source</div>
1402
- <p>You can obtain the files associated with the latest <em>open source</em> Phusion Passenger release by invoking the following command:</p>
1606
+ <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>
1607
+ <div class="listingblock">
1608
+ <div class="content monospaced">
1609
+ <pre>rpm -Uvh http://passenger.stealthymonkeys.com/rhel/5/passenger-release.noarch.rpm</pre>
1610
+ </div>
1403
1611
  </div>
1612
+ <div class="paragraph"><p>RHEL 6 / CentOS 6 / ScientificLinux 6:</p></div>
1404
1613
  <div class="listingblock">
1405
1614
  <div class="content monospaced">
1406
- <pre>sudo gem install passenger</pre>
1615
+ <pre>yum install http://passenger.stealthymonkeys.com/rhel/6/passenger-release.noarch.rpm</pre>
1407
1616
  </div>
1408
1617
  </div>
1409
- <div class="paragraph"><p>You can also obtain a specific version by specifying the <span class="monospaced">-v</span> argument, like this:</p></div>
1618
+ <span class="anchor_helper" id="_step_2_use_yum"></span><h4 class="float" data-anchor="_step_2_use_yum">Step 2: Use YUM</h4>
1619
+ <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>
1620
+ <div class="paragraph"><p>Phusion Passenger for Apache:</p></div>
1410
1621
  <div class="listingblock">
1411
1622
  <div class="content monospaced">
1412
- <pre>sudo gem install passenger -v 3.0.0</pre>
1623
+ <pre>yum install nginx-passenger</pre>
1413
1624
  </div>
1414
1625
  </div>
1415
- <div class="paragraph">
1416
- <div class="title">Enterprise</div>
1417
- <p>If you’re using <a href="https://www.phusionpassenger.com/enterprise">Phusion Passenger Enterprise</a> then you 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. Download the gem file for the version you want (<span class="monospaced">passenger-enterprise-server-x.x.x.gem</span>) and install it with:</p>
1626
+ <div class="paragraph"><p>Phusion Passenger for Nginx:</p></div>
1627
+ <div class="listingblock">
1628
+ <div class="content monospaced">
1629
+ <pre>yum install mod_passenger</pre>
1630
+ </div>
1418
1631
  </div>
1632
+ <div class="paragraph"><p>Phusion Passenger Standalone:</p></div>
1419
1633
  <div class="listingblock">
1420
1634
  <div class="content monospaced">
1421
- <pre>sudo gem install passenger-enterprise-server-x.x.x.gem</pre>
1635
+ <pre>yum install passenger-standalone</pre>
1422
1636
  </div>
1423
1637
  </div>
1424
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="upgrade_or_downgrade_with_tarball" class="float" data-comment-topic="obtaining-phusion-passenger-files-through-a-tarball-evcm0j">Obtaining Phusion Passenger files through a tarball</h4>
1425
- <div class="paragraph"><p>You can obtain the files associated with the latest <em>open source</em> Phusion Passenger release by downloading the tarball linked from <a href="https://www.phusionpassenger.com/download">the Phusion Passenger download page</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>
1426
- <div class="paragraph"><p>If you’re using <a href="https://www.phusionpassenger.com/enterprise">Phusion Passenger Enterprise</a> then you should obtain the tarball 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. Download the tarball for the version you want (<span class="monospaced">passenger-enterprise-server-x.x.x.tar.gz</span>).</p></div>
1427
- <div class="paragraph"><p>Once you’ve obtained the tarball, extract it somewhere:</p></div>
1428
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="upgrade_or_downgrade_with_linux_packages" class="float" data-comment-topic="upgrading-with-native-linux-packages-jievu8">Upgrading with native Linux packages</h4>
1429
- <div class="paragraph"><p>When using native Linux packages, it is only possible to upgrade, not downgrade. Native Linux packages are only available for the open source Phusion Passenger, not for Phusion Passenger Enterprise.</p></div>
1430
- <div class="paragraph"><p>Native Linux packages are contributed by third parties. Although they update pretty quickly, they lag behind gem and tarball releases, perhaps by a few days. Please learn more about native Linux packages <a href="https://www.phusionpassenger.com/native_packages">at the Phusion Passenger website</a>.</p></div>
1638
+ <span class="anchor_helper" id="_building_your_own_packages"></span><h4 class="float" data-anchor="_building_your_own_packages">Building your own packages</h4>
1639
+ <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>
1640
+ </div>
1641
+ <div class="sect2">
1642
+ <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-b17h8g" data-anchor="_upgrading_from_open_source_to_enterprise">2.5. Upgrading from open source to Enterprise</h3>
1643
+ <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>
1644
+ <div class="paragraph"><p>Customers who have bought Phusion Passenger Enterprise can upgrade their open source installation to Enterprise as follows:</p></div>
1645
+ <div class="olist arabic"><ol class="arabic">
1646
+ <li>
1647
+ <p>
1648
+ <a href="#uninstalling">Uninstall the open source Phusion Passenger</a>.
1649
+ </p>
1650
+ </li>
1651
+ <li>
1652
+ <p>
1653
+ 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>).
1654
+ </p>
1655
+ </li>
1656
+ </ol></div>
1657
+ <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>
1658
+ </div>
1659
+ <div class="sect2">
1660
+ <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-1arnxii" data-anchor="_non_interactive_automatic_headless_installs_or_upgrades">2.6. Non-interactive, automatic, headless installs or upgrades</h3>
1661
+ <div class="paragraph"><p>By default, the installer (<span class="monospaced">passenger-install-apache2-module</span>) is interactive. If you want to automate installation then you can do so by passing <span class="monospaced">--auto</span> to the installer. See also <span class="monospaced">passenger-install-apache2-module --help</span> for more options.</p></div>
1431
1662
  </div>
1432
1663
  <div class="sect2">
1433
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_unloading_disabling_phusion_passenger_from_apache_without_uninstalling_it" data-comment-topic="unloading-disabling-phusion-passenger-from-apache-without-uninstalling-it-s1axnx">2.4. Unloading (disabling) Phusion Passenger from Apache without uninstalling it</h3>
1434
- <div class="paragraph"><p>You can temporarily unload (disable) Phusion Passenger from Apache, without
1435
- uninstalling the Phusion Passenger files, so that Apache behaves as if Phusion
1436
- Passenger was never installed in the first place. This might be useful to you if,
1437
- for example, you seem to be experiencing a problem caused by Phusion Passenger,
1438
- but you want to make sure whether that’s actually the case, without having
1664
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="locating_apache_conf"></span><h3 data-comment-topic="locating-the-apache-configuration-file-1fterqv" data-anchor="locating_apache_conf">2.7. Locating the Apache configuration file</h3>
1665
+ <div class="paragraph"><p>On most systems, the Apache configuration file is located in either <em>/etc/apache2/httpd.conf</em> or <em>/etc/apache2/apache2.conf</em>.</p></div>
1666
+ <div class="paragraph"><p>Not so on OS X Server &gt;= 10.8 Mountain Lion with Web Services. If you do not use Web Services then the configuration file <strong>is</strong> in <em>/etc</em>, but if you do use Web Services then the configuration file is in <em>/Library/Server/Web/Config/apache2/httpd_server_app.conf</em>.</p></div>
1667
+ </div>
1668
+ <div class="sect2">
1669
+ <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="unloading-disabling-phusion-passenger-from-apache-without-uninstalling-it-s1axnx" data-anchor="_disabling_without_uninstalling">2.8. Disabling without uninstalling</h3>
1670
+ <div class="paragraph"><p>You can temporarily unload (disable) Phusion Passenger from the web server, without
1671
+ uninstalling the Phusion Passenger files, so that the web server behaves as if Phusion
1672
+ Passenger was never installed in the first place. This might be useful to you if -
1673
+ for example - you seem to be experiencing a problem caused by Phusion Passenger,
1674
+ but you want to make sure whether that’s actually the case without having
1439
1675
  to through the hassle of uninstalling Phusion Passenger completely. When disabled,
1440
1676
  Phusion Passenger will not occupy any memory or CPU or otherwise interfere with
1441
- Apache.</p></div>
1442
- <div class="paragraph"><p>To unload Phusion Passenger from Apache, edit your Apache configuration file(s)
1677
+ the web server.</p></div>
1678
+ <div class="paragraph"><p>To unload Phusion Passenger from the web server, edit your Apache configuration file(s)
1443
1679
  and comment out:</p></div>
1444
1680
  <div class="ulist"><ul>
1445
1681
  <li>
@@ -1449,7 +1685,7 @@ all Phusion Passenger configuration directives.
1449
1685
  </li>
1450
1686
  <li>
1451
1687
  <p>
1452
- the <em>LoadModule passenger_module</em> directive.
1688
+ the <span class="monospaced">LoadModule passenger_module</span> directive.
1453
1689
  </p>
1454
1690
  </li>
1455
1691
  </ul></div>
@@ -1493,39 +1729,56 @@ NameVirtualHosts *:80
1493
1729
  &lt;/VirtualHost&gt;</pre>
1494
1730
  </div>
1495
1731
  </div>
1496
- <div class="paragraph"><p>After you’ve done this, save the file and restart Apache.</p></div>
1732
+ <div class="paragraph"><p>After you’ve done this, save the configuration file and restart the web server.</p></div>
1497
1733
  </div>
1498
1734
  <div class="sect2">
1499
- <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-1qb4ssq">2.5. Uninstalling Phusion Passenger</h3>
1735
+ <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-1qb4ssq" data-anchor="uninstalling">2.9. Uninstalling</h3>
1500
1736
  <div class="paragraph"><p>To uninstall Phusion Passenger, please first remove all Phusion Passenger
1501
- configuration directives from your Apache configuration file(s). After you’ve
1737
+ configuration directives from your web server configuration file(s). After you’ve
1502
1738
  done this, you need to remove the Phusion Passenger files.</p></div>
1503
1739
  <div class="ulist"><ul>
1504
1740
  <li>
1505
1741
  <p>
1506
- If you installed Phusion Passenger via a gem, then type <span class="monospaced">gem uninstall passenger</span>.
1507
- You might have to run this as root.
1742
+ 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>).
1743
+ You <a href="#is_ruby_home_or_system_wide_installed">might have to run this as root</a>.
1508
1744
  </p>
1509
1745
  </li>
1510
1746
  <li>
1511
1747
  <p>
1512
1748
  If you installed Phusion Passenger via a source tarball, then remove the directory
1513
1749
  in which you placed the extracted Phusion Passenger files. This directory is the
1514
- same as the one pointed to the by <em>PassengerRoot</em> configuration directive.
1750
+ same as the one pointed to the by <span class="monospaced">PassengerRoot</span>/<span class="monospaced">passenger_root</span> configuration directive.
1515
1751
  </p>
1516
1752
  </li>
1517
1753
  <li>
1518
1754
  <p>
1519
- If you installed Phusion Passenger via a Debian package, then remove type
1520
- <span class="monospaced">sudo apt-get remove libapache2-mod-passenger</span>.
1755
+ If you installed Phusion Passenger through APT or YUM, then use them to uninstall Phusion Passenger.
1521
1756
  </p>
1522
1757
  </li>
1523
1758
  </ul></div>
1524
1759
  </div>
1760
+ <div class="sect2">
1761
+ <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-1n0gkwh" data-anchor="moving_phusion_passenger">2.10. Moving to a different directory</h3>
1762
+ <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>
1763
+ <div class="paragraph"><p>First, move the directory to whereever you like:</p></div>
1764
+ <div class="listingblock">
1765
+ <div class="content monospaced">
1766
+ <pre>mv /opt/passenger/passenger-4.0.0 /usr/local/passenger-4.0.0</pre>
1767
+ </div>
1768
+ </div>
1769
+ <div class="paragraph"><p>Next you must tell your web server that Phusion Passenger has moved.
1770
+ Open your <a href="#locating_apache_conf">Apache configuration file</a> and set the <em>PassengerRoot</em> directive to the new location:</p></div>
1771
+ <div class="listingblock">
1772
+ <div class="content monospaced">
1773
+ <pre>PassengerRoot /usr/local/passenger-4.0.0</pre>
1774
+ </div>
1775
+ </div>
1776
+ <div class="paragraph"><p>Restart your web server to finalize the change.</p></div>
1777
+ </div>
1525
1778
  </div>
1526
1779
  </div>
1527
1780
  <div class="sect1">
1528
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h2 id="_deploying_a_ruby_on_rails_1_x_or_2_x_but_not_rails_gt_3_x_application" data-comment-topic="deploying-a-ruby-on-rails-1-x-or-2-x-but-not-rails-3-x-application-9r92hi">3. Deploying a Ruby on Rails 1.x or 2.x (but NOT Rails &gt;= 3.x) application</h2>
1781
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_deploying_a_ruby_on_rails_1_x_or_2_x_but_not_rails_gt_3_x_application"></span><h2 data-comment-topic="deploying-a-ruby-on-rails-1-x-or-2-x-but-not-rails-3-x-application-9r92hi" data-anchor="_deploying_a_ruby_on_rails_1_x_or_2_x_but_not_rails_gt_3_x_application">3. Deploying a Ruby on Rails 1.x or 2.x (but NOT Rails &gt;= 3.x) application</h2>
1529
1782
  <div class="sectionbody">
1530
1783
  <div class="paragraph"><p>Suppose you have a Ruby on Rails application in <em>/webapps/mycook</em>, and you own
1531
1784
  the domain <em>www.mycook.com</em>. You can either deploy your application to the
@@ -1543,7 +1796,7 @@ are run, is “production”. You can change this by changing the
1543
1796
  </tr></table>
1544
1797
  </div>
1545
1798
  <div class="sect2">
1546
- <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-zzo4v7">3.1. Deploying to a virtual host’s root</h3>
1799
+ <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-ab4zj6" data-anchor="_deploying_to_a_virtual_host_8217_s_root">3.1. Deploying to a virtual host’s root</h3>
1547
1800
  <div class="paragraph"><p>Add a virtual host entry to your Apache configuration file. Make sure that the
1548
1801
  following conditions are met:</p></div>
1549
1802
  <div class="ulist"><ul>
@@ -1599,7 +1852,7 @@ all parent folders. That is, /webapps/mycook and /webapps must also be readable
1599
1852
  <div class="paragraph"><p>Then restart Apache. The application has now been deployed.</p></div>
1600
1853
  </div>
1601
1854
  <div class="sect2">
1602
- <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-zekba6">3.2. Deploying to a sub URI</h3>
1855
+ <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-13rfygg" data-anchor="deploying_rails_to_sub_uri">3.2. Deploying to a sub URI</h3>
1603
1856
  <div class="paragraph"><p>Suppose that you already have a virtual host:</p></div>
1604
1857
  <div class="listingblock">
1605
1858
  <div class="content monospaced">
@@ -1688,7 +1941,7 @@ for more information.</td>
1688
1941
  </div>
1689
1942
  </div>
1690
1943
  <div class="sect2">
1691
- <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--m5zqc6">3.3. Redeploying (restarting the Ruby on Rails application)</h3>
1944
+ <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--m5zqc6" data-anchor="_redeploying_restarting_the_ruby_on_rails_application">3.3. Redeploying (restarting the Ruby on Rails application)</h3>
1692
1945
  <div class="paragraph"><p>Deploying a new version of a Ruby on Rails application is as simple as
1693
1946
  re-uploading the application files, and restarting the application.</p></div>
1694
1947
  <div class="paragraph"><p>There are two ways to restart the application:</p></div>
@@ -1719,20 +1972,20 @@ of this file has changed in order to determine whether the application should
1719
1972
  be restarted.</p></div>
1720
1973
  </div>
1721
1974
  <div class="sect2">
1722
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_migrations" data-comment-topic="migrations-15238b4">3.4. Migrations</h3>
1975
+ <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-15238b4" data-anchor="_migrations">3.4. Migrations</h3>
1723
1976
  <div class="paragraph"><p>Phusion Passenger is not related to Ruby on Rails migrations in any way. To
1724
1977
  run migrations on your deployment server, please login to your deployment
1725
1978
  server (e.g. with <em>ssh</em>) and type <span class="monospaced">rake db:migrate RAILS_ENV=production</span> in
1726
1979
  a shell console, just like one would normally run migrations.</p></div>
1727
1980
  </div>
1728
1981
  <div class="sect2">
1729
- <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-1o4cbyq">3.5. Capistrano integration</h3>
1982
+ <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-1o4cbyq" data-anchor="_capistrano_integration">3.5. Capistrano integration</h3>
1730
1983
  <div class="paragraph"><p>See <a href="#capistrano">Capistrano recipe</a>.</p></div>
1731
1984
  </div>
1732
1985
  </div>
1733
1986
  </div>
1734
1987
  <div class="sect1">
1735
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h2 id="_deploying_a_rack_based_ruby_application_including_rails_gt_3" data-comment-topic="deploying-a-rack-based-ruby-application-including-rails-3--hcs66f">4. Deploying a Rack-based Ruby application (including Rails &gt;= 3)</h2>
1988
+ <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_based_ruby_application_including_rails_gt_3"></span><h2 data-comment-topic="deploying-a-rack-based-ruby-application-including-rails-3--hcs66f" data-anchor="_deploying_a_rack_based_ruby_application_including_rails_gt_3">4. Deploying a Rack-based Ruby application (including Rails &gt;= 3)</h2>
1736
1989
  <div class="sectionbody">
1737
1990
  <div class="paragraph"><p>Phusion Passenger supports arbitrary Ruby web applications that follow the
1738
1991
  <a href="http://rack.rubyforge.org/">Rack</a> interface.</p></div>
@@ -1785,7 +2038,7 @@ are run, is “production”. You can change this by changing the
1785
2038
  </tr></table>
1786
2039
  </div>
1787
2040
  <div class="sect2">
1788
- <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-axp5z5">4.1. Tutorial/example: writing and deploying a Hello World Rack application</h3>
2041
+ <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-axp5z5" 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>
1789
2042
  <div class="paragraph"><p>First we create a Phusion Passenger-compliant Rack directory structure:</p></div>
1790
2043
  <div class="listingblock">
1791
2044
  <div class="content monospaced">
@@ -1825,7 +2078,7 @@ the Apache configuration file:</p></div>
1825
2078
  under the URL <em>http://www.rackexample.com/</em>.</p></div>
1826
2079
  </div>
1827
2080
  <div class="sect2">
1828
- <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-ab4zj6">4.2. Deploying to a virtual host’s root</h3>
2081
+ <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-u9bfax" data-anchor="_deploying_to_a_virtual_host_8217_s_root_2">4.2. Deploying to a virtual host’s root</h3>
1829
2082
  <div class="paragraph"><p>Add a virtual host entry to your Apache configuration file. Make sure that the
1830
2083
  following conditions are met:</p></div>
1831
2084
  <div class="ulist"><ul>
@@ -1881,7 +2134,7 @@ all parent folders. That is, /webapps/rackapp and /webapps must also be readable
1881
2134
  <div class="paragraph"><p>Then restart Apache. The application has now been deployed.</p></div>
1882
2135
  </div>
1883
2136
  <div class="sect2">
1884
- <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-13rfygg">4.3. Deploying to a sub URI</h3>
2137
+ <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-zekba6" data-anchor="deploying_rack_to_sub_uri">4.3. Deploying to a sub URI</h3>
1885
2138
  <div class="paragraph"><p>Suppose that you already have a virtual host:</p></div>
1886
2139
  <div class="listingblock">
1887
2140
  <div class="content monospaced">
@@ -1958,7 +2211,7 @@ MultiViews is disabled for this folder.
1958
2211
  </div>
1959
2212
  </div>
1960
2213
  <div class="sect2">
1961
- <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--18m41m1">4.4. Redeploying (restarting the Rack application)</h3>
2214
+ <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--18m41m1" data-anchor="_redeploying_restarting_the_rack_application">4.4. Redeploying (restarting the Rack application)</h3>
1962
2215
  <div class="paragraph"><p>Deploying a new version of a Rack application is as simple as
1963
2216
  re-uploading the application files, and restarting the application.</p></div>
1964
2217
  <div class="paragraph"><p>There are two ways to restart the application:</p></div>
@@ -1985,10 +2238,10 @@ command line:</p></div>
1985
2238
  </div>
1986
2239
  </div>
1987
2240
  <div class="sect2">
1988
- <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-ndsqc2">4.5. Rackup specifications for various web frameworks</h3>
2241
+ <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-ndsqc2" data-anchor="_rackup_specifications_for_various_web_frameworks">4.5. Rackup specifications for various web frameworks</h3>
1989
2242
  <div class="paragraph"><p>This subsection shows example <em>config.ru</em> files for various web frameworks.</p></div>
1990
2243
  <div class="sect3">
1991
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_camping" data-comment-topic="camping-1kxexk0">4.5.1. Camping</h4>
2244
+ <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-1kxexk0" data-anchor="_camping">4.5.1. Camping</h4>
1992
2245
  <div class="listingblock">
1993
2246
  <div class="content monospaced">
1994
2247
  <pre>require 'rubygems'
@@ -2007,7 +2260,7 @@ run Rack::Adapter::Camping.new(Blog)</pre>
2007
2260
  <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>
2008
2261
  </div>
2009
2262
  <div class="sect3">
2010
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_halcyon" data-comment-topic="halcyon-1ghnpmz">4.5.2. Halcyon</h4>
2263
+ <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-1ghnpmz" data-anchor="_halcyon">4.5.2. Halcyon</h4>
2011
2264
  <div class="listingblock">
2012
2265
  <div class="content monospaced">
2013
2266
  <pre>require 'rubygems'
@@ -2019,7 +2272,7 @@ run Halcyon::Runner.new</pre>
2019
2272
  </div>
2020
2273
  </div>
2021
2274
  <div class="sect3">
2022
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_mack" data-comment-topic="mack-miht6b">4.5.3. Mack</h4>
2275
+ <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-miht6b" data-anchor="_mack">4.5.3. Mack</h4>
2023
2276
  <div class="listingblock">
2024
2277
  <div class="content monospaced">
2025
2278
  <pre>ENV["MACK_ENV"] = ENV["RACK_ENV"]
@@ -2031,7 +2284,7 @@ run Mack::Utils::Server.build_app</pre>
2031
2284
  </div>
2032
2285
  </div>
2033
2286
  <div class="sect3">
2034
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_merb" data-comment-topic="merb-iyj7qy">4.5.4. Merb</h4>
2287
+ <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-iyj7qy" data-anchor="_merb">4.5.4. Merb</h4>
2035
2288
  <div class="listingblock">
2036
2289
  <div class="content monospaced">
2037
2290
  <pre>require 'rubygems'
@@ -2050,7 +2303,7 @@ run Merb::Rack::Application.new</pre>
2050
2303
  </div>
2051
2304
  </div>
2052
2305
  <div class="sect3">
2053
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_ramaze" data-comment-topic="ramaze-boddtj">4.5.5. Ramaze</h4>
2306
+ <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-boddtj" data-anchor="_ramaze">4.5.5. Ramaze</h4>
2054
2307
  <div class="listingblock">
2055
2308
  <div class="content monospaced">
2056
2309
  <pre>require "rubygems"
@@ -2063,7 +2316,7 @@ run Ramaze::Adapter::Base</pre>
2063
2316
  </div>
2064
2317
  </div>
2065
2318
  <div class="sect3">
2066
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_sinatra" data-comment-topic="sinatra-1hubto4">4.5.6. Sinatra</h4>
2319
+ <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-1hubto4" data-anchor="_sinatra">4.5.6. Sinatra</h4>
2067
2320
  <div class="listingblock">
2068
2321
  <div class="content monospaced">
2069
2322
  <pre>require 'rubygems'
@@ -2078,7 +2331,7 @@ run Sinatra::Application</pre>
2078
2331
  </div>
2079
2332
  </div>
2080
2333
  <div class="sect1">
2081
- <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-7aygdl">5. Deploying a WSGI (Python) application</h2>
2334
+ <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-7aygdl" data-anchor="_deploying_a_wsgi_python_application">5. Deploying a WSGI (Python) application</h2>
2082
2335
  <div class="sectionbody">
2083
2336
  <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>
2084
2337
  <div class="ulist"><ul>
@@ -2111,7 +2364,7 @@ run Sinatra::Application</pre>
2111
2364
  </div>
2112
2365
  </div>
2113
2366
  <div class="sect2">
2114
- <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-9ziqy8">5.1. Tutorial/example: writing and deploying a Hello World WSGI application</h3>
2367
+ <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-9ziqy8" 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>
2115
2368
  <div class="paragraph"><p>First we create a Phusion Passenger-compliant WSGI directory structure:</p></div>
2116
2369
  <div class="listingblock">
2117
2370
  <div class="content monospaced">
@@ -2128,7 +2381,7 @@ $ some_awesome_editor passenger_wsgi.py
2128
2381
  ...type in some source code...
2129
2382
  $ cat passenger_wsgi.py
2130
2383
  def application(environ, start_response):
2131
- start_response(200, [('Content-Type', 'text/plain')])
2384
+ start_response('200 OK', [('Content-Type', 'text/plain')])
2132
2385
  return ["hello world!\n"]</pre>
2133
2386
  </div>
2134
2387
  </div>
@@ -2150,7 +2403,7 @@ the Apache configuration file:</p></div>
2150
2403
  under the URL <em>http://www.wsgiexample.com/</em>.</p></div>
2151
2404
  </div>
2152
2405
  <div class="sect2">
2153
- <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-u9bfax">5.2. Deploying to a virtual host’s root</h3>
2406
+ <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-zzo4v7" data-anchor="_deploying_to_a_virtual_host_8217_s_root_3">5.2. Deploying to a virtual host’s root</h3>
2154
2407
  <div class="paragraph"><p>Add a virtual host entry to your Apache configuration file. Make sure that the
2155
2408
  following conditions are met:</p></div>
2156
2409
  <div class="ulist"><ul>
@@ -2206,7 +2459,7 @@ all parent folders. That is, /webapps/wsgiapp and /webapps must also be readable
2206
2459
  <div class="paragraph"><p>Then restart Apache. The application has now been deployed.</p></div>
2207
2460
  </div>
2208
2461
  <div class="sect2">
2209
- <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--na7pmf">5.3. Redeploying (restarting the WSGI application)</h3>
2462
+ <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--na7pmf" data-anchor="_redeploying_restarting_the_wsgi_application">5.3. Redeploying (restarting the WSGI application)</h3>
2210
2463
  <div class="paragraph"><p>Deploying a new version of a WSGI application is as simple as
2211
2464
  re-uploading the application files, and restarting the application.</p></div>
2212
2465
  <div class="paragraph"><p>There are two ways to restart the application:</p></div>
@@ -2235,14 +2488,14 @@ command line:</p></div>
2235
2488
  </div>
2236
2489
  </div>
2237
2490
  <div class="sect1">
2238
- <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-11oztoe">6. Configuring Phusion Passenger</h2>
2491
+ <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-11oztoe" data-anchor="_configuring_phusion_passenger">6. Configuring Phusion Passenger</h2>
2239
2492
  <div class="sectionbody">
2240
2493
  <div class="paragraph"><p>After installation, Phusion Passenger does not need any further configurations.
2241
2494
  Nevertheless, the system administrator may be interested in changing
2242
2495
  Phusion Passenger’s behavior. Phusion Passenger’s Apache module supports the
2243
2496
  following configuration options:</p></div>
2244
2497
  <div class="sect2">
2245
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_passengerroot_lt_directory_gt" data-comment-topic="passengerroot-directory--sere8l">6.1. PassengerRoot &lt;directory&gt;</h3>
2498
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passengerroot_lt_directory_gt"></span><h3 data-comment-topic="passengerroot-directory--sere8l" data-anchor="_passengerroot_lt_directory_gt">6.1. PassengerRoot &lt;directory&gt;</h3>
2246
2499
  <div class="paragraph"><p>The location to the Phusion Passenger root directory. This configuration option
2247
2500
  is essential to Phusion Passenger, and allows Phusion Passenger to locate its own
2248
2501
  data files. The correct value is given by the installer.</p></div>
@@ -2252,7 +2505,7 @@ this option as well. Please read
2252
2505
  <div class="paragraph"><p>This required option may only occur once, in the global server configuration.</p></div>
2253
2506
  </div>
2254
2507
  <div class="sect2">
2255
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="PassengerRuby" data-comment-topic="passengerruby-filename--1r3fv73">6.2. PassengerRuby &lt;filename&gt;</h3>
2508
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerRuby"></span><h3 data-comment-topic="passengerruby-filename--1r3fv73" data-anchor="PassengerRuby">6.2. PassengerRuby &lt;filename&gt;</h3>
2256
2509
  <div class="paragraph"><p>This option allows one to specify the Ruby interpreter to use.</p></div>
2257
2510
  <div class="paragraph"><p>This option may occur in the following places:</p></div>
2258
2511
  <div class="ulist"><ul>
@@ -2280,7 +2533,7 @@ In <em>.htaccess</em>, if <span class="monospaced">AllowOverride Options</span>
2280
2533
  <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>
2281
2534
  </div>
2282
2535
  <div class="sect2">
2283
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="PassengerAppRoot" data-comment-topic="passengerapproot-path-to-root--uf24yd">6.3. PassengerAppRoot &lt;path/to/root&gt;</h3>
2536
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerAppRoot"></span><h3 data-comment-topic="passengerapproot-path-to-root--uf24yd" data-anchor="PassengerAppRoot">6.3. PassengerAppRoot &lt;path/to/root&gt;</h3>
2284
2537
  <div class="paragraph"><p>By default, Phusion Passenger assumes that the application’s root directory
2285
2538
  is the parent directory of the <em>public</em> directory. This option allows one to
2286
2539
  specify the application’s root independently from the DocumentRoot, which
@@ -2322,7 +2575,7 @@ In <em>.htaccess</em>, if <span class="monospaced">AllowOverride Options</span>
2322
2575
  </div>
2323
2576
  </div>
2324
2577
  <div class="sect2">
2325
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="PassengerSpawnMethod" data-comment-topic="passengerspawnmethod-string--sodg2y">6.4. PassengerSpawnMethod &lt;string&gt;</h3>
2578
+ <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="passengerspawnmethod-string--sodg2y" data-anchor="PassengerSpawnMethod">6.4. PassengerSpawnMethod &lt;string&gt;</h3>
2326
2579
  <div class="admonitionblock">
2327
2580
  <table><tr>
2328
2581
  <td class="icon">
@@ -2405,7 +2658,7 @@ In a virtual host configuration block.
2405
2658
  <div class="paragraph"><p>In each place, it may be specified at most once. The default value is <em>smart-lv2</em>.</p></div>
2406
2659
  </div>
2407
2660
  <div class="sect2">
2408
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_passengerenabled_lt_on_off_gt" data-comment-topic="passengerenabled-on-off--74rzth">6.5. PassengerEnabled &lt;on|off&gt;</h3>
2661
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passengerenabled_lt_on_off_gt"></span><h3 data-comment-topic="passengerenabled-on-off--74rzth" data-anchor="_passengerenabled_lt_on_off_gt">6.5. PassengerEnabled &lt;on|off&gt;</h3>
2409
2662
  <div class="paragraph"><p>You can set this option to <em>off</em> to completely disable Phusion Passenger for
2410
2663
  a certain location. This is useful if, for example, you want to integrate a PHP
2411
2664
  application into the same virtual host as a Rails application.</p></div>
@@ -2452,7 +2705,7 @@ In <em>.htaccess</em>.
2452
2705
  <div class="paragraph"><p>In each place, it may be specified at most once. The default value is <em>on</em>.</p></div>
2453
2706
  </div>
2454
2707
  <div class="sect2">
2455
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="PassengerTempDir" data-comment-topic="passengertempdir-directory--68h2ng">6.6. PassengerTempDir &lt;directory&gt;</h3>
2708
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerTempDir"></span><h3 data-comment-topic="passengertempdir-directory--68h2ng" data-anchor="PassengerTempDir">6.6. PassengerTempDir &lt;directory&gt;</h3>
2456
2709
  <div class="paragraph"><p>Specifies the directory that Phusion Passenger should use for storing temporary
2457
2710
  files. This includes things such as Unix socket files, buffered file uploads
2458
2711
  (see also <a href="#PassengerUploadBufferDir">PassengerUploadBufferDir</a>), etc.</p></div>
@@ -2481,7 +2734,7 @@ sudo -E passenger-status
2481
2734
  </div>
2482
2735
  </div>
2483
2736
  <div class="sect2">
2484
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="PassengerUploadBufferDir" data-comment-topic="passengeruploadbufferdir-directory--kdr8at">6.7. PassengerUploadBufferDir &lt;directory&gt;</h3>
2737
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerUploadBufferDir"></span><h3 data-comment-topic="passengeruploadbufferdir-directory--kdr8at" data-anchor="PassengerUploadBufferDir">6.7. PassengerUploadBufferDir &lt;directory&gt;</h3>
2485
2738
  <div class="paragraph"><p>Phusion Passenger buffers large file uploads to disk in order prevent slow file
2486
2739
  uploads from blocking web applications. By default, a subdirectory in the
2487
2740
  system’s temporary files directory (or a subdirectory in the directory specified
@@ -2524,7 +2777,7 @@ In <em>.htaccess</em>, if <span class="monospaced">AllowOverrides Options</span>
2524
2777
  <div class="paragraph"><p>In each place, it may be specified at most once.</p></div>
2525
2778
  </div>
2526
2779
  <div class="sect2">
2527
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_passengerrestartdir_lt_directory_gt" data-comment-topic="passengerrestartdir-directory--1fmhmv0">6.8. PassengerRestartDir &lt;directory&gt;</h3>
2780
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passengerrestartdir_lt_directory_gt"></span><h3 data-comment-topic="passengerrestartdir-directory--1fmhmv0" data-anchor="_passengerrestartdir_lt_directory_gt">6.8. PassengerRestartDir &lt;directory&gt;</h3>
2528
2781
  <div class="paragraph"><p>As described in the deployment chapters of this document, Phusion Passenger
2529
2782
  checks the file <em>tmp/restart.txt</em> in the applications'
2530
2783
  <a href="#application_root">root directory</a> for restarting applications. Sometimes it
@@ -2598,17 +2851,35 @@ allow the attacker to cause a Denial-of-Service.</p>
2598
2851
  directory that’s readable by Apache, but only writable by administrators.</p></div>
2599
2852
  </div>
2600
2853
  <div class="sect2">
2601
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="PassengerBufferResponse" data-comment-topic="passengerbufferresponse-on-off--1y7ilka">6.9. PassengerBufferResponse &lt;on|off&gt;</h3>
2602
- <div class="paragraph"><p>When turned on, application-generated responses are buffered in memory. By buffering
2603
- responses, protection is provided against slow HTTP clients that can not read your
2604
- response immediately.</p></div>
2605
- <div class="paragraph"><p>For example, consider an HTTP client that’s on a dial-up modem link, and your
2606
- application process generates a 2 MB response. If response buffering is turned
2607
- off then your application process will be blocked until the entire 2 MB has been
2854
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerBufferResponse"></span><h3 data-comment-topic="passengerbufferresponse-on-off--1y7ilka" data-anchor="PassengerBufferResponse">6.9. PassengerBufferResponse &lt;on|off&gt;</h3>
2855
+ <div class="paragraph"><p>When turned on, application-generated responses are buffered by Apache. Buffering will
2856
+ happen in memory.</p></div>
2857
+ <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 Apache, there are in fact two response buffering systems active:</p></div>
2858
+ <div class="olist arabic"><ol class="arabic">
2859
+ <li>
2860
+ <p>
2861
+ The Apache response buffering system. <span class="monospaced">PassengerBufferResponse</span> turns this on or off.
2862
+ </p>
2863
+ </li>
2864
+ <li>
2865
+ <p>
2866
+ 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">PassengerBufferResponse</span>.
2867
+ </p>
2868
+ </li>
2869
+ </ol></div>
2870
+ <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">PassengerBufferResponse</span> is off by default, and you never should have to turn it on.</p></div>
2871
+ <div class="paragraph"><p>If for whatever reason you want to turn Apache-level response buffering on, you can do so with this option.</p></div>
2872
+ <div class="paragraph"><p>Apache’s response buffering works differently from Phusion Passenger’s. Apache’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">PassengerBufferResponse</span>, you may interfere with applications that want to stream responses to the client.
2873
+ Apache’s version also buffers to memory only, making it problematic for large responses. Phusion Passenger’s version buffers to disk when the response exceeds a certain threshold.</p></div>
2874
+ <div class="paragraph"><p>How does response buffering - whether it’s done by Apache or by Phusion Passenger - exactly protect against slow clients?
2875
+ Consider an HTTP client that’s on a dial-up modem link, and your
2876
+ application process generates a 2 MB response. If the response is buffered
2877
+ then your application process will be blocked until the entire 2 MB has been
2608
2878
  sent out to the HTTP client. This disallows your application process to do any useful
2609
- work in the mean time. By enabling response buffering, Phusion Passenger will read
2610
- the application response as quickly as possible and will take care of slow clients.</p></div>
2611
- <div class="paragraph"><p>However, keep in mind that enabling this option will make streaming responses
2879
+ work in the mean time. By buffering responses, Phusion Passenger or Apache will read
2880
+ the application response as quickly as possible and will take care of forwarding the data
2881
+ to slow clients.</p></div>
2882
+ <div class="paragraph"><p>So keep in mind that enabling <span class="monospaced">passenger_buffering_response</span> will make streaming responses
2612
2883
  impossible. Consider for example this piece of Rails code:</p></div>
2613
2884
  <div class="listingblock">
2614
2885
  <div class="content monospaced">
@@ -2638,11 +2909,11 @@ app = lambda do |env|
2638
2909
  end</pre>
2639
2910
  </div>
2640
2911
  </div>
2641
- <div class="paragraph"><p>When response buffering is turned on, Phusion Passenger will wait until
2912
+ <div class="paragraph"><p>When <span class="monospaced">PassengerBufferResponse</span> is turned on, Apache will wait until
2642
2913
  the application is done sending the entire response before forwarding it
2643
2914
  to the client. The client will not receive anything for 10 seconds,
2644
2915
  after which it receives the entire response at once.
2645
- When response buffering is turned off, it works as expected: the client
2916
+ When <span class="monospaced">PassengerBufferResponse</span> is turned off, it works as expected: the client
2646
2917
  receives an "entry X" message every second for 10 seconds.</p></div>
2647
2918
  <div class="paragraph"><p>This option may occur in the following places:</p></div>
2648
2919
  <div class="ulist"><ul>
@@ -2667,7 +2938,7 @@ In <em>.htaccess</em>.
2667
2938
  </p>
2668
2939
  </li>
2669
2940
  </ul></div>
2670
- <div class="paragraph"><p>In each place, it may be specified at most once. The default value is <em>on</em>.</p></div>
2941
+ <div class="paragraph"><p>In each place, it may be specified at most once. The default value is <em>off</em>.</p></div>
2671
2942
  <div class="admonitionblock">
2672
2943
  <table><tr>
2673
2944
  <td class="icon">
@@ -2681,7 +2952,7 @@ if responses can be huge. Because entire responses are buffered in memory when t
2681
2952
  </div>
2682
2953
  </div>
2683
2954
  <div class="sect2">
2684
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="PassengerRollingRestarts" data-comment-topic="passengerrollingrestarts">6.10. PassengerRollingRestarts &lt;on|off&gt;</h3>
2955
+ <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="passengerrollingrestarts" data-anchor="PassengerRollingRestarts">6.10. PassengerRollingRestarts &lt;on|off&gt;</h3>
2685
2956
  <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>
2686
2957
  <div class="paragraph"><p>Enables or disables support for rolling restarts. Normally when you
2687
2958
  restart an application (by touching restart.txt), Phusion Passenger would
@@ -2754,7 +3025,7 @@ In <em>.htaccess</em>, if <span class="monospaced">AllowOverride Options</span>
2754
3025
  <div class="paragraph"><p>In each place, it may be specified at most once. The default value is <em>off</em>.</p></div>
2755
3026
  </div>
2756
3027
  <div class="sect2">
2757
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_passengerresistdeploymenterrors_lt_on_off_gt" data-comment-topic="passengerresistdeploymenterrors">6.11. PassengerResistDeploymentErrors &lt;on|off&gt;</h3>
3028
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passengerresistdeploymenterrors_lt_on_off_gt"></span><h3 data-comment-topic="passengerresistdeploymenterrors" data-anchor="_passengerresistdeploymenterrors_lt_on_off_gt">6.11. PassengerResistDeploymentErrors &lt;on|off&gt;</h3>
2758
3029
  <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>
2759
3030
  <div class="paragraph"><p>Enables or disables resistance against deployment errors.</p></div>
2760
3031
  <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>
@@ -2804,15 +3075,15 @@ In <em>.htaccess</em>, if <span class="monospaced">AllowOverride Options</span>
2804
3075
  <div class="paragraph"><p>In each place, it may be specified at most once. The default value is <em>off</em>.</p></div>
2805
3076
  </div>
2806
3077
  <div class="sect2">
2807
- <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-1pb75ho">6.12. Security options</h3>
3078
+ <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-1pb75ho" data-anchor="_security_options">6.12. Security options</h3>
2808
3079
  <div class="sect3">
2809
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="PassengerUserSwitching" data-comment-topic="passengeruserswitching">6.12.1. PassengerUserSwitching &lt;on|off&gt;</h4>
3080
+ <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="passengeruserswitching" data-anchor="PassengerUserSwitching">6.12.1. PassengerUserSwitching &lt;on|off&gt;</h4>
2810
3081
  <div class="paragraph"><p>Whether to enable <a href="#user_switching">user switching support</a>.</p></div>
2811
3082
  <div class="paragraph"><p>This option may only occur once, in the global server configuration.
2812
3083
  The default value is <em>on</em>.</p></div>
2813
3084
  </div>
2814
3085
  <div class="sect3">
2815
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passengeruser_lt_username_gt" data-comment-topic="passengeruser">6.12.2. PassengerUser &lt;username&gt;</h4>
3086
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passengeruser_lt_username_gt"></span><h4 data-comment-topic="passengeruser" data-anchor="_passengeruser_lt_username_gt">6.12.2. PassengerUser &lt;username&gt;</h4>
2816
3087
  <div class="paragraph"><p>If <a href="#user_switching">user switching support</a> is enabled, then Phusion Passenger will
2817
3088
  by default run the web application as the owner of the file <em>config/environment.rb</em>
2818
3089
  (for Rails apps) or <em>config.ru</em> (for Rack apps). This option allows you to override
@@ -2839,7 +3110,7 @@ In a <span class="monospaced">&lt;Directory&gt;</span> or <span class="monospace
2839
3110
  <div class="paragraph"><p>In each place, it may be specified at most once.</p></div>
2840
3111
  </div>
2841
3112
  <div class="sect3">
2842
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passengergroup_lt_group_name_gt" data-comment-topic="passengergroup">6.12.3. PassengerGroup &lt;group name&gt;</h4>
3113
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passengergroup_lt_group_name_gt"></span><h4 data-comment-topic="passengergroup" data-anchor="_passengergroup_lt_group_name_gt">6.12.3. PassengerGroup &lt;group name&gt;</h4>
2843
3114
  <div class="paragraph"><p>If <a href="#user_switching">user switching support</a> is enabled, then Phusion Passenger will
2844
3115
  by default run the web application as the primary group of the owner of the file
2845
3116
  <em>config/environment.rb</em> (for Rails apps) or <em>config.ru</em> (for Rack apps). This option
@@ -2868,7 +3139,7 @@ In a <span class="monospaced">&lt;Directory&gt;</span> or <span class="monospace
2868
3139
  <div class="paragraph"><p>In each place, it may be specified at most once.</p></div>
2869
3140
  </div>
2870
3141
  <div class="sect3">
2871
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="PassengerDefaultUser" data-comment-topic="passengerdefaultuser">6.12.4. PassengerDefaultUser &lt;username&gt;</h4>
3142
+ <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="passengerdefaultuser" data-anchor="PassengerDefaultUser">6.12.4. PassengerDefaultUser &lt;username&gt;</h4>
2872
3143
  <div class="paragraph"><p>Phusion Passenger enables <a href="#user_switching">user switching support</a> by default.
2873
3144
  This configuration option allows one to specify the user that applications must
2874
3145
  run as, if user switching fails or is disabled.</p></div>
@@ -2876,7 +3147,7 @@ run as, if user switching fails or is disabled.</p></div>
2876
3147
  The default value is <em>nobody</em>.</p></div>
2877
3148
  </div>
2878
3149
  <div class="sect3">
2879
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="PassengerDefaultGroup" data-comment-topic="passengerdefaultgroup">6.12.5. PassengerDefaultGroup &lt;group name&gt;</h4>
3150
+ <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="passengerdefaultgroup" data-anchor="PassengerDefaultGroup">6.12.5. PassengerDefaultGroup &lt;group name&gt;</h4>
2880
3151
  <div class="paragraph"><p>Phusion Passenger enables <a href="#user_switching">user switching support</a> by default.
2881
3152
  This configuration option allows one to specify the group that applications must
2882
3153
  run as, if user switching fails or is disabled.</p></div>
@@ -2885,7 +3156,7 @@ The default value is the primary group of the user specifified by
2885
3156
  <a href="#PassengerDefaultUser">PassengerDefaultUser</a>.</p></div>
2886
3157
  </div>
2887
3158
  <div class="sect3">
2888
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passengerfriendlyerrorpages_lt_on_off_gt" data-comment-topic="passengerfriendlyerrorpages">6.12.6. PassengerFriendlyErrorPages &lt;on|off&gt;</h4>
3159
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passengerfriendlyerrorpages_lt_on_off_gt"></span><h4 data-comment-topic="passengerfriendlyerrorpages" data-anchor="_passengerfriendlyerrorpages_lt_on_off_gt">6.12.6. PassengerFriendlyErrorPages &lt;on|off&gt;</h4>
2889
3160
  <div class="paragraph"><p>Phusion Passenger can display friendly error pages whenever an application fails
2890
3161
  to start. This friendly error page presents the startup error message, some
2891
3162
  suggestions for solving the problem, and a backtrace. This feature is very useful
@@ -2920,9 +3191,9 @@ In <em>.htaccess</em>, if <span class="monospaced">AllowOverride Options</span>
2920
3191
  </div>
2921
3192
  </div>
2922
3193
  <div class="sect2">
2923
- <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-zu2f7u">6.13. Resource control and optimization options</h3>
3194
+ <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-zu2f7u" data-anchor="_resource_control_and_optimization_options">6.13. Resource control and optimization options</h3>
2924
3195
  <div class="sect3">
2925
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passengermaxpoolsize_lt_integer_gt" data-comment-topic="passengermaxpoolsize-integer--am64q8">6.13.1. PassengerMaxPoolSize &lt;integer&gt;</h4>
3196
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passengermaxpoolsize_lt_integer_gt"></span><h4 data-comment-topic="passengermaxpoolsize-integer--am64q8" data-anchor="_passengermaxpoolsize_lt_integer_gt">6.13.1. PassengerMaxPoolSize &lt;integer&gt;</h4>
2926
3197
  <div class="paragraph"><p>The maximum number of <a href="#application_process">application processes</a> that may
2927
3198
  simultaneously exist. A larger number results in higher memory usage,
2928
3199
  but improved ability to handle concurrent HTTP clients.</p></div>
@@ -2949,7 +3220,7 @@ by about 33%, and it’s not hard to install.</td>
2949
3220
  </div>
2950
3221
  </div>
2951
3222
  <div class="sect3">
2952
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="PassengerMinInstances" data-comment-topic="passengermininstances-integer--wegq6b">6.13.2. PassengerMinInstances &lt;integer&gt;</h4>
3223
+ <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="passengermininstances-integer--wegq6b" data-anchor="PassengerMinInstances">6.13.2. PassengerMinInstances &lt;integer&gt;</h4>
2953
3224
  <div class="paragraph"><p>This specifies the minimum number of application processes that should exist for a
2954
3225
  given application. You should set this option to a
2955
3226
  non-zero value if you want to avoid potentially long startup times after a website
@@ -3020,7 +3291,7 @@ In <em>.htaccess</em>, if <span class="monospaced">AllowOverride Limits</span> i
3020
3291
  <div class="paragraph"><p>In each place, it may be specified at most once. The default value is <em>1</em>.</p></div>
3021
3292
  </div>
3022
3293
  <div class="sect3">
3023
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passengermaxinstances_lt_integer_gt" data-comment-topic="passengermaxinstances">6.13.3. PassengerMaxInstances &lt;integer&gt;</h4>
3294
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passengermaxinstances_lt_integer_gt"></span><h4 data-comment-topic="passengermaxinstances" data-anchor="_passengermaxinstances_lt_integer_gt">6.13.3. PassengerMaxInstances &lt;integer&gt;</h4>
3024
3295
  <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>
3025
3296
  <div class="paragraph"><p>The maximum number of application processes that may simultaneously exist
3026
3297
  for an application. This helps to make sure that a single application
@@ -3061,7 +3332,7 @@ on the other hand will be free to spawn up to 10 processes if it gets a lot of t
3061
3332
  </div>
3062
3333
  </div>
3063
3334
  <div class="sect3">
3064
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passengermaxinstancesperapp_lt_integer_gt" data-comment-topic="passengermaxinstancesperapp">6.13.4. PassengerMaxInstancesPerApp &lt;integer&gt;</h4>
3335
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passengermaxinstancesperapp_lt_integer_gt"></span><h4 data-comment-topic="passengermaxinstancesperapp" data-anchor="_passengermaxinstancesperapp_lt_integer_gt">6.13.4. PassengerMaxInstancesPerApp &lt;integer&gt;</h4>
3065
3336
  <div class="paragraph"><p>The maximum number of application processes that may simultaneously exist
3066
3337
  for a single application. This helps to make sure that a single application
3067
3338
  will not occupy all available slots in the application pool.</p></div>
@@ -3114,7 +3385,7 @@ the pool unequally, according to each web application’s relative importance.</
3114
3385
  </div>
3115
3386
  </div>
3116
3387
  <div class="sect3">
3117
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="PassengerPoolIdleTime" data-comment-topic="passengerpoolidletime-integer--a3gunq">6.13.5. PassengerPoolIdleTime &lt;integer&gt;</h4>
3388
+ <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="passengerpoolidletime-integer--a3gunq" data-anchor="PassengerPoolIdleTime">6.13.5. PassengerPoolIdleTime &lt;integer&gt;</h4>
3118
3389
  <div class="paragraph"><p>The maximum number of seconds that an application process may be idle. That is,
3119
3390
  if an application process hasn’t received any traffic after the given number of
3120
3391
  seconds, then it will be shutdown in order to conserve memory.</p></div>
@@ -3136,7 +3407,7 @@ applications, each which must be available at all times.</p></div>
3136
3407
  The default value is <em>300</em>.</p></div>
3137
3408
  </div>
3138
3409
  <div class="sect3">
3139
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passengermaxpreloaderidletime_lt_integer_gt" data-comment-topic="railsappspawneridletime-integer--1awgog1">6.13.6. PassengerMaxPreloaderIdleTime &lt;integer&gt;</h4>
3410
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passengermaxpreloaderidletime_lt_integer_gt"></span><h4 data-comment-topic="railsappspawneridletime-integer--1awgog1" data-anchor="_passengermaxpreloaderidletime_lt_integer_gt">6.13.6. PassengerMaxPreloaderIdleTime &lt;integer&gt;</h4>
3140
3411
  <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
3141
3412
  Phusion Passenger do. That is, it will automatically shutdown if it hasn’t done
3142
3413
  anything for a given period.</p></div>
@@ -3165,7 +3436,77 @@ In a virtual host configuration block.
3165
3436
  <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>
3166
3437
  </div>
3167
3438
  <div class="sect3">
3168
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="PassengerMaxRequests" data-comment-topic="passengermaxrequests">6.13.7. PassengerMaxRequests &lt;integer&gt;</h4>
3439
+ <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="passengerconcurrencymodel-process-thread--1eipofj" data-anchor="PassengerConcurrencyModel">6.13.7. PassengerConcurrencyModel &lt;process|thread&gt;</h4>
3440
+ <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>
3441
+ <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>
3442
+ <div class="ulist"><ul>
3443
+ <li>
3444
+ <p>
3445
+ <em>process</em> - single-threaded, multi-processed I/O concurrency. Each application process only has a single thread and can only handle 1 request at a time. This is the concurrency model that Ruby applications traditionally used. It has excellent compatiblity (can work with applications that are not designed to be thread-safe) but is unsuitable workloads in which the application has to wait for a lot of external I/O (e.g. HTTP API calls), and uses more memory because each process has a large memory overhead.
3446
+ </p>
3447
+ </li>
3448
+ <li>
3449
+ <p>
3450
+ <em>thread</em> - multi-threaded, multi-processed I/O concurrency. Each application process has multiple threads (customizable via <a href="#PassengerThreadCount">PassengerThreadCount</a>). This model provides much better I/O concurrency and uses less memory because threads share memory with each other within the same process. However, using this model may cause compatibility problems if the application is not designed to be thread-safe.
3451
+ </p>
3452
+ </li>
3453
+ </ul></div>
3454
+ <div class="paragraph"><p>This option may occur in the following places:</p></div>
3455
+ <div class="ulist"><ul>
3456
+ <li>
3457
+ <p>
3458
+ In the global server configuration.
3459
+ </p>
3460
+ </li>
3461
+ <li>
3462
+ <p>
3463
+ In a virtual host configuration block.
3464
+ </p>
3465
+ </li>
3466
+ <li>
3467
+ <p>
3468
+ In a <span class="monospaced">&lt;Directory&gt;</span> or <span class="monospaced">&lt;Location&gt;</span> block.
3469
+ </p>
3470
+ </li>
3471
+ <li>
3472
+ <p>
3473
+ In <em>.htaccess</em>.
3474
+ </p>
3475
+ </li>
3476
+ </ul></div>
3477
+ <div class="paragraph"><p>In each place, it may be specified at most once. The default value is <em>process</em>.</p></div>
3478
+ </div>
3479
+ <div class="sect3">
3480
+ <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="passengerthreadcount-number--10jl64a" data-anchor="PassengerThreadCount">6.13.8. PassengerThreadCount &lt;number&gt;</h4>
3481
+ <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>
3482
+ <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">PassengerConcurrencyModel</a> is <em>thread</em>.</p></div>
3483
+ <div class="paragraph"><p>This option may occur in the following places:</p></div>
3484
+ <div class="ulist"><ul>
3485
+ <li>
3486
+ <p>
3487
+ In the global server configuration.
3488
+ </p>
3489
+ </li>
3490
+ <li>
3491
+ <p>
3492
+ In a virtual host configuration block.
3493
+ </p>
3494
+ </li>
3495
+ <li>
3496
+ <p>
3497
+ In a <span class="monospaced">&lt;Directory&gt;</span> or <span class="monospaced">&lt;Location&gt;</span> block.
3498
+ </p>
3499
+ </li>
3500
+ <li>
3501
+ <p>
3502
+ In <em>.htaccess</em>.
3503
+ </p>
3504
+ </li>
3505
+ </ul></div>
3506
+ <div class="paragraph"><p>In each place, it may be specified at most once. The default value is <em>1</em>.</p></div>
3507
+ </div>
3508
+ <div class="sect3">
3509
+ <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="passengermaxrequests-integer--17qkw9n" data-anchor="PassengerMaxRequests">6.13.9. PassengerMaxRequests &lt;integer&gt;</h4>
3169
3510
  <div class="paragraph"><p>The maximum number of requests an application process will process. After
3170
3511
  serving that many requests, the application process will be shut down and
3171
3512
  Phusion Passenger will restart it. A value of 0 means that there is no maximum:
@@ -3213,7 +3554,7 @@ measure to avoid memory leaks.</p></div>
3213
3554
  </div>
3214
3555
  </div>
3215
3556
  <div class="sect3">
3216
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="PassengerMaxRequestTime" data-comment-topic="passengermaxrequesttime-seconds--aj9w45">6.13.8. PassengerMaxRequestTime &lt;seconds&gt;</h4>
3557
+ <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="passengermaxrequesttime-seconds--127v1i2" data-anchor="PassengerMaxRequestTime">6.13.10. PassengerMaxRequestTime &lt;seconds&gt;</h4>
3217
3558
  <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>
3218
3559
  <div class="paragraph"><p>The maximum amount of time, in seconds, that an application process may take
3219
3560
  to process a request. If the request takes longer than this amount of time,
@@ -3282,7 +3623,7 @@ measure to avoid freezing applications.</p></div>
3282
3623
  </div>
3283
3624
  </div>
3284
3625
  <div class="sect3">
3285
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="PassengerMemoryLimit" data-comment-topic="passengermemorylimit">6.13.9. PassengerMemoryLimit &lt;integer&gt;</h4>
3626
+ <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="passengermemorylimit-integer--18irza1" data-anchor="PassengerMemoryLimit">6.13.11. PassengerMemoryLimit &lt;integer&gt;</h4>
3286
3627
  <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>
3287
3628
  <div class="paragraph"><p>The maximum amount of memory that an application process may use, in megabytes.
3288
3629
  Once an application process has surpassed its memory limit, it will process
@@ -3368,7 +3709,7 @@ measure to avoid memory leaks.</p></div>
3368
3709
  </div>
3369
3710
  </div>
3370
3711
  <div class="sect3">
3371
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passengerstatthrottlerate_lt_integer_gt" data-comment-topic="passengerstatthrottlerate">6.13.10. PassengerStatThrottleRate &lt;integer&gt;</h4>
3712
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passengerstatthrottlerate_lt_integer_gt"></span><h4 data-comment-topic="passengerstatthrottlerate-integer--1dcfda3" data-anchor="_passengerstatthrottlerate_lt_integer_gt">6.13.12. PassengerStatThrottleRate &lt;integer&gt;</h4>
3372
3713
  <div class="paragraph"><p>By default, Phusion Passenger performs several filesystem checks (or, in
3373
3714
  programmers jargon, <em>stat() calls</em>) each time a request is processed:</p></div>
3374
3715
  <div class="ulist"><ul>
@@ -3420,7 +3761,7 @@ In <em>.htaccess</em>, if <span class="monospaced">AllowOverride Limits</span> i
3420
3761
  <div class="paragraph"><p>In each place, it may be specified at most once. The default value is <em>0</em>.</p></div>
3421
3762
  </div>
3422
3763
  <div class="sect3">
3423
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="PassengerPreStart" data-comment-topic="passengerprestart-url--1dvgku9">6.13.11. PassengerPreStart &lt;url&gt;</h4>
3764
+ <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="passengerprestart-url--1utb57k" data-anchor="PassengerPreStart">6.13.13. PassengerPreStart &lt;url&gt;</h4>
3424
3765
  <div class="paragraph"><p>By default, Phusion Passenger does not start any application processes until said
3425
3766
  web application is first accessed. The result is that the first visitor of said
3426
3767
  web application might experience a small delay as Phusion Passenger is starting
@@ -3658,7 +3999,7 @@ the request ending up at a different web server in the cluster.</p></div>
3658
3999
  </div>
3659
4000
  </div>
3660
4001
  <div class="sect3">
3661
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="PassengerHighPerformance" data-comment-topic="passengerhighperformance-on-off--zgc547">6.13.12. PassengerHighPerformance &lt;on|off&gt;</h4>
4002
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerHighPerformance"></span><h4 data-comment-topic="passengerhighperformance-on-off--nvfa86" data-anchor="PassengerHighPerformance">6.13.14. PassengerHighPerformance &lt;on|off&gt;</h4>
3662
4003
  <div class="paragraph"><p>By default, Phusion Passenger is compatible with mod_rewrite and most other
3663
4004
  Apache modules. However, a lot of effort is required in order to be compatible.
3664
4005
  If you turn <em>PassengerHighPerformance</em> to <em>on</em>, then Phusion Passenger will be
@@ -3742,9 +4083,9 @@ then you can enable high performance mode for a certain URL only. For example:</
3742
4083
  </div>
3743
4084
  </div>
3744
4085
  <div class="sect2">
3745
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_compatibility_options" data-comment-topic="compatibility-options-8jve5a">6.14. Compatibility options</h3>
4086
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_compatibility_options"></span><h3 data-comment-topic="compatibility-options-8jve5a" data-anchor="_compatibility_options">6.14. Compatibility options</h3>
3746
4087
  <div class="sect3">
3747
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="PassengerResolveSymlinksInDocumentRoot" data-comment-topic="passengerresolvesymlinksindocumentroot-on-off--1r0qcp8">6.14.1. PassengerResolveSymlinksInDocumentRoot &lt;on|off&gt;</h4>
4088
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerResolveSymlinksInDocumentRoot"></span><h4 data-comment-topic="passengerresolvesymlinksindocumentroot-on-off--1r0qcp8" data-anchor="PassengerResolveSymlinksInDocumentRoot">6.14.1. PassengerResolveSymlinksInDocumentRoot &lt;on|off&gt;</h4>
3748
4089
  <div class="paragraph"><p>Configures whether Phusion Passenger should resolve symlinks in the document root.
3749
4090
  Please refer to <a href="#application_detection">How Phusion Passenger detects whether a virtual host is a web application</a> for more information.</p></div>
3750
4091
  <div class="paragraph"><p>This option may occur in the following places:</p></div>
@@ -3773,7 +4114,7 @@ In <em>.htaccess</em>, if <span class="monospaced">AllowOverride Options</span>
3773
4114
  <div class="paragraph"><p>In each place, it may be specified at most once. It is off by default.</p></div>
3774
4115
  </div>
3775
4116
  <div class="sect3">
3776
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passengerallowencodedslashes_lt_on_off_gt" data-comment-topic="passengerallowencodedslashes-on-off--1y3s1ww">6.14.2. PassengerAllowEncodedSlashes &lt;on|off&gt;</h4>
4117
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passengerallowencodedslashes_lt_on_off_gt"></span><h4 data-comment-topic="passengerallowencodedslashes-on-off--1y3s1ww" data-anchor="_passengerallowencodedslashes_lt_on_off_gt">6.14.2. PassengerAllowEncodedSlashes &lt;on|off&gt;</h4>
3777
4118
  <div class="paragraph"><p>By default, Apache doesn’t support URLs with encoded slashes (%2f), e.g. URLs like
3778
4119
  this: <span class="monospaced">/users/fujikura%2fyuu</span>. If you access such an URL then Apache will return a
3779
4120
  404 Not Found error. This can be solved by turning on PassengerAllowEncodedSlashes
@@ -3842,9 +4183,9 @@ displaying maintenance.html will work fine even for URLs starting with "/users".
3842
4183
  </div>
3843
4184
  </div>
3844
4185
  <div class="sect2">
3845
- <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-el2cuc">6.15. Logging and debugging options</h3>
4186
+ <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-el2cuc" data-anchor="_logging_and_debugging_options">6.15. Logging and debugging options</h3>
3846
4187
  <div class="sect3">
3847
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passengerloglevel_lt_integer_gt" data-comment-topic="passengerloglevel-integer--1v67p8l">6.15.1. PassengerLogLevel &lt;integer&gt;</h4>
4188
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passengerloglevel_lt_integer_gt"></span><h4 data-comment-topic="passengerloglevel-integer--s3kbil" data-anchor="_passengerloglevel_lt_integer_gt">6.15.1. PassengerLogLevel &lt;integer&gt;</h4>
3848
4189
  <div class="paragraph"><p>This option allows one to specify how much information Phusion Passenger should
3849
4190
  write to the Apache error log file. A higher log level value means that more
3850
4191
  information will be logged.</p></div>
@@ -3877,14 +4218,14 @@ information will be logged.</p></div>
3877
4218
  The default is <em>0</em>.</p></div>
3878
4219
  </div>
3879
4220
  <div class="sect3">
3880
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passengerdebuglogfile_lt_filename_gt" data-comment-topic="passengerdebuglogfile-filename--1tfy4z9">6.15.2. PassengerDebugLogFile &lt;filename&gt;</h4>
4221
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passengerdebuglogfile_lt_filename_gt"></span><h4 data-comment-topic="passengerdebuglogfile-filename--1wjm2j1" data-anchor="_passengerdebuglogfile_lt_filename_gt">6.15.2. PassengerDebugLogFile &lt;filename&gt;</h4>
3881
4222
  <div class="paragraph"><p>By default Phusion Passenger debugging and error messages are written to the global
3882
4223
  web server error log. This option allows one to specify the file that debugging and
3883
4224
  error messages should be written to instead.</p></div>
3884
4225
  <div class="paragraph"><p>This option may only occur once, in the global server configuration.</p></div>
3885
4226
  </div>
3886
4227
  <div class="sect3">
3887
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_passengerdebugger_lt_on_off_gt" data-comment-topic="passengerdebugger-on-off--1qk9j40">6.15.3. PassengerDebugger &lt;on|off&gt;</h4>
4228
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passengerdebugger_lt_on_off_gt"></span><h4 data-comment-topic="passengerdebugger-on-off--19you7e" data-anchor="_passengerdebugger_lt_on_off_gt">6.15.3. PassengerDebugger &lt;on|off&gt;</h4>
3888
4229
  <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>
3889
4230
  <div class="paragraph"><p>Turns support for application debugging on or off. In case of Ruby applications,
3890
4231
  turning this option on will cause them to load the <span class="monospaced">ruby-debug</span> gem (when on Ruby 1.8)
@@ -3924,11 +4265,11 @@ In <em>.htaccess</em>, if <span class="monospaced">AllowOverride Options</span>
3924
4265
  </div>
3925
4266
  </div>
3926
4267
  <div class="sect2">
3927
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_classic_ruby_on_rails_8656_2_x_specific_options" data-comment-topic="ruby-on-rails-specific-options-1t10wfu">6.16. Classic Ruby on Rails (⇐ 2.x)-specific options</h3>
4268
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_classic_ruby_on_rails_8656_2_x_specific_options"></span><h3 data-comment-topic="ruby-on-rails-specific-options-1t10wfu" data-anchor="_classic_ruby_on_rails_8656_2_x_specific_options">6.16. Classic Ruby on Rails (⇐ 2.x)-specific options</h3>
3928
4269
  <div class="paragraph"><p>These options only have effect on classic Ruby on Rails 1.x and 2.x applications.
3929
4270
  Ruby on Rails &gt;= 3.x applications are considered Rack applications.</p></div>
3930
4271
  <div class="sect3">
3931
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_railsautodetect_lt_on_off_gt" data-comment-topic="railsautodetect-on-off--tpigsd">6.16.1. RailsAutoDetect &lt;on|off&gt;</h4>
4272
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_railsautodetect_lt_on_off_gt"></span><h4 data-comment-topic="railsautodetect-on-off--tpigsd" data-anchor="_railsautodetect_lt_on_off_gt">6.16.1. RailsAutoDetect &lt;on|off&gt;</h4>
3932
4273
  <div class="paragraph"><p>Whether Phusion Passenger should automatically detect whether a virtual host’s
3933
4274
  document root is a Ruby on Rails application. The default is <em>on</em>.</p></div>
3934
4275
  <div class="paragraph"><p>This option may occur in the global server configuration or in a virtual host
@@ -3960,7 +4301,7 @@ application by using the <a href="#RailsBaseURI">RailsBaseURI</a> configuration
3960
4301
  </div>
3961
4302
  </div>
3962
4303
  <div class="sect3">
3963
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="RailsBaseURI" data-comment-topic="railsbaseuri-uri--1txrw3k">6.16.2. RailsBaseURI &lt;uri&gt;</h4>
4304
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="RailsBaseURI"></span><h4 data-comment-topic="railsbaseuri-uri--1txrw3k" data-anchor="RailsBaseURI">6.16.2. RailsBaseURI &lt;uri&gt;</h4>
3964
4305
  <div class="paragraph"><p>Used to specify that the given URI is a Rails application. See
3965
4306
  <a href="#deploying_rails_to_sub_uri">Deploying Rails to a sub URI</a> for an example.</p></div>
3966
4307
  <div class="paragraph"><p>It is allowed to specify this option multiple times. Do this to deploy multiple
@@ -3990,7 +4331,7 @@ In <em>.htaccess</em>, if <span class="monospaced">AllowOverride Options</span>
3990
4331
  </ul></div>
3991
4332
  </div>
3992
4333
  <div class="sect3">
3993
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="rails_env" data-comment-topic="railsenv-string--1b0xxvu">6.16.3. RailsEnv &lt;string&gt;</h4>
4334
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="rails_env"></span><h4 data-comment-topic="railsenv-string--1b0xxvu" data-anchor="rails_env">6.16.3. RailsEnv &lt;string&gt;</h4>
3994
4335
  <div class="paragraph"><p>This option allows one to specify the default <span class="monospaced">RAILS_ENV</span> value.</p></div>
3995
4336
  <div class="paragraph"><p>This option may occur in the following places:</p></div>
3996
4337
  <div class="ulist"><ul>
@@ -4019,9 +4360,9 @@ In <em>.htaccess</em>, if <span class="monospaced">AllowOverride Options</span>
4019
4360
  </div>
4020
4361
  </div>
4021
4362
  <div class="sect2">
4022
- <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-wk9qzt">6.17. Rack and Rails &gt;= 3 specific options</h3>
4363
+ <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-wk9qzt" data-anchor="_rack_and_rails_gt_3_specific_options">6.17. Rack and Rails &gt;= 3 specific options</h3>
4023
4364
  <div class="sect3">
4024
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_rackautodetect_lt_on_off_gt" data-comment-topic="rackautodetect-on-off--vl1lxy">6.17.1. RackAutoDetect &lt;on|off&gt;</h4>
4365
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_rackautodetect_lt_on_off_gt"></span><h4 data-comment-topic="rackautodetect-on-off--vl1lxy" data-anchor="_rackautodetect_lt_on_off_gt">6.17.1. RackAutoDetect &lt;on|off&gt;</h4>
4025
4366
  <div class="paragraph"><p>Whether Phusion Passenger should automatically detect whether a virtual host’s
4026
4367
  document root is a Rack application. The default is <em>on</em>.</p></div>
4027
4368
  <div class="paragraph"><p>This option may occur in the global server configuration or in a virtual host
@@ -4053,7 +4394,7 @@ application by using the <a href="#RackBaseURI">RackBaseURI</a> configuration op
4053
4394
  </div>
4054
4395
  </div>
4055
4396
  <div class="sect3">
4056
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="RackBaseURI" data-comment-topic="rackbaseuri-uri--1to24pj">6.17.2. RackBaseURI &lt;uri&gt;</h4>
4397
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="RackBaseURI"></span><h4 data-comment-topic="rackbaseuri-uri--1to24pj" data-anchor="RackBaseURI">6.17.2. RackBaseURI &lt;uri&gt;</h4>
4057
4398
  <div class="paragraph"><p>Used to specify that the given URI is a Rack application. See
4058
4399
  <a href="#deploying_rack_to_sub_uri">Deploying Rack to a sub URI</a> for an example.</p></div>
4059
4400
  <div class="paragraph"><p>It is allowed to specify this option multiple times. Do this to deploy multiple
@@ -4083,7 +4424,7 @@ In <em>.htaccess</em>, if <span class="monospaced">AllowOverride Options</span>
4083
4424
  </ul></div>
4084
4425
  </div>
4085
4426
  <div class="sect3">
4086
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="rack_env" data-comment-topic="rackenv-string--vve9py">6.17.3. RackEnv &lt;string&gt;</h4>
4427
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="rack_env"></span><h4 data-comment-topic="rackenv-string--vve9py" data-anchor="rack_env">6.17.3. RackEnv &lt;string&gt;</h4>
4087
4428
  <div class="paragraph"><p>The given value will be accessible in Rack applications in the <span class="monospaced">RACK_ENV</span>
4088
4429
  environment variable. This allows one to define the environment in which
4089
4430
  Rack applications are run, very similar to <span class="monospaced">RAILS_ENV</span>.</p></div>
@@ -4114,39 +4455,39 @@ In <em>.htaccess</em>, if <span class="monospaced">AllowOverride Options</span>
4114
4455
  </div>
4115
4456
  </div>
4116
4457
  <div class="sect2">
4117
- <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-pm9m57">6.18. Deprecated options</h3>
4458
+ <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-pm9m57" data-anchor="_deprecated_options">6.18. Deprecated options</h3>
4118
4459
  <div class="paragraph"><p>The following options have been deprecated, but are still supported for backwards
4119
4460
  compatibility reasons.</p></div>
4120
4461
  <div class="sect3">
4121
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_railsruby" data-comment-topic="railsruby-ht09ei">6.18.1. RailsRuby</h4>
4462
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_railsruby"></span><h4 data-comment-topic="railsruby-ht09ei" data-anchor="_railsruby">6.18.1. RailsRuby</h4>
4122
4463
  <div class="paragraph"><p>Deprecated in favor of <a href="#PassengerRuby">PassengerRuby</a>.</p></div>
4123
4464
  </div>
4124
4465
  <div class="sect3">
4125
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_railsuserswitching" data-comment-topic="railsuserswitching-1npx8y4">6.18.2. RailsUserSwitching</h4>
4466
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_railsuserswitching"></span><h4 data-comment-topic="railsuserswitching-1npx8y4" data-anchor="_railsuserswitching">6.18.2. RailsUserSwitching</h4>
4126
4467
  <div class="paragraph"><p>Deprecated in favor of <a href="#PassengerUserSwitching">PassengerUserSwitching</a>.</p></div>
4127
4468
  </div>
4128
4469
  <div class="sect3">
4129
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_railsdefaultuser" data-comment-topic="railsdefaultuser-19j7n3m">6.18.3. RailsDefaultUser</h4>
4470
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_railsdefaultuser"></span><h4 data-comment-topic="railsdefaultuser-19j7n3m" data-anchor="_railsdefaultuser">6.18.3. RailsDefaultUser</h4>
4130
4471
  <div class="paragraph"><p>Deprecated in favor of <a href="#PassengerDefaultUser">PassengerDefaultUser</a>.</p></div>
4131
4472
  </div>
4132
4473
  <div class="sect3">
4133
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_railsallowmodrewrite" data-comment-topic="railsallowmodrewrite-1vkziro">6.18.4. RailsAllowModRewrite</h4>
4474
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_railsallowmodrewrite"></span><h4 data-comment-topic="railsallowmodrewrite-1vkziro" data-anchor="_railsallowmodrewrite">6.18.4. RailsAllowModRewrite</h4>
4134
4475
  <div class="paragraph"><p>This option doesn’t do anything anymore in recent versions of Phusion Passenger.</p></div>
4135
4476
  </div>
4136
4477
  <div class="sect3">
4137
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_railsspawnmethod" data-comment-topic="railsspawnmethod-1aljgpa">6.18.5. RailsSpawnMethod</h4>
4478
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_railsspawnmethod"></span><h4 data-comment-topic="railsspawnmethod-1aljgpa" data-anchor="_railsspawnmethod">6.18.5. RailsSpawnMethod</h4>
4138
4479
  <div class="paragraph"><p>Deprecated in favor of <a href="#PassengerSpawnMethod">PassengerSpawnMethod</a>.</p></div>
4139
4480
  </div>
4140
4481
  </div>
4141
4482
  </div>
4142
4483
  </div>
4143
4484
  <div class="sect1">
4144
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h2 id="_troubleshooting" data-comment-topic="troubleshooting-2ihihi">7. Troubleshooting</h2>
4485
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="troubleshooting"></span><h2 data-comment-topic="troubleshooting-2ihihi" data-anchor="troubleshooting">7. Troubleshooting</h2>
4145
4486
  <div class="sectionbody">
4146
4487
  <div class="sect2">
4147
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_operating_system_specific_problems" data-comment-topic="operating-system-specific-problems-327gbk">7.1. Operating system-specific problems</h3>
4488
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_operating_system_specific_problems"></span><h3 data-comment-topic="operating-system-specific-problems-327gbk" data-anchor="_operating_system_specific_problems">7.1. Operating system-specific problems</h3>
4148
4489
  <div class="sect3">
4149
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_macos_x_the_installer_cannot_locate_mamp_8217_s_apache" data-comment-topic="macos-x-the-installer-cannot-locate-mamp-s-apache-or908n">7.1.1. MacOS X: The installer cannot locate MAMP’s Apache</h4>
4490
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_macos_x_the_installer_cannot_locate_mamp_8217_s_apache"></span><h4 data-comment-topic="macos-x-the-installer-cannot-locate-mamp-s-apache-or908n" data-anchor="_macos_x_the_installer_cannot_locate_mamp_8217_s_apache">7.1.1. MacOS X: The installer cannot locate MAMP’s Apache</h4>
4150
4491
  <div class="sidebarblock">
4151
4492
  <div class="content">
4152
4493
  <div class="title">Symptoms</div>
@@ -4167,9 +4508,9 @@ to fix this problem.</p></div>
4167
4508
  </div>
4168
4509
  </div>
4169
4510
  <div class="sect2">
4170
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_problems_during_installation" data-comment-topic="problems-during-installation-q1vlsu">7.2. Problems during installation</h3>
4511
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_problems_during_installation"></span><h3 data-comment-topic="problems-during-installation-q1vlsu" data-anchor="_problems_during_installation">7.2. Problems during installation</h3>
4171
4512
  <div class="sect3">
4172
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="installing_ruby_dev" data-comment-topic="ruby-development-headers-aren-t-installed-1yqrom8">7.2.1. Ruby development headers aren’t installed</h4>
4513
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="installing_ruby_dev"></span><h4 data-comment-topic="ruby-development-headers-aren-t-installed-1yqrom8" data-anchor="installing_ruby_dev">7.2.1. Ruby development headers aren’t installed</h4>
4173
4514
  <div class="sidebarblock">
4174
4515
  <div class="content">
4175
4516
  <div class="title">Symptoms</div>
@@ -4267,7 +4608,7 @@ which Ruby installation you want to use. Please read
4267
4608
  </div>
4268
4609
  </div>
4269
4610
  <div class="sect3">
4270
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_apache_development_headers_aren_8217_t_installed" data-comment-topic="apache-development-headers-aren-t-installed-x2473y">7.2.2. Apache development headers aren’t installed</h4>
4611
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_apache_development_headers_aren_8217_t_installed"></span><h4 data-comment-topic="apache-development-headers-aren-t-installed-x2473y" data-anchor="_apache_development_headers_aren_8217_t_installed">7.2.2. Apache development headers aren’t installed</h4>
4271
4612
  <div class="sidebarblock">
4272
4613
  <div class="content">
4273
4614
  <div class="title">Symptoms</div>
@@ -4358,7 +4699,7 @@ Other operating systems
4358
4699
  </dl></div>
4359
4700
  </div>
4360
4701
  <div class="sect3">
4361
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_apr_development_headers_aren_8217_t_installed" data-comment-topic="apr-development-headers-aren-t-installed-13bk976">7.2.3. APR development headers aren’t installed</h4>
4702
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_apr_development_headers_aren_8217_t_installed"></span><h4 data-comment-topic="apr-development-headers-aren-t-installed-13bk976" data-anchor="_apr_development_headers_aren_8217_t_installed">7.2.3. APR development headers aren’t installed</h4>
4362
4703
  <div class="sidebarblock">
4363
4704
  <div class="content">
4364
4705
  <div class="title">Symptoms</div>
@@ -4444,16 +4785,16 @@ Other operating systems
4444
4785
  </dl></div>
4445
4786
  </div>
4446
4787
  <div class="sect3">
4447
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_phusion_passenger_is_using_the_wrong_apache_during_installation" data-comment-topic="phusion-passenger-is-using-the-wrong-apache-during-installation-82qnt4">7.2.4. Phusion Passenger is using the wrong Apache during installation</h4>
4788
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_phusion_passenger_is_using_the_wrong_apache_during_installation"></span><h4 data-comment-topic="phusion-passenger-is-using-the-wrong-apache-during-installation-82qnt4" data-anchor="_phusion_passenger_is_using_the_wrong_apache_during_installation">7.2.4. Phusion Passenger is using the wrong Apache during installation</h4>
4448
4789
  <div class="paragraph"><p>Please <a href="#specifying_correct_apache_install">Specifying the correct Apache installation</a>, and re-run the Phusion Passenger installer.</p></div>
4449
4790
  </div>
4450
4791
  <div class="sect3">
4451
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_phusion_passenger_is_using_the_wrong_ruby_during_installation" data-comment-topic="phusion-passenger-is-using-the-wrong-ruby-during-installation-1nh3zml">7.2.5. Phusion Passenger is using the wrong Ruby during installation</h4>
4792
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_phusion_passenger_is_using_the_wrong_ruby_during_installation"></span><h4 data-comment-topic="phusion-passenger-is-using-the-wrong-ruby-during-installation-1nh3zml" data-anchor="_phusion_passenger_is_using_the_wrong_ruby_during_installation">7.2.5. Phusion Passenger is using the wrong Ruby during installation</h4>
4452
4793
  <div class="paragraph"><p>Please <a href="#specifying_ruby_installation">Specifying the correct Ruby installation</a>, and re-run the Phusion Passenger installer.</p></div>
4453
4794
  </div>
4454
4795
  </div>
4455
4796
  <div class="sect2">
4456
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_problems_after_installation" data-comment-topic="problems-after-installation-fwd23q">7.3. Problems after installation</h3>
4797
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_problems_after_installation"></span><h3 data-comment-topic="problems-after-installation-fwd23q" data-anchor="_problems_after_installation">7.3. Problems after installation</h3>
4457
4798
  <div class="admonitionblock">
4458
4799
  <table><tr>
4459
4800
  <td class="icon">
@@ -4468,11 +4809,11 @@ inside the Apache error logs. It will tell you what exactly went wrong.</p></div
4468
4809
  </tr></table>
4469
4810
  </div>
4470
4811
  <div class="sect3">
4471
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_my_rails_application_works_on_mongrel_but_not_on_phusion_passenger" data-comment-topic="my-rails-application-works-on-mongrel-but-not-on-phusion-passenger-1f28drx">7.3.1. My Rails application works on Mongrel, but not on Phusion Passenger</h4>
4812
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_my_rails_application_works_on_mongrel_but_not_on_phusion_passenger"></span><h4 data-comment-topic="my-rails-application-works-on-mongrel-but-not-on-phusion-passenger-1f28drx" data-anchor="_my_rails_application_works_on_mongrel_but_not_on_phusion_passenger">7.3.1. My Rails application works on Mongrel, but not on Phusion Passenger</h4>
4472
4813
  <div class="paragraph"><p>Please try setting <a href="#PassengerSpawnMethod">PassengerSpawnMethod</a> to <em>conservative</em>.</p></div>
4473
4814
  </div>
4474
4815
  <div class="sect3">
4475
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_phusion_passenger_has_been_compiled_against_the_wrong_apache_installation" data-comment-topic="phusion-passenger-has-been-compiled-against-the-wrong-apache-installation-n74ce0">7.3.2. Phusion Passenger has been compiled against the wrong Apache installation</h4>
4816
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_phusion_passenger_has_been_compiled_against_the_wrong_apache_installation"></span><h4 data-comment-topic="phusion-passenger-has-been-compiled-against-the-wrong-apache-installation-n74ce0" data-anchor="_phusion_passenger_has_been_compiled_against_the_wrong_apache_installation">7.3.2. Phusion Passenger has been compiled against the wrong Apache installation</h4>
4476
4817
  <div class="sidebarblock">
4477
4818
  <div class="content">
4478
4819
  <div class="title">Symptoms</div>
@@ -4485,11 +4826,11 @@ Apache installations on their system.</p></div>
4485
4826
  <div class="paragraph"><p>To solve this problem, please <a href="#specifying_correct_apache_install">specify the correct Apache installation</a>, and <a href="#install_passenger">reinstall Phusion Passenger</a>.</p></div>
4486
4827
  </div>
4487
4828
  <div class="sect3">
4488
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_i_get_a_403_forbidden_error" data-comment-topic="i-get-a-403-forbidden-error-m0rlay">7.3.3. I get a "403 Forbidden" error</h4>
4829
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_i_get_a_403_forbidden_error"></span><h4 data-comment-topic="i-get-a-403-forbidden-error-m0rlay" data-anchor="_i_get_a_403_forbidden_error">7.3.3. I get a "403 Forbidden" error</h4>
4489
4830
  <div class="paragraph"><p>See next subsection.</p></div>
4490
4831
  </div>
4491
4832
  <div class="sect3">
4492
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_static_assets_such_as_images_and_stylesheets_aren_8217_t_being_displayed" data-comment-topic="static-assets-such-as-images-and-stylesheets-aren-t-being-displayed-uaptpi">7.3.4. Static assets such as images and stylesheets aren’t being displayed</h4>
4833
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_static_assets_such_as_images_and_stylesheets_aren_8217_t_being_displayed"></span><h4 data-comment-topic="static-assets-such-as-images-and-stylesheets-aren-t-being-displayed-uaptpi" data-anchor="_static_assets_such_as_images_and_stylesheets_aren_8217_t_being_displayed">7.3.4. Static assets such as images and stylesheets aren’t being displayed</h4>
4493
4834
  <div class="paragraph"><p>Static assets are accelerated, i.e. they are served directly by Apache and do not
4494
4835
  go through the Rails stack. There are two reasons why Apache doesn’t serve static
4495
4836
  assets correctly:</p></div>
@@ -4522,7 +4863,7 @@ The Apache process doesn’t have permission to access your Rails application’
4522
4863
  </ol></div>
4523
4864
  </div>
4524
4865
  <div class="sect3">
4525
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_the_apache_error_log_says_that_the_spawn_manager_script_does_not_exist_or_that_it_does_not_have_permission_to_execute_it" data-comment-topic="the-apache-error-log-says-that-the-spawn-manager-script-does-not-exist-or-that-it-does-not-have-permission-to-execute-it-1fmoozk">7.3.5. The Apache error log says that the spawn manager script does not exist, or that it does not have permission to execute it</h4>
4866
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_the_apache_error_log_says_that_the_spawn_manager_script_does_not_exist_or_that_it_does_not_have_permission_to_execute_it"></span><h4 data-comment-topic="the-apache-error-log-says-that-the-spawn-manager-script-does-not-exist-or-that-it-does-not-have-permission-to-execute-it-1fmoozk" data-anchor="_the_apache_error_log_says_that_the_spawn_manager_script_does_not_exist_or_that_it_does_not_have_permission_to_execute_it">7.3.5. The Apache error log says that the spawn manager script does not exist, or that it does not have permission to execute it</h4>
4526
4867
  <div class="paragraph"><p>If you are sure that the <em>PassengerRoot</em> configuration option is set correctly,
4527
4868
  then this problem is most likely caused by the fact that you’re running Apache
4528
4869
  with SELinux. On Fedora, CentOS and RedHat Enterprise Linux, Apache is locked
@@ -4564,7 +4905,7 @@ If you’ve installed Phusion Passenger via the source tarball, then run the fol
4564
4905
  <div class="paragraph"><p>Once the permissions are fixed, restart Apache.</p></div>
4565
4906
  </div>
4566
4907
  <div class="sect3">
4567
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_the_rails_application_reports_that_it_8217_s_unable_to_start_because_of_a_permission_error" data-comment-topic="the-rails-application-reports-that-it-s-unable-to-start-because-of-a-permission-error-v53i6s">7.3.6. The Rails application reports that it’s unable to start because of a permission error</h4>
4908
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_the_rails_application_reports_that_it_8217_s_unable_to_start_because_of_a_permission_error"></span><h4 data-comment-topic="the-rails-application-reports-that-it-s-unable-to-start-because-of-a-permission-error-v53i6s" data-anchor="_the_rails_application_reports_that_it_8217_s_unable_to_start_because_of_a_permission_error">7.3.6. The Rails application reports that it’s unable to start because of a permission error</h4>
4568
4909
  <div class="paragraph"><p>Please check whether your Rails application’s folder has the correct
4569
4910
  permissions. By default, Rails applications are started as the owner of the
4570
4911
  file <em>config/environment.rb</em>, except if the file is owned by root. If the
@@ -4574,7 +4915,7 @@ specified).</p></div>
4574
4915
  <div class="paragraph"><p>Please read <a href="#user_switching">User switching (security)</a> for details.</p></div>
4575
4916
  </div>
4576
4917
  <div class="sect3">
4577
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_my_rails_application_8217_s_log_file_is_not_being_written_to" data-comment-topic="my-rails-application-s-log-file-is-not-being-written-to-3i747l">7.3.7. My Rails application’s log file is not being written to</h4>
4918
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_my_rails_application_8217_s_log_file_is_not_being_written_to"></span><h4 data-comment-topic="my-rails-application-s-log-file-is-not-being-written-to-3i747l" data-anchor="_my_rails_application_8217_s_log_file_is_not_being_written_to">7.3.7. My Rails application’s log file is not being written to</h4>
4578
4919
  <div class="paragraph"><p>There are a couple things that you should be aware of:</p></div>
4579
4920
  <div class="ulist"><ul>
4580
4921
  <li>
@@ -4605,7 +4946,7 @@ following command to give your Rails application folder that context:</p></div>
4605
4946
  </div>
4606
4947
  </div>
4607
4948
  <div class="sect3">
4608
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_i_8217_ve_deployed_my_app_on_ssl_but_the_app_thinks_its_not_on_ssl" data-comment-topic="i-ve-deployed-my-app-on-ssl-but-the-app-thinks-its-not-on-ssl-10rvgnr">7.3.8. I’ve deployed my app on SSL, but the app thinks its not on SSL</h4>
4949
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_i_8217_ve_deployed_my_app_on_ssl_but_the_app_thinks_its_not_on_ssl"></span><h4 data-comment-topic="i-ve-deployed-my-app-on-ssl-but-the-app-thinks-its-not-on-ssl-10rvgnr" data-anchor="_i_8217_ve_deployed_my_app_on_ssl_but_the_app_thinks_its_not_on_ssl">7.3.8. I’ve deployed my app on SSL, but the app thinks its not on SSL</h4>
4609
4950
  <div class="paragraph"><p>Rails and many other frameworks infers whether it’s running on SSL through the CGI
4610
4951
  environment variable <span class="monospaced">HTTPS</span>. Apache always sets this variable when on SSL,
4611
4952
  except when SSL is incorrectly configured.</p></div>
@@ -4646,30 +4987,30 @@ the corrected example:</p></div>
4646
4987
  </div>
4647
4988
  </div>
4648
4989
  <div class="sect2">
4649
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="conflicting_apache_modules" data-comment-topic="conflicting-apache-modules-1uwpixk">7.4. Conflicting Apache modules</h3>
4990
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="conflicting_apache_modules"></span><h3 data-comment-topic="conflicting-apache-modules-1uwpixk" data-anchor="conflicting_apache_modules">7.4. Conflicting Apache modules</h3>
4650
4991
  <div class="sect3">
4651
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_mod_userdir" data-comment-topic="mod-userdir-x5e2te">7.4.1. mod_userdir</h4>
4992
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_mod_userdir"></span><h4 data-comment-topic="mod-userdir-x5e2te" data-anchor="_mod_userdir">7.4.1. mod_userdir</h4>
4652
4993
  <div class="paragraph"><p><em>mod_userdir</em> is not compatible with Phusion Passenger at the moment.</p></div>
4653
4994
  </div>
4654
4995
  <div class="sect3">
4655
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_multiviews_mod_negotiation" data-comment-topic="multiviews-mod-negotiation--zchfg0">7.4.2. MultiViews (mod_negotiation)</h4>
4996
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_multiviews_mod_negotiation"></span><h4 data-comment-topic="multiviews-mod-negotiation--zchfg0" data-anchor="_multiviews_mod_negotiation">7.4.2. MultiViews (mod_negotiation)</h4>
4656
4997
  <div class="paragraph"><p>MultiViews is not compatible with Phusion Passenger. You should disable MultiViews
4657
4998
  for all Phusion Passenger hosts.</p></div>
4658
4999
  </div>
4659
5000
  <div class="sect3">
4660
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h4 id="_virtualdocumentroot" data-comment-topic="virtualdocumentroot-14cwd7l">7.4.3. VirtualDocumentRoot</h4>
5001
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_virtualdocumentroot"></span><h4 data-comment-topic="virtualdocumentroot-14cwd7l" data-anchor="_virtualdocumentroot">7.4.3. VirtualDocumentRoot</h4>
4661
5002
  <div class="paragraph"><p>VirtualDocumentRoot is not compatible with Phusion Passenger at the moment.</p></div>
4662
5003
  </div>
4663
5004
  </div>
4664
5005
  </div>
4665
5006
  </div>
4666
5007
  <div class="sect1">
4667
- <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-qvkwzr">8. Analysis and system maintenance</h2>
5008
+ <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-qvkwzr" data-anchor="_analysis_and_system_maintenance">8. Analysis and system maintenance</h2>
4668
5009
  <div class="sectionbody">
4669
5010
  <div class="paragraph"><p>Phusion Passenger provides a set of tools, which are useful for system analysis,
4670
5011
  maintenance and troubleshooting.</p></div>
4671
5012
  <div class="sect2">
4672
- <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-1bkis6i">8.1. Inspecting memory usage</h3>
5013
+ <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-1bkis6i" data-anchor="_inspecting_memory_usage">8.1. Inspecting memory usage</h3>
4673
5014
  <div class="paragraph"><p>Process inspection tools such as <span class="monospaced">ps</span> and <span class="monospaced">top</span> are useful, but they
4674
5015
  <a href="http://groups.google.com/group/phusion-passenger/msg/1fd1c233456d3180">rarely show the correct memory usage</a>.
4675
5016
  The real memory usage is usually lower than what <span class="monospaced">ps</span> and <span class="monospaced">top</span> report.</p></div>
@@ -4722,7 +5063,7 @@ the Resident Set Size is reported instead.</td>
4722
5063
  </div>
4723
5064
  </div>
4724
5065
  <div class="sect2">
4725
- <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-ukekf7">8.2. Inspecting Phusion Passenger’s internal status</h3>
5066
+ <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-ukekf7" data-anchor="_inspecting_phusion_passenger_8217_s_internal_status">8.2. Inspecting Phusion Passenger’s internal status</h3>
4726
5067
  <div class="paragraph"><p>One can inspect Phusion Passenger’s internal status with the tool <span class="monospaced">passenger-status</span>.
4727
5068
  This tool must typically be run as root. For example:</p></div>
4728
5069
  <div class="listingblock">
@@ -4854,7 +5195,7 @@ Your application is frozen, i.e. has stopped responding. See
4854
5195
  </ol></div>
4855
5196
  </div>
4856
5197
  <div class="sect2">
4857
- <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-1qsjqq7">8.3. Debugging frozen applications</h3>
5198
+ <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-1qsjqq7" data-anchor="debugging_frozen">8.3. Debugging frozen applications</h3>
4858
5199
  <div class="paragraph"><p>If one of your application instances is frozen (stopped responding), then you
4859
5200
  can figure out where it is frozen by killing it with <em>SIGABRT</em>. This will cause the
4860
5201
  application to raise an exception, with a backtrace.</p></div>
@@ -4876,7 +5217,7 @@ will restart killed application instances, as if nothing bad happened.</td>
4876
5217
  </div>
4877
5218
  </div>
4878
5219
  <div class="sect2">
4879
- <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-1p0j4jb">8.4. Accessing individual application processes</h3>
5220
+ <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-1p0j4jb" data-anchor="_accessing_individual_application_processes">8.4. Accessing individual application processes</h3>
4880
5221
  <div class="paragraph"><p>When a request is sent to the web server, Phusion Passenger will automatically forward
4881
5222
  the request to the most suitable application process, but sometimes it is desirable to
4882
5223
  be able to directly access the individual application processes. Use cases include, but
@@ -4942,16 +5283,17 @@ through the <em>X-Passenger-Connect-Password</em> HTTP header, like this:</p></d
4942
5283
  </div>
4943
5284
  </div>
4944
5285
  <div class="sect2">
4945
- <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-1cma32j">8.5. Attaching an IRB console to an application process</h3>
5286
+ <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-1cma32j" data-anchor="_attaching_an_irb_console_to_an_application_process">8.5. Attaching an IRB console to an application process</h3>
5287
+ <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>
4946
5288
  <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>
4947
5289
  </div>
4948
5290
  </div>
4949
5291
  </div>
4950
5292
  <div class="sect1">
4951
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h2 id="_tips" data-comment-topic="tips-19cwwf7">9. Tips</h2>
5293
+ <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-19cwwf7" data-anchor="_tips">9. Tips</h2>
4952
5294
  <div class="sectionbody">
4953
5295
  <div class="sect2">
4954
- <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--8njx1x">9.1. User switching (security)</h3>
5296
+ <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--8njx1x" data-anchor="user_switching">9.1. User switching (security)</h3>
4955
5297
  <div class="paragraph"><p>There is a problem that plagues most PHP web hosts, namely the fact that all PHP
4956
5298
  applications are run in the same user context as the web server. So for
4957
5299
  example, Joe’s PHP application will be able to read Jane’s PHP application’s
@@ -4991,14 +5333,14 @@ Under no circumstances will applications be run as <em>root</em>. If
4991
5333
  option.</p></div>
4992
5334
  </div>
4993
5335
  <div class="sect2">
4994
- <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--1ubxnq0">9.2. Reducing memory consumption of Ruby on Rails applications by 33%</h3>
5336
+ <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--1ubxnq0" data-anchor="reducing_memory_usage">9.2. Reducing memory consumption of Ruby on Rails applications by 33%</h3>
4995
5337
  <div class="paragraph"><p>Is it possible to reduce memory consumption of your Rails applications by 33% on average,
4996
5338
  by using <a href="http://www.rubyenterpriseedition.com/">Ruby Enterprise Edition</a>.
4997
5339
  Please visit the website for details.</p></div>
4998
5340
  <div class="paragraph"><p>Note that this feature does not apply to Rack applications.</p></div>
4999
5341
  </div>
5000
5342
  <div class="sect2">
5001
- <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-syzgo7">9.3. Capistrano recipe</h3>
5343
+ <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-syzgo7" data-anchor="capistrano">9.3. Capistrano recipe</h3>
5002
5344
  <div class="paragraph"><p>Phusion Passenger can be combined with <a href="http://capify.org/">Capistrano</a>.
5003
5345
  The following Capistrano recipe demonstrates Phusion Passenger support.
5004
5346
  It assumes that you’re using Git as version control system.</p></div>
@@ -5033,7 +5375,7 @@ end</pre>
5033
5375
  </div>
5034
5376
  </div>
5035
5377
  <div class="sect2">
5036
- <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-cf72ih">9.4. Bundler support</h3>
5378
+ <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-cf72ih" data-anchor="bundler_support">9.4. Bundler support</h3>
5037
5379
  <div class="paragraph"><p>Phusion Passenger has automatic support for <a href="http://gembundler.com/git.html">Bundler</a>.
5038
5380
  It works as follows:</p></div>
5039
5381
  <div class="ulist"><ul>
@@ -5066,7 +5408,7 @@ the application startup file. In this file you can do whatever you need to setup
5066
5408
  or a similar system.</p></div>
5067
5409
  </div>
5068
5410
  <div class="sect2">
5069
- <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-16fapwo">9.5. Moving Phusion Passenger to a different directory</h3>
5411
+ <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-16fapwo" data-anchor="moving_phusion_passenger">9.5. Moving Phusion Passenger to a different directory</h3>
5070
5412
  <div class="paragraph"><p>It is possible to relocate the Phusion Passenger files to a different directory. It
5071
5413
  involves two steps:</p></div>
5072
5414
  <div class="olist arabic"><ol class="arabic">
@@ -5107,7 +5449,7 @@ Edit your Apache configuration file, and set:
5107
5449
  </ol></div>
5108
5450
  </div>
5109
5451
  <div class="sect2">
5110
- <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-mi5j14">9.6. Installing multiple Ruby on Rails versions</h3>
5452
+ <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-mi5j14" data-anchor="_installing_multiple_ruby_on_rails_versions">9.6. Installing multiple Ruby on Rails versions</h3>
5111
5453
  <div class="paragraph"><p>Each Ruby on Rails applications that are going to be deployed may require a
5112
5454
  specific Ruby on Rails version. You can install a specific version with
5113
5455
  this command:</p></div>
@@ -5121,7 +5463,7 @@ this command:</p></div>
5121
5463
  other. Phusion Passenger will automatically make use of the correct version.</p></div>
5122
5464
  </div>
5123
5465
  <div class="sect2">
5124
- <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-183bezx">9.7. Making the application restart after each request</h3>
5466
+ <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-183bezx" data-anchor="_making_the_application_restart_after_each_request">9.7. Making the application restart after each request</h3>
5125
5467
  <div class="paragraph"><p>In some situations it might be desirable to restart the web application after
5126
5468
  each request, for example when developing a non-Rails application that doesn’t
5127
5469
  support code reloading, or when developing a web framework.</p></div>
@@ -5144,7 +5486,7 @@ does not support code reloading.</td>
5144
5486
  </div>
5145
5487
  </div>
5146
5488
  <div class="sect2">
5147
- <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-a63b6r">9.8. How to fix broken images/CSS/JavaScript URIs in sub-URI deployments</h3>
5489
+ <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-a63b6r" data-anchor="sub_uri_deployment_uri_fix">9.8. How to fix broken images/CSS/JavaScript URIs in sub-URI deployments</h3>
5148
5490
  <div class="paragraph"><p>Some people experience broken images and other broken static assets when they
5149
5491
  deploy their application to a sub-URI (i.e. <em>http://mysite.com/railsapp/</em>).
5150
5492
  The reason for this usually is that you used a
@@ -5182,12 +5524,87 @@ please refer to
5182
5524
  <a href="http://api.rubyonrails.org/classes/ActionView/Helpers/AssetTagHelper.html">the Rails API docs</a>.</p></div>
5183
5525
  </div>
5184
5526
  <div class="sect2">
5185
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_x_sendfile_support" data-comment-topic="x-sendfile-support-1cgyykw">9.9. X-Sendfile support</h3>
5527
+ <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-kav2p8" data-anchor="_out_of_band_garbage_work_and_out_of_band_garbage_collection">9.9. Out-of-Band Garbage Work and Out-of-Band Garbage Collection</h3>
5528
+ <div class="paragraph"><p><strong>Available since Phusion Passenger 4.0.0.</strong></p></div>
5529
+ <div class="paragraph"><p><strong>At this time, this feature is only available on Ruby.</strong></p></div>
5530
+ <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>
5531
+ <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>
5532
+ <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>
5533
+ <div class="ulist"><ul>
5534
+ <li>
5535
+ <p>
5536
+ 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.
5537
+ </p>
5538
+ </li>
5539
+ <li>
5540
+ <p>
5541
+ 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.
5542
+ </p>
5543
+ </li>
5544
+ </ul></div>
5545
+ <div class="paragraph"><p>Applications can use Out-of-Band Work as follows:</p></div>
5546
+ <div class="olist arabic"><ol class="arabic">
5547
+ <li>
5548
+ <p>
5549
+ 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.
5550
+ </p>
5551
+ </li>
5552
+ <li>
5553
+ <p>
5554
+ You can actually perform out-of-band work when you receive a <span class="monospaced">:oob_work</span> Phusion Passenger event.
5555
+ </p>
5556
+ </li>
5557
+ </ol></div>
5558
+ <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>
5559
+ <div class="paragraph"><p>Here’s an example which implements out-of-band garbage collection using the Out-of-Band framework:</p></div>
5560
+ <div class="listingblock">
5561
+ <div class="content">
5562
+ <!-- Generator: GNU source-highlight 2.11.1
5563
+ by Lorenzo Bettini
5564
+ http://www.lorenzobettini.it
5565
+ http://www.gnu.org/software/src-highlite -->
5566
+ <pre><tt><span style="font-style: italic"><span style="color: #9A1900"># Somewhere in a controller method:</span></span>
5567
+ <span style="font-style: italic"><span style="color: #9A1900"># Tell Phusion Passenger we want to perform OOB work.</span></span>
5568
+ 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>
5569
+
5570
+ <span style="font-style: italic"><span style="color: #9A1900"># Somewhere during application initialization:</span></span>
5571
+ 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>
5572
+ <span style="font-style: italic"><span style="color: #9A1900"># Phusion Passenger has told us that we're ready to perform OOB work.</span></span>
5573
+ t0 <span style="color: #990000">=</span> Time<span style="color: #990000">.</span>now
5574
+ GC<span style="color: #990000">.</span>start
5575
+ 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>
5576
+ <span style="font-weight: bold"><span style="color: #0000FF">end</span></span></tt></pre>
5577
+ </div>
5578
+ </div>
5579
+ <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>
5580
+ <div class="listingblock">
5581
+ <div class="content">
5582
+ <!-- Generator: GNU source-highlight 2.11.1
5583
+ by Lorenzo Bettini
5584
+ http://www.lorenzobettini.it
5585
+ http://www.gnu.org/software/src-highlite -->
5586
+ <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>
5587
+
5588
+ <span style="font-style: italic"><span style="color: #9A1900"># Trigger out-of-band GC every 5 requests.</span></span>
5589
+ 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>
5590
+ </div>
5591
+ </div>
5592
+ <div class="paragraph"><p>References:</p></div>
5593
+ <div class="ulist"><ul>
5594
+ <li>
5595
+ <p>
5596
+ <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>
5597
+ </p>
5598
+ </li>
5599
+ </ul></div>
5600
+ </div>
5601
+ <div class="sect2">
5602
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_x_sendfile_support"></span><h3 data-comment-topic="x-sendfile-support-1cgyykw" data-anchor="_x_sendfile_support">9.10. X-Sendfile support</h3>
5186
5603
  <div class="paragraph"><p>Phusion Passenger does not provide X-Sendfile support by itself. Please install
5187
5604
  <a href="http://tn123.ath.cx/mod_xsendfile/">mod_xsendfile</a> for X-Sendfile support.</p></div>
5188
5605
  </div>
5189
5606
  <div class="sect2">
5190
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_upload_progress" data-comment-topic="upload-progress-71cyl7">9.10. Upload progress</h3>
5607
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_upload_progress"></span><h3 data-comment-topic="upload-progress-71cyl7" data-anchor="_upload_progress">9.11. Upload progress</h3>
5191
5608
  <div class="paragraph"><p>Phusion Passenger does not provide upload progress support by itself. Please
5192
5609
  try drogus’s <a href="http://github.com/drogus/apache-upload-progress-module/tree/master">
5193
5610
  Apache upload progress module</a> instead.</p></div>
@@ -5195,13 +5612,13 @@ Apache upload progress module</a> instead.</p></div>
5195
5612
  </div>
5196
5613
  </div>
5197
5614
  <div class="sect1">
5198
- <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-21ue5t">10. Under the hood</h2>
5615
+ <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-21ue5t" data-anchor="_under_the_hood">10. Under the hood</h2>
5199
5616
  <div class="sectionbody">
5200
5617
  <div class="paragraph"><p>Phusion Passenger hides a lot of complexity for the end user (i.e. the web server
5201
5618
  system administrator), but sometimes it is desirable to know what is going on.
5202
5619
  This section describes a few things that Phusion Passenger does under the hood.</p></div>
5203
5620
  <div class="sect2">
5204
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><h3 id="_static_assets_serving" data-comment-topic="static-assets-serving-wo2d9v">10.1. Static assets serving</h3>
5621
+ <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_static_assets_serving"></span><h3 data-comment-topic="static-assets-serving-wo2d9v" data-anchor="_static_assets_serving">10.1. Static assets serving</h3>
5205
5622
  <div class="paragraph"><p>Phusion Passenger accelerates serving of static files. This means that, if an URI
5206
5623
  maps to a file that exists, then Phusion Passenger will let Apache serve that file
5207
5624
  directly, without hitting the web application.</p></div>
@@ -5221,7 +5638,7 @@ RewriteRule ^(.*)$ balancer://mongrel%{REQUEST_URI} [P,QSA,L]</pre>
5221
5638
  them.</p></div>
5222
5639
  </div>
5223
5640
  <div class="sect2">
5224
- <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-kwq9b9">10.2. Page caching support</h3>
5641
+ <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-kwq9b9" data-anchor="_page_caching_support">10.2. Page caching support</h3>
5225
5642
  <div class="paragraph"><p>For each HTTP request, Phusion Passenger will automatically look for a corresponding
5226
5643
  page cache file, and serve that if it exists. It does this by appending ".html" to
5227
5644
  the filename that the URI normally maps to, and checking whether that file exists.
@@ -5257,7 +5674,7 @@ the <em>public</em> directory. In that case you’ll need to use mod_rewrite to
5257
5674
  page cache files.</p></div>
5258
5675
  </div>
5259
5676
  <div class="sect2">
5260
- <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-179mp8m">10.3. How Phusion Passenger detects whether a virtual host is a web application</h3>
5677
+ <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-179mp8m" data-anchor="application_detection">10.3. How Phusion Passenger detects whether a virtual host is a web application</h3>
5261
5678
  <div class="paragraph"><p>After you’ve read the deployment instructions you might wonder how Phusion Passenger
5262
5679
  knows that the DocumentRoot points to a web application that Phusion Passenger is
5263
5680
  able to serve, and how it knows what kind of web application it is (e.g. Rails or Rack).</p></div>
@@ -5306,7 +5723,7 @@ Phusion Passenger will look for <em>config.ru</em> instead of <em>config/environ
5306
5723
  </div>
5307
5724
  </div>
5308
5725
  <div class="sect1">
5309
- <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-103toqs">11. Appendix A: About this document</h2>
5726
+ <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-103toqs" data-anchor="_appendix_a_about_this_document">11. Appendix A: About this document</h2>
5310
5727
  <div class="sectionbody">
5311
5728
  <div class="paragraph"><p>The text of this document is licensed under the
5312
5729
  <a href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons
@@ -5324,10 +5741,10 @@ Attribution-Share Alike 3.0 Unported License</a>.</p></div>
5324
5741
  </div>
5325
5742
  </div>
5326
5743
  <div class="sect1">
5327
- <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-h4eaf4">12. Appendix B: Terminology</h2>
5744
+ <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-h4eaf4" data-anchor="_appendix_b_terminology">12. Appendix B: Terminology</h2>
5328
5745
  <div class="sectionbody">
5329
5746
  <div class="sect2">
5330
- <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-otx6xf">12.1. Application root</h3>
5747
+ <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-otx6xf" data-anchor="application_root">12.1. Application root</h3>
5331
5748
  <div class="paragraph"><p>The root directory of an application that’s served by Phusion Passenger.</p></div>
5332
5749
  <div class="paragraph"><p>In case of Ruby on Rails applications, this is the directory that contains
5333
5750
  <em>Rakefile</em>, <em>app/</em>, <em>config/</em>, <em>public/</em>, etc. In other words, the directory
@@ -5389,17 +5806,17 @@ For example, take the following directory structure:</p></div>
5389
5806
  </div>
5390
5807
  </div>
5391
5808
  <div class="sect2">
5392
- <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-potb6g">12.2. Idle process</h3>
5809
+ <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-potb6g" data-anchor="idle_process">12.2. Idle process</h3>
5393
5810
  <div class="paragraph"><p>An "idle process" refers to a process that hasn’t processed any requests for a while.</p></div>
5394
5811
  </div>
5395
5812
  <div class="sect2">
5396
- <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-16gjv2e">12.3. Inactive process</h3>
5813
+ <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-16gjv2e" data-anchor="inactive_process">12.3. Inactive process</h3>
5397
5814
  <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>
5398
5815
  </div>
5399
5816
  </div>
5400
5817
  </div>
5401
5818
  <div class="sect1">
5402
- <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-owghi9">13. Appendix C: Spawning methods explained</h2>
5819
+ <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-owghi9" data-anchor="spawning_methods_explained">13. Appendix C: Spawning methods explained</h2>
5403
5820
  <div class="sectionbody">
5404
5821
  <div class="paragraph"><p>At its core, Phusion Passenger is an HTTP proxy and process manager. It spawns
5405
5822
  Ruby on Rails/Rack/WSGI worker processes (which may also be referred to as
@@ -5409,7 +5826,7 @@ processes.</p></div>
5409
5826
  Let’s go over the different spawning methods. For simplicity’s sake, let’s
5410
5827
  assume that we’re only talking about Ruby on Rails applications.</p></div>
5411
5828
  <div class="sect2">
5412
- <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-1ybbli2">13.1. The most straightforward and traditional way: direct spawning</h3>
5829
+ <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-1ybbli2" data-anchor="_the_most_straightforward_and_traditional_way_direct_spawning">13.1. The most straightforward and traditional way: direct spawning</h3>
5413
5830
  <div class="paragraph"><p>Phusion Passenger could create a new Ruby process, which will then load the
5414
5831
  Rails application along with the entire Rails framework. This process will then
5415
5832
  enter an request handling main loop.</p></div>
@@ -5426,7 +5843,7 @@ other hand creates processes that reuse the already loaded Ruby interpreter. In
5426
5843
  programmers jargon, Phusion Passenger calls fork(), but not exec().</p></div>
5427
5844
  </div>
5428
5845
  <div class="sect2">
5429
- <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-1cvu9dd">13.2. The smart spawning method</h3>
5846
+ <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-1cvu9dd" data-anchor="_the_smart_spawning_method">13.2. The smart spawning method</h3>
5430
5847
  <div class="admonitionblock">
5431
5848
  <table><tr>
5432
5849
  <td class="icon">
@@ -5447,7 +5864,7 @@ copy-on-write semantics of the virtual memory system on modern operating
5447
5864
  systems. As a side effect, the startup time is also reduced. This is technique
5448
5865
  is exploited by Phusion Passenger’s <em>smart</em> spawn method.</p></div>
5449
5866
  <div class="sect3">
5450
- <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-672zja">13.2.1. How it works</h4>
5867
+ <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-672zja" data-anchor="_how_it_works">13.2.1. How it works</h4>
5451
5868
  <div class="paragraph"><p>When the <em>smart</em> spawn method is being used, Phusion Passenger will first
5452
5869
  create a so-called <em>ApplicationSpawner server</em> process. This process loads the
5453
5870
  entire Rails application along with the Rails framework, by loading
@@ -5488,7 +5905,7 @@ ApplicationSpawner servers have an idle timeout just like worker processes.
5488
5905
  </ul></div>
5489
5906
  </div>
5490
5907
  <div class="sect3">
5491
- <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-1yrihfb">13.2.2. Summary of benefits</h4>
5908
+ <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-1yrihfb" data-anchor="_summary_of_benefits">13.2.2. Summary of benefits</h4>
5492
5909
  <div class="paragraph"><p>Suppose that Phusion Passenger needs a new worker process for an application
5493
5910
  that uses Rails 2.2.1.</p></div>
5494
5911
  <div class="paragraph"><p>If the <em>smart</em> spawning method is used, and an ApplicationSpawner server
@@ -5504,7 +5921,7 @@ gotchas you can easily reap the benefits of smart spawning.</p></div>
5504
5921
  </div>
5505
5922
  </div>
5506
5923
  <div class="sect2">
5507
- <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-z1y55l">13.3. Smart spawning gotcha #1: unintentional file descriptor sharing</h3>
5924
+ <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-z1y55l" data-anchor="_smart_spawning_gotcha_1_unintentional_file_descriptor_sharing">13.3. Smart spawning gotcha #1: unintentional file descriptor sharing</h3>
5508
5925
  <div class="paragraph"><p>Because worker processes are created by forking from an ApplicationSpawner
5509
5926
  server, it will share all file descriptors that are opened by the
5510
5927
  ApplicationSpawner server. (This is part of the semantics of the Unix
@@ -5540,7 +5957,7 @@ http://www.gnu.org/software/src-highlite -->
5540
5957
  database upon creating a new worker process, which is why you normally do not
5541
5958
  encounter any database issues when using smart spawning mode.</p></div>
5542
5959
  <div class="sect3">
5543
- <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--c71wqw">13.3.1. Example 1: Memcached connection sharing (harmful)</h4>
5960
+ <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--c71wqw" data-anchor="_example_1_memcached_connection_sharing_harmful">13.3.1. Example 1: Memcached connection sharing (harmful)</h4>
5544
5961
  <div class="paragraph"><p>Suppose we have a Rails application that connects to a Memcached server in
5545
5962
  <em>environment.rb</em>. This causes the ApplicationSpawner to have a socket connection
5546
5963
  (file descriptor) to the Memcached server, as shown in the following figure:</p></div>
@@ -5639,7 +6056,7 @@ http://www.gnu.org/software/src-highlite -->
5639
6056
  </div>
5640
6057
  </div>
5641
6058
  <div class="sect3">
5642
- <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--1p2yuol">13.3.2. Example 2: Log file sharing (not harmful)</h4>
6059
+ <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--1p2yuol" data-anchor="_example_2_log_file_sharing_not_harmful">13.3.2. Example 2: Log file sharing (not harmful)</h4>
5643
6060
  <div class="paragraph"><p>There are also cases in which unintentional file descriptor sharing is not harmful.
5644
6061
  One such case is log file file descriptor sharing. Even if two processes write
5645
6062
  to the log file at the same time, the worst thing that can happen is that the
@@ -5651,7 +6068,7 @@ Memcached example, doesn’t help.</p></div>
5651
6068
  </div>
5652
6069
  </div>
5653
6070
  <div class="sect2">
5654
- <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-1k6cj7d">13.4. Smart spawning gotcha #2: the need to revive threads</h3>
6071
+ <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-1k6cj7d" data-anchor="_smart_spawning_gotcha_2_the_need_to_revive_threads">13.4. Smart spawning gotcha #2: the need to revive threads</h3>
5655
6072
  <div class="paragraph"><p>Another part of the <em>fork()</em> system call’s semantics is the fact that threads
5656
6073
  disappear after a fork call. So if you’ve created any threads in environment.rb,
5657
6074
  then those threads will no longer be running in newly created worker process.
@@ -5677,7 +6094,7 @@ http://www.gnu.org/software/src-highlite -->
5677
6094
  </div>
5678
6095
  </div>
5679
6096
  <div class="sect2">
5680
- <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-nkotiy">13.5. Smart spawning gotcha #3: code load order</h3>
6097
+ <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-nkotiy" data-anchor="_smart_spawning_gotcha_3_code_load_order">13.5. Smart spawning gotcha #3: code load order</h3>
5681
6098
  <div class="paragraph"><p>This gotcha is only applicable to the <em>smart</em> spawn method, not the <em>smart-lv2</em>
5682
6099
  spawn method.</p></div>
5683
6100
  <div class="paragraph"><p>If your application expects the Rails framework to be not loaded during the
@@ -5700,7 +6117,7 @@ has no effect.</p></div>
5700
6117
  <div id="footnotes"><hr></div>
5701
6118
  <div id="footer">
5702
6119
  <div id="footer-text">
5703
- Last updated 2012-10-24 16:27:54 CEST
6120
+ Last updated 2013-01-23 15:31:31 CET
5704
6121
  </div>
5705
6122
  </div>
5706
6123
  <script>/*! jQuery v1.7.1 jquery.com | jquery.org/license */
@@ -6038,6 +6455,7 @@ Mizuho.initializeTopBar = $.proxy(function() {
6038
6455
  var isMobileDevice = this.isMobileDevice();
6039
6456
  var timerId;
6040
6457
 
6458
+ // Create the floating table of contents used in the top bar.
6041
6459
  var $floattoc = $('<div id="floattoc"></div>').html($('#toc').html());
6042
6460
  $floattoc.find('#toctitle').remove();
6043
6461
  $floattoc.find('.comments').remove();
@@ -6056,6 +6474,8 @@ Mizuho.initializeTopBar = $.proxy(function() {
6056
6474
  self.internalLinkClicked(this, event);
6057
6475
  });
6058
6476
 
6477
+ // Callback for when the user clicks on the Table of Contents
6478
+ // button on the top bar.
6059
6479
  function showFloatingToc() {
6060
6480
  var scrollUpdateTimerId;
6061
6481
 
@@ -6148,6 +6568,9 @@ Mizuho.initializeTopBar = $.proxy(function() {
6148
6568
  $window.bind('scroll', onScroll);
6149
6569
  }
6150
6570
 
6571
+ // Called whenever the user scrolls. Updates the title of the
6572
+ // Table of Contents button in the top bar to the section that
6573
+ // the user is currently reading.
6151
6574
  function update() {
6152
6575
  if ($title.offset().top + $title.height() < $document.scrollTop()) {
6153
6576
  if (!$topbar.is(':visible')) {
@@ -6191,6 +6614,7 @@ Mizuho.initializeTopBar = $.proxy(function() {
6191
6614
  }, 100);
6192
6615
  }
6193
6616
 
6617
+
6194
6618
  if (isMobileDevice) {
6195
6619
  // Mobile devices don't support position fixed.
6196
6620
  $topbar.css('position', 'absolute');