passenger 5.1.4 → 5.1.5

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 (542) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +9 -0
  3. data/CHANGELOG +9 -0
  4. data/build/cxx_tests.rb +11 -1
  5. data/build/documentation.rb +0 -32
  6. data/build/support/cxx_dependency_map.rb +602 -2
  7. data/build/test_basics.rb +3 -3
  8. data/dev/boost-patches/0001-Patch-boost-thread-so-that-oxt-thread-can-use-it.patch +48 -0
  9. data/dev/boost-patches/0002-Make-boost-thread_interrupted-derive-from-oxt-tracab.patch +33 -0
  10. data/dev/boost-patches/0003-Disable-a-Clang-pragma-to-prevent-warnings-on-OS-X.patch +25 -0
  11. data/dev/ci/README.md +121 -0
  12. data/dev/ci/lib/functions.sh +129 -0
  13. data/dev/ci/lib/set-container-envvars.sh +46 -0
  14. data/dev/ci/lib/setup-container.sh +43 -0
  15. data/dev/ci/run-tests-natively +24 -0
  16. data/dev/ci/run-tests-with-docker +42 -0
  17. data/dev/ci/scripts/debug-console-wrapper.sh +27 -0
  18. data/dev/ci/scripts/docker-entrypoint-stage2.sh +17 -0
  19. data/dev/ci/scripts/docker-entrypoint.sh +17 -0
  20. data/dev/ci/scripts/inituidgid +17 -0
  21. data/dev/ci/scripts/run-tests-natively-stage2.sh +17 -0
  22. data/dev/ci/scripts/setup-host-natively.sh +11 -0
  23. data/dev/ci/setup-host +50 -0
  24. data/dev/ci/tests/apache2/run +6 -0
  25. data/dev/ci/tests/apache2/setup +4 -0
  26. data/dev/ci/tests/cxx/run +9 -0
  27. data/dev/ci/tests/cxx/setup +4 -0
  28. data/dev/ci/tests/nginx-dynamic/run +20 -0
  29. data/dev/ci/tests/nginx-dynamic/setup +4 -0
  30. data/dev/ci/tests/nginx/run +5 -0
  31. data/dev/ci/tests/nginx/setup +4 -0
  32. data/dev/ci/tests/nodejs/run +4 -0
  33. data/dev/ci/tests/nodejs/setup +4 -0
  34. data/dev/ci/tests/ruby/run +4 -0
  35. data/dev/ci/tests/ruby/setup +4 -0
  36. data/dev/ci/tests/source-packaging/run +4 -0
  37. data/dev/ci/tests/source-packaging/setup +4 -0
  38. data/dev/ci/tests/standalone/run +4 -0
  39. data/dev/ci/tests/standalone/setup +4 -0
  40. data/dev/copy_boost_headers +8 -2
  41. data/src/agent/Core/ApiServer.h +11 -5
  42. data/src/agent/Core/Controller.h +12 -46
  43. data/src/agent/Core/Controller/CheckoutSession.cpp +1 -1
  44. data/src/agent/Core/Controller/Config.h +369 -0
  45. data/src/agent/Core/Controller/ForwardResponse.cpp +4 -4
  46. data/src/agent/Core/Controller/Hooks.cpp +15 -3
  47. data/src/agent/Core/Controller/Implementation.cpp +1 -1
  48. data/src/agent/Core/Controller/InitRequest.cpp +28 -39
  49. data/src/agent/Core/Controller/InitializationAndShutdown.cpp +25 -60
  50. data/src/agent/Core/Controller/InternalUtils.cpp +0 -16
  51. data/src/agent/Core/Controller/Miscellaneous.cpp +0 -17
  52. data/src/agent/Core/Controller/Request.h +2 -0
  53. data/src/agent/Core/Controller/SendRequest.cpp +4 -4
  54. data/src/agent/Core/Controller/{StateInspectionAndConfiguration.cpp → StateInspection.cpp} +0 -22
  55. data/src/agent/Core/Controller/TurboCaching.h +11 -10
  56. data/src/agent/Core/CoreMain.cpp +16 -6
  57. data/src/agent/Core/ResponseCache.h +3 -3
  58. data/src/agent/Core/SpawningKit/SmartSpawner.h +9 -3
  59. data/src/agent/Core/SpawningKit/Spawner.h +7 -3
  60. data/src/agent/UstRouter/ApiServer.h +3 -2
  61. data/src/agent/UstRouter/Controller.h +66 -32
  62. data/src/agent/UstRouter/UstRouterMain.cpp +10 -2
  63. data/src/agent/Watchdog/ApiServer.h +3 -2
  64. data/src/agent/Watchdog/WatchdogMain.cpp +3 -1
  65. data/src/apache2_module/ConfigurationCommands.cpp +1 -1
  66. data/src/cxx_supportlib/ConfigKit/Common.h +125 -0
  67. data/src/cxx_supportlib/ConfigKit/ConfigKit.h +34 -0
  68. data/src/cxx_supportlib/ConfigKit/README.md +895 -0
  69. data/src/cxx_supportlib/ConfigKit/Schema.h +331 -0
  70. data/src/cxx_supportlib/ConfigKit/Store.h +385 -0
  71. data/src/cxx_supportlib/ConfigKit/TableTranslator.h +185 -0
  72. data/src/cxx_supportlib/ConfigKit/Utils.h +141 -0
  73. data/src/cxx_supportlib/ConfigKit/VariantMapUtils.h +81 -0
  74. data/src/cxx_supportlib/Constants.h +1 -1
  75. data/src/cxx_supportlib/Crypto.cpp +2 -2
  76. data/src/cxx_supportlib/Logging.h +0 -35
  77. data/src/cxx_supportlib/ServerKit/HttpServer.h +35 -16
  78. data/src/cxx_supportlib/ServerKit/Server.h +65 -25
  79. data/src/cxx_supportlib/oxt/macros.hpp +3 -0
  80. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/replace.hpp +0 -2
  81. data/src/cxx_supportlib/vendor-modified/boost/array.hpp +53 -42
  82. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_template.hpp +11 -5
  83. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_cast.hpp +13 -2
  84. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_x86.hpp +23 -0
  85. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_msvc_x86.hpp +5 -0
  86. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/config.hpp +3 -2
  87. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/interlocked.hpp +8 -1
  88. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_emulated.hpp +3 -1
  89. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_alpha.hpp +2 -0
  90. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_arm.hpp +2 -0
  91. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_atomic.hpp +5 -0
  92. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_ppc.hpp +2 -0
  93. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_sparc.hpp +6 -4
  94. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_sync.hpp +2 -0
  95. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86.hpp +3 -1
  96. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86_dcas.hpp +28 -17
  97. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_linux_arm.hpp +2 -0
  98. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_msvc_arm.hpp +2 -0
  99. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_msvc_x86.hpp +9 -4
  100. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/platform.hpp +3 -3
  101. data/src/cxx_supportlib/vendor-modified/boost/bind/arg.hpp +10 -3
  102. data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +90 -18
  103. data/src/cxx_supportlib/vendor-modified/boost/cerrno.hpp +2 -2
  104. data/src/cxx_supportlib/vendor-modified/boost/chrono/duration.hpp +1 -1
  105. data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +8 -3
  106. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/borland.hpp +2 -0
  107. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +35 -6
  108. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/codegear.hpp +2 -0
  109. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/comeau.hpp +1 -1
  110. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/common_edg.hpp +2 -0
  111. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/compaq_cxx.hpp +1 -1
  112. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/cray.hpp +3 -1
  113. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/digitalmars.hpp +2 -0
  114. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +19 -4
  115. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc_xml.hpp +3 -1
  116. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/greenhills.hpp +1 -1
  117. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/hp_acc.hpp +3 -1
  118. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/intel.hpp +29 -7
  119. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/kai.hpp +1 -1
  120. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/metrowerks.hpp +2 -0
  121. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/mpw.hpp +2 -0
  122. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/nvcc.hpp +16 -0
  123. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pathscale.hpp +2 -0
  124. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pgi.hpp +2 -0
  125. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sgi_mipspro.hpp +1 -1
  126. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +10 -1
  127. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/vacpp.hpp +2 -0
  128. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +44 -16
  129. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +4 -0
  130. data/src/cxx_supportlib/vendor-modified/boost/config/platform/cygwin.hpp +1 -2
  131. data/src/cxx_supportlib/vendor-modified/boost/config/platform/linux.hpp +1 -1
  132. data/src/cxx_supportlib/vendor-modified/boost/config/select_compiler_config.hpp +21 -21
  133. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/dinkumware.hpp +42 -1
  134. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcomo.hpp +7 -0
  135. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +40 -7
  136. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +39 -6
  137. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/modena.hpp +7 -0
  138. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/msl.hpp +7 -0
  139. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/roguewave.hpp +7 -0
  140. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/sgi.hpp +8 -1
  141. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/stlport.hpp +7 -0
  142. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/vacpp.hpp +7 -0
  143. data/src/cxx_supportlib/vendor-modified/boost/config/suffix.hpp +33 -4
  144. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +0 -2
  145. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +0 -3
  146. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +34 -27
  147. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +62 -26
  148. data/src/cxx_supportlib/vendor-modified/boost/container/detail/addressof.hpp +2 -2
  149. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +4 -4
  150. data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +4 -4
  151. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +2 -0
  152. data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +39 -5
  153. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +49 -32
  154. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +175 -7
  155. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +223 -98
  156. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_sorted.hpp +57 -0
  157. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +88 -41
  158. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +7 -8
  159. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mutex.hpp +4 -9
  160. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +45 -18
  161. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +205 -26
  162. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +290 -181
  163. data/src/cxx_supportlib/vendor-modified/boost/container/detail/value_init.hpp +2 -0
  164. data/src/cxx_supportlib/vendor-modified/boost/container/detail/variadic_templates_tools.hpp +24 -19
  165. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +38 -0
  166. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +320 -46
  167. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +91 -18
  168. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +23 -19
  169. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +491 -120
  170. data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +4 -4
  171. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +0 -3
  172. data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +399 -0
  173. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/deque.hpp +2 -0
  174. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/flat_map.hpp +4 -0
  175. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/flat_set.hpp +4 -0
  176. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/list.hpp +2 -0
  177. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/map.hpp +4 -0
  178. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/set.hpp +4 -0
  179. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/slist.hpp +2 -0
  180. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/small_vector.hpp +2 -0
  181. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/stable_vector.hpp +2 -0
  182. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/string.hpp +2 -0
  183. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/vector.hpp +2 -0
  184. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +101 -20
  185. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +19 -14
  186. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +117 -59
  187. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +8 -6
  188. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +33 -28
  189. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +414 -70
  190. data/src/cxx_supportlib/vendor-modified/boost/container/throw_exception.hpp +1 -0
  191. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator_fwd.hpp +2 -2
  192. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +134 -117
  193. data/src/cxx_supportlib/vendor-modified/boost/core/addressof.hpp +202 -99
  194. data/src/cxx_supportlib/vendor-modified/boost/core/demangle.hpp +8 -10
  195. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +217 -1
  196. data/src/cxx_supportlib/vendor-modified/boost/core/scoped_enum.hpp +29 -27
  197. data/src/cxx_supportlib/vendor-modified/boost/current_function.hpp +5 -1
  198. data/src/cxx_supportlib/vendor-modified/boost/date_time/c_time.hpp +13 -13
  199. data/src/cxx_supportlib/vendor-modified/boost/date_time/constrained_value.hpp +3 -3
  200. data/src/cxx_supportlib/vendor-modified/boost/date_time/date.hpp +2 -1
  201. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_duration.hpp +4 -3
  202. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_duration_types.hpp +6 -5
  203. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_facet.hpp +2 -2
  204. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_names_put.hpp +8 -7
  205. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_calendar.hpp +2 -1
  206. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_date.hpp +2 -1
  207. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_day.hpp +4 -3
  208. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_day_of_year.hpp +3 -2
  209. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_duration.hpp +2 -1
  210. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_duration_types.hpp +4 -3
  211. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_facet.hpp +27 -7
  212. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_month.hpp +5 -5
  213. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_serialize.hpp +5 -0
  214. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_weekday.hpp +4 -4
  215. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_year.hpp +4 -5
  216. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian_calendar.hpp +2 -1
  217. data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/local_date_time.hpp +5 -4
  218. data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/posix_time_zone.hpp +4 -3
  219. data/src/cxx_supportlib/vendor-modified/boost/date_time/period.hpp +3 -2
  220. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/date_duration_operators.hpp +1 -1
  221. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_config.hpp +2 -2
  222. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_duration.hpp +5 -4
  223. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/ptime.hpp +6 -5
  224. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_parsers.hpp +4 -0
  225. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_duration.hpp +2 -2
  226. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_facet.hpp +5 -4
  227. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_zone_base.hpp +2 -1
  228. data/src/cxx_supportlib/vendor-modified/boost/date_time/year_month_day.hpp +3 -1
  229. data/src/cxx_supportlib/vendor-modified/boost/detail/iterator.hpp +13 -0
  230. data/src/cxx_supportlib/vendor-modified/boost/detail/lcast_precision.hpp +1 -0
  231. data/src/cxx_supportlib/vendor-modified/boost/detail/workaround.hpp +5 -0
  232. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/error_info_impl.hpp +11 -0
  233. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/shared_ptr.hpp +17 -0
  234. data/src/cxx_supportlib/vendor-modified/boost/exception/exception.hpp +25 -3
  235. data/src/cxx_supportlib/vendor-modified/boost/exception/get_error_info.hpp +2 -1
  236. data/src/cxx_supportlib/vendor-modified/boost/exception/info.hpp +114 -1
  237. data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +116 -142
  238. data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +57 -69
  239. data/src/cxx_supportlib/vendor-modified/boost/functional/hash/detail/hash_float.hpp +1 -1
  240. data/src/cxx_supportlib/vendor-modified/boost/functional/hash/extensions.hpp +3 -3
  241. data/src/cxx_supportlib/vendor-modified/boost/functional/hash/hash.hpp +27 -13
  242. data/src/cxx_supportlib/vendor-modified/boost/intrusive/any_hook.hpp +4 -2
  243. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avl_set.hpp +99 -12
  244. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avl_set_hook.hpp +4 -2
  245. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree.hpp +35 -4
  246. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +37 -6
  247. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bs_set.hpp +95 -8
  248. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bs_set_hook.hpp +4 -2
  249. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +209 -72
  250. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +86 -20
  251. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_list_algorithms.hpp +11 -11
  252. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_slist_algorithms.hpp +6 -6
  253. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/algo_type.hpp +4 -1
  254. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +58 -45
  255. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/avltree_node.hpp +27 -26
  256. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/bstree_algorithms_base.hpp +2 -2
  257. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/common_slist_algorithms.hpp +7 -7
  258. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/config_begin.hpp +8 -3
  259. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/default_header_holder.hpp +4 -3
  260. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +27 -26
  261. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/equal_to_value.hpp +3 -1
  262. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/exception_disposer.hpp +4 -2
  263. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/generic_hook.hpp +9 -7
  264. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/has_member_function_callable_with.hpp +83 -57
  265. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hashtable_node.hpp +30 -30
  266. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +9 -8
  267. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iiterator.hpp +8 -7
  268. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iterator.hpp +16 -15
  269. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/key_nodeptr_comp.hpp +70 -44
  270. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_iterator.hpp +22 -21
  271. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_node.hpp +7 -6
  272. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/parent_from_member.hpp +5 -4
  273. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/rbtree_node.hpp +29 -28
  274. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/reverse_iterator.hpp +33 -12
  275. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/size_holder.hpp +19 -12
  276. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_iterator.hpp +21 -20
  277. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_node.hpp +4 -3
  278. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/to_raw_pointer.hpp +3 -2
  279. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/transform_iterator.hpp +23 -22
  280. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_iterator.hpp +23 -22
  281. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_node.hpp +10 -9
  282. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_value_compare.hpp +103 -29
  283. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/workaround.hpp +15 -0
  284. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +295 -211
  285. data/src/cxx_supportlib/vendor-modified/boost/intrusive/linear_slist_algorithms.hpp +2 -2
  286. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +20 -7
  287. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list_hook.hpp +4 -2
  288. data/src/cxx_supportlib/vendor-modified/boost/intrusive/member_value_traits.hpp +5 -4
  289. data/src/cxx_supportlib/vendor-modified/boost/intrusive/options.hpp +4 -4
  290. data/src/cxx_supportlib/vendor-modified/boost/intrusive/parent_from_member.hpp +3 -2
  291. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_plus_bits.hpp +4 -4
  292. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +4 -4
  293. data/src/cxx_supportlib/vendor-modified/boost/intrusive/priority_compare.hpp +22 -4
  294. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree.hpp +36 -4
  295. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +43 -13
  296. data/src/cxx_supportlib/vendor-modified/boost/intrusive/set.hpp +95 -8
  297. data/src/cxx_supportlib/vendor-modified/boost/intrusive/set_hook.hpp +4 -2
  298. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sg_set.hpp +96 -12
  299. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree.hpp +102 -5
  300. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +48 -4
  301. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +20 -11
  302. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist_hook.hpp +9 -2
  303. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splay_set.hpp +95 -8
  304. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree.hpp +36 -4
  305. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree_algorithms.hpp +27 -0
  306. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap.hpp +167 -23
  307. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +28 -0
  308. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_set.hpp +100 -46
  309. data/src/cxx_supportlib/vendor-modified/boost/intrusive/trivial_value_traits.hpp +5 -4
  310. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +37 -27
  311. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set_hook.hpp +30 -14
  312. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +1 -1
  313. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +35 -36
  314. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +6 -28
  315. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +20 -5
  316. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/posix_api.cpp +4 -2
  317. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex.cpp +3 -1
  318. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/once.cpp +5 -0
  319. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +11 -7
  320. data/src/cxx_supportlib/vendor-modified/boost/math/policies/policy.hpp +1 -3
  321. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/fpclassify.hpp +5 -1
  322. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/math_fwd.hpp +11 -0
  323. data/src/cxx_supportlib/vendor-modified/boost/math/tools/config.hpp +10 -2
  324. data/src/cxx_supportlib/vendor-modified/boost/move/adl_move_swap.hpp +40 -7
  325. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_merge.hpp +67 -0
  326. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_sort.hpp +63 -0
  327. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +2437 -0
  328. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/basic_op.hpp +121 -0
  329. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/insertion_sort.hpp +127 -0
  330. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge.hpp +637 -0
  331. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge_sort.hpp +139 -0
  332. data/src/cxx_supportlib/vendor-modified/boost/move/algo/move.hpp +155 -0
  333. data/src/cxx_supportlib/vendor-modified/boost/move/algorithm.hpp +1 -116
  334. data/src/cxx_supportlib/vendor-modified/boost/move/core.hpp +14 -13
  335. data/src/cxx_supportlib/vendor-modified/boost/move/default_delete.hpp +17 -1
  336. data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +2 -0
  337. data/src/cxx_supportlib/vendor-modified/boost/move/detail/destruct_n.hpp +67 -0
  338. data/src/cxx_supportlib/vendor-modified/boost/move/detail/fwd_macros.hpp +227 -32
  339. data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_traits.hpp +4 -0
  340. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils.hpp +30 -9
  341. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils_core.hpp +12 -0
  342. data/src/cxx_supportlib/vendor-modified/boost/move/detail/move_helpers.hpp +84 -80
  343. data/src/cxx_supportlib/vendor-modified/boost/move/detail/placement_new.hpp +30 -0
  344. data/src/cxx_supportlib/vendor-modified/boost/move/detail/reverse_iterator.hpp +171 -0
  345. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +14 -20
  346. data/src/cxx_supportlib/vendor-modified/boost/move/detail/unique_ptr_meta_utils.hpp +1 -1
  347. data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +14 -0
  348. data/src/cxx_supportlib/vendor-modified/boost/move/iterator.hpp +32 -33
  349. data/src/cxx_supportlib/vendor-modified/boost/move/make_unique.hpp +2 -1
  350. data/src/cxx_supportlib/vendor-modified/boost/move/unique_ptr.hpp +49 -49
  351. data/src/cxx_supportlib/vendor-modified/boost/move/utility.hpp +8 -7
  352. data/src/cxx_supportlib/vendor-modified/boost/move/utility_core.hpp +17 -16
  353. data/src/cxx_supportlib/vendor-modified/boost/mpl/print.hpp +3 -0
  354. data/src/cxx_supportlib/vendor-modified/boost/none.hpp +1 -1
  355. data/src/cxx_supportlib/vendor-modified/boost/none_t.hpp +2 -3
  356. data/src/cxx_supportlib/vendor-modified/boost/operators.hpp +197 -255
  357. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/old_optional_implementation.hpp +1059 -0
  358. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_aligned_storage.hpp +75 -0
  359. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_config.hpp +116 -0
  360. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_factory_support.hpp +36 -0
  361. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +253 -0
  362. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_relops.hpp +196 -0
  363. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_swap.hpp +117 -0
  364. data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +372 -554
  365. data/src/cxx_supportlib/vendor-modified/boost/optional/optional_fwd.hpp +12 -1
  366. data/src/cxx_supportlib/vendor-modified/boost/pool/detail/mutex.hpp +15 -7
  367. data/src/cxx_supportlib/vendor-modified/boost/pool/pool_alloc.hpp +24 -0
  368. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/intel.h +9 -2
  369. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/visualc.h +15 -1
  370. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd.h +16 -4
  371. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86.h +3 -3
  372. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86_amd.h +4 -4
  373. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86_amd/versions.h +4 -4
  374. data/src/cxx_supportlib/vendor-modified/boost/predef/os/cygwin.h +1 -1
  375. data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +2 -2
  376. data/src/cxx_supportlib/vendor-modified/boost/predef/version_number.h +20 -1
  377. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/cat.hpp +1 -1
  378. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/config/config.hpp +6 -6
  379. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/binary_transform.hpp +5 -6
  380. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/to_list_msvc.hpp +55 -0
  381. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/to_list.hpp +12 -0
  382. data/src/cxx_supportlib/vendor-modified/boost/range/const_iterator.hpp +4 -4
  383. data/src/cxx_supportlib/vendor-modified/boost/range/size_type.hpp +0 -5
  384. data/src/cxx_supportlib/vendor-modified/boost/regex/concepts.hpp +16 -16
  385. data/src/cxx_supportlib/vendor-modified/boost/regex/config.hpp +4 -4
  386. data/src/cxx_supportlib/vendor-modified/boost/regex/pending/unicode_iterator.hpp +3 -0
  387. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_creator.hpp +102 -87
  388. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +45 -21
  389. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cpp_regex_traits.hpp +4 -4
  390. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/fileiter.hpp +2 -2
  391. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/instances.hpp +1 -1
  392. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_flags.hpp +14 -2
  393. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/mem_block_cache.hpp +46 -0
  394. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher.hpp +5 -2
  395. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_common.hpp +5 -14
  396. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +116 -13
  397. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_recursive.hpp +34 -0
  398. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_format.hpp +2 -2
  399. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits.hpp +1 -1
  400. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits_defaults.hpp +3 -3
  401. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +1 -0
  402. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/w32_regex_traits.hpp +2 -2
  403. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/allocate_shared_array.hpp +1004 -159
  404. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/bad_weak_ptr.hpp +9 -0
  405. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count.hpp +3 -0
  406. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/shared_count.hpp +4 -58
  407. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base.hpp +5 -2
  408. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_clang.hpp +9 -0
  409. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +0 -8
  410. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_sync.hpp +3 -3
  411. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_noexcept.hpp +30 -0
  412. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock.hpp +3 -0
  413. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/enable_shared_from_this.hpp +5 -4
  414. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +28 -3
  415. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ref_counter.hpp +187 -0
  416. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_array.hpp +52 -144
  417. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_object.hpp +120 -450
  418. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_array.hpp +2 -1
  419. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_ptr.hpp +2 -1
  420. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_array.hpp +7 -6
  421. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_ptr.hpp +70 -8
  422. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/weak_ptr.hpp +6 -5
  423. data/src/cxx_supportlib/vendor-modified/boost/system/error_code.hpp +9 -8
  424. data/src/cxx_supportlib/vendor-modified/boost/system/system_error.hpp +3 -3
  425. data/src/cxx_supportlib/vendor-modified/boost/thread/barrier.hpp +5 -4
  426. data/src/cxx_supportlib/vendor-modified/boost/thread/completion_latch.hpp +0 -1
  427. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/queue_views.hpp +0 -11
  428. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_timed_queue.hpp +6 -4
  429. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/config.hpp +11 -2
  430. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread.hpp +11 -4
  431. data/src/cxx_supportlib/vendor-modified/boost/thread/exceptions.hpp +8 -8
  432. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/executor.hpp +1 -1
  433. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/generic_executor_ref.hpp +5 -5
  434. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/loop_executor.hpp +22 -18
  435. data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +163 -55
  436. data/src/cxx_supportlib/vendor-modified/boost/thread/futures/launch.hpp +1 -0
  437. data/src/cxx_supportlib/vendor-modified/boost/thread/futures/wait_for_all.hpp +1 -1
  438. data/src/cxx_supportlib/vendor-modified/boost/thread/lock_types.hpp +9 -9
  439. data/src/cxx_supportlib/vendor-modified/boost/thread/locks.hpp +1 -0
  440. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable.hpp +6 -7
  441. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable_fwd.hpp +17 -2
  442. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/shared_mutex.hpp +2 -2
  443. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/thread_data.hpp +5 -5
  444. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/timespec.hpp +29 -0
  445. data/src/cxx_supportlib/vendor-modified/boost/thread/scoped_thread.hpp +23 -18
  446. data/src/cxx_supportlib/vendor-modified/boost/thread/synchronized_value.hpp +6 -6
  447. data/src/cxx_supportlib/vendor-modified/boost/thread/thread_functors.hpp +19 -4
  448. data/src/cxx_supportlib/vendor-modified/boost/thread/thread_guard.hpp +3 -3
  449. data/src/cxx_supportlib/vendor-modified/boost/thread/user_scheduler.hpp +1 -1
  450. data/src/cxx_supportlib/vendor-modified/boost/type_index.hpp +265 -0
  451. data/src/cxx_supportlib/vendor-modified/boost/type_index/stl_type_index.hpp +272 -0
  452. data/src/cxx_supportlib/vendor-modified/boost/type_index/type_index_facade.hpp +300 -0
  453. data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_reference.hpp +3 -3
  454. data/src/cxx_supportlib/vendor-modified/boost/type_traits/aligned_storage.hpp +6 -6
  455. data/src/cxx_supportlib/vendor-modified/boost/type_traits/common_type.hpp +1 -0
  456. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/common_arithmetic_type.hpp +9 -3
  457. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/mp_defer.hpp +3 -3
  458. data/src/cxx_supportlib/vendor-modified/boost/type_traits/extent.hpp +1 -0
  459. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_nothrow_assign.hpp +2 -1
  460. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_nothrow_constructor.hpp +2 -1
  461. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_nothrow_destructor.hpp +1 -1
  462. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_assign.hpp +2 -1
  463. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_copy.hpp +1 -0
  464. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_destructor.hpp +1 -1
  465. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_move_assign.hpp +1 -0
  466. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_move_constructor.hpp +1 -0
  467. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_abstract.hpp +1 -0
  468. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_array.hpp +1 -1
  469. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_assignable.hpp +1 -0
  470. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_const.hpp +2 -1
  471. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_default_constructible.hpp +21 -1
  472. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_destructible.hpp +1 -0
  473. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_assignable.hpp +1 -1
  474. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_constructible.hpp +2 -1
  475. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_pod.hpp +1 -0
  476. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_rvalue_reference.hpp +1 -1
  477. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_virtual_base_of.hpp +1 -1
  478. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_volatile.hpp +2 -1
  479. data/src/cxx_supportlib/vendor-modified/boost/type_traits/make_void.hpp +52 -0
  480. data/src/cxx_supportlib/vendor-modified/boost/type_traits/rank.hpp +1 -0
  481. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_all_extents.hpp +1 -1
  482. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_const.hpp +1 -1
  483. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_cv.hpp +1 -1
  484. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_extent.hpp +1 -1
  485. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_pointer.hpp +1 -1
  486. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_volatile.hpp +1 -1
  487. data/src/cxx_supportlib/vendor-modified/boost/type_traits/type_with_alignment.hpp +1 -1
  488. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fwd.hpp +40 -6
  489. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +4986 -0
  490. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/map.hpp +107 -0
  491. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/set.hpp +105 -0
  492. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +1814 -1255
  493. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +41 -45
  494. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +1498 -1161
  495. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +40 -44
  496. data/src/cxx_supportlib/vendor-modified/boost/utility.hpp +2 -2
  497. data/src/cxx_supportlib/vendor-modified/boost/utility/base_from_member.hpp +7 -6
  498. data/src/cxx_supportlib/vendor-modified/boost/utility/compare_pointees.hpp +10 -2
  499. data/src/cxx_supportlib/vendor-modified/boost/utility/string_ref.hpp +39 -22
  500. data/src/cxx_supportlib/vendor-modified/boost/utility/string_view.hpp +690 -0
  501. data/src/cxx_supportlib/vendor-modified/boost/utility/string_view_fwd.hpp +39 -0
  502. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  503. data/src/helper-scripts/crash-watch.rb +3 -0
  504. data/src/ruby_supportlib/phusion_passenger.rb +1 -1
  505. data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +1 -0
  506. data/src/ruby_supportlib/phusion_passenger/packaging.rb +2 -12
  507. metadata +77 -38
  508. data/dev/ci/inituidgid +0 -24
  509. data/dev/ci/run_jenkins.sh +0 -70
  510. data/dev/ci/run_travis.sh +0 -314
  511. data/doc/Design and Architecture.html +0 -2421
  512. data/doc/Design and Architecture.txt +0 -511
  513. data/doc/Security of user switching support.html +0 -1833
  514. data/doc/Users guide Apache.html +0 -3101
  515. data/doc/Users guide Apache.idmap.txt +0 -451
  516. data/doc/Users guide Apache.txt +0 -534
  517. data/doc/Users guide Nginx.html +0 -3026
  518. data/doc/Users guide Nginx.idmap.txt +0 -431
  519. data/doc/Users guide Nginx.txt +0 -451
  520. data/doc/Users guide Standalone.html +0 -2092
  521. data/doc/Users guide Standalone.idmap.txt +0 -137
  522. data/doc/Users guide Standalone.txt +0 -81
  523. data/doc/Users guide.html +0 -1606
  524. data/doc/Users guide.txt +0 -8
  525. data/src/cxx_supportlib/vendor-modified/boost/align/align.hpp +0 -20
  526. data/src/cxx_supportlib/vendor-modified/boost/align/detail/address.hpp +0 -29
  527. data/src/cxx_supportlib/vendor-modified/boost/align/detail/align.hpp +0 -40
  528. data/src/cxx_supportlib/vendor-modified/boost/align/detail/align_cxx11.hpp +0 -22
  529. data/src/cxx_supportlib/vendor-modified/boost/align/detail/is_alignment.hpp +0 -29
  530. data/src/cxx_supportlib/vendor-modified/boost/container/detail/hash_table.hpp +0 -383
  531. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/array_allocator.hpp +0 -318
  532. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/array_count_impl.hpp +0 -67
  533. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/array_traits.hpp +0 -60
  534. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/array_utility.hpp +0 -214
  535. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_if_array.hpp +0 -34
  536. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/allocate.hpp +0 -1128
  537. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/buckets.hpp +0 -928
  538. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/equivalent.hpp +0 -686
  539. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/extract_key.hpp +0 -188
  540. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/table.hpp +0 -873
  541. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/unique.hpp +0 -628
  542. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/util.hpp +0 -266
@@ -1,3026 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5
- <meta name="generator" content="AsciiDoc 8.6.7">
6
- <title>Phusion Passenger users guide, Nginx version</title>
7
- <style type="text/css">
8
- /* Shared CSS for AsciiDoc xhtml11 and html5 backends */
9
-
10
- /* Default font. */
11
- body {
12
- font-family: Georgia,serif;
13
- }
14
-
15
- /* Title font. */
16
- h1, h2, h3, h4, h5, h6,
17
- div.title, caption.title,
18
- thead, p.table.header,
19
- #toctitle,
20
- #author, #revnumber, #revdate, #revremark,
21
- #footer {
22
- font-family: Arial,Helvetica,sans-serif;
23
- }
24
-
25
- body {
26
- margin: 1em 5% 1em 5%;
27
- }
28
-
29
- a {
30
- color: blue;
31
- text-decoration: underline;
32
- }
33
- a:visited {
34
- color: fuchsia;
35
- }
36
-
37
- em {
38
- font-style: italic;
39
- color: navy;
40
- }
41
-
42
- strong {
43
- font-weight: bold;
44
- color: #083194;
45
- }
46
-
47
- h1, h2, h3, h4, h5, h6 {
48
- color: #527bbd;
49
- margin-top: 1.2em;
50
- margin-bottom: 0.5em;
51
- line-height: 1.3;
52
- }
53
-
54
- h1, h2, h3 {
55
- border-bottom: 2px solid silver;
56
- }
57
- h2 {
58
- padding-top: 0.5em;
59
- }
60
- h3 {
61
- float: left;
62
- }
63
- h3 + * {
64
- clear: left;
65
- }
66
- h5 {
67
- font-size: 1.0em;
68
- }
69
-
70
- div.sectionbody {
71
- margin-left: 0;
72
- }
73
-
74
- hr {
75
- border: 1px solid silver;
76
- }
77
-
78
- p {
79
- margin-top: 0.5em;
80
- margin-bottom: 0.5em;
81
- }
82
-
83
- ul, ol, li > p {
84
- margin-top: 0;
85
- }
86
- ul > li { color: #aaa; }
87
- ul > li > * { color: black; }
88
-
89
- pre {
90
- padding: 0;
91
- margin: 0;
92
- overflow: auto;
93
- }
94
-
95
- #author {
96
- color: #527bbd;
97
- font-weight: bold;
98
- font-size: 1.1em;
99
- }
100
- #email {
101
- }
102
- #revnumber, #revdate, #revremark {
103
- }
104
-
105
- #footer {
106
- font-size: small;
107
- border-top: 2px solid silver;
108
- padding-top: 0.5em;
109
- margin-top: 4.0em;
110
- }
111
- #footer-text {
112
- float: left;
113
- padding-bottom: 0.5em;
114
- }
115
- #footer-badges {
116
- float: right;
117
- padding-bottom: 0.5em;
118
- }
119
-
120
- #preamble {
121
- margin-top: 1.5em;
122
- margin-bottom: 1.5em;
123
- }
124
- div.imageblock, div.exampleblock, div.verseblock,
125
- div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
126
- div.admonitionblock {
127
- margin-top: 1.0em;
128
- margin-bottom: 1.5em;
129
- }
130
- div.admonitionblock {
131
- margin-top: 2.0em;
132
- margin-bottom: 2.0em;
133
- margin-right: 10%;
134
- color: #606060;
135
- }
136
-
137
- div.content { /* Block element content. */
138
- padding: 0;
139
- }
140
-
141
- /* Block element titles. */
142
- div.title, caption.title {
143
- color: #527bbd;
144
- font-weight: bold;
145
- text-align: left;
146
- margin-top: 1.0em;
147
- margin-bottom: 0.5em;
148
- }
149
- div.title + * {
150
- margin-top: 0;
151
- }
152
-
153
- td div.title:first-child {
154
- margin-top: 0.0em;
155
- }
156
- div.content div.title:first-child {
157
- margin-top: 0.0em;
158
- }
159
- div.content + div.title {
160
- margin-top: 0.0em;
161
- }
162
-
163
- div.sidebarblock > div.content {
164
- background: #ffffee;
165
- border: 1px solid #dddddd;
166
- border-left: 4px solid #f0f0f0;
167
- padding: 0.5em;
168
- }
169
-
170
- div.listingblock > div.content {
171
- border: 1px solid #dddddd;
172
- border-left: 5px solid #f0f0f0;
173
- background: #f8f8f8;
174
- padding: 0.5em;
175
- }
176
-
177
- div.quoteblock, div.verseblock {
178
- padding-left: 1.0em;
179
- margin-left: 1.0em;
180
- margin-right: 10%;
181
- border-left: 5px solid #f0f0f0;
182
- color: #777777;
183
- }
184
-
185
- div.quoteblock > div.attribution {
186
- padding-top: 0.5em;
187
- text-align: right;
188
- }
189
-
190
- div.verseblock > pre.content {
191
- font-family: inherit;
192
- font-size: inherit;
193
- }
194
- div.verseblock > div.attribution {
195
- padding-top: 0.75em;
196
- text-align: left;
197
- }
198
- /* DEPRECATED: Pre version 8.2.7 verse style literal block. */
199
- div.verseblock + div.attribution {
200
- text-align: left;
201
- }
202
-
203
- div.admonitionblock .icon {
204
- vertical-align: top;
205
- font-size: 1.1em;
206
- font-weight: bold;
207
- text-decoration: underline;
208
- color: #527bbd;
209
- padding-right: 0.5em;
210
- }
211
- div.admonitionblock td.content {
212
- padding-left: 0.5em;
213
- border-left: 3px solid #dddddd;
214
- }
215
-
216
- div.exampleblock > div.content {
217
- border-left: 3px solid #dddddd;
218
- padding-left: 0.5em;
219
- }
220
-
221
- div.imageblock div.content { padding-left: 0; }
222
- span.image img { border-style: none; }
223
- a.image:visited { color: white; }
224
-
225
- dl {
226
- margin-top: 0.8em;
227
- margin-bottom: 0.8em;
228
- }
229
- dt {
230
- margin-top: 0.5em;
231
- margin-bottom: 0;
232
- font-style: normal;
233
- color: navy;
234
- }
235
- dd > *:first-child {
236
- margin-top: 0.1em;
237
- }
238
-
239
- ul, ol {
240
- list-style-position: outside;
241
- }
242
- ol.arabic {
243
- list-style-type: decimal;
244
- }
245
- ol.loweralpha {
246
- list-style-type: lower-alpha;
247
- }
248
- ol.upperalpha {
249
- list-style-type: upper-alpha;
250
- }
251
- ol.lowerroman {
252
- list-style-type: lower-roman;
253
- }
254
- ol.upperroman {
255
- list-style-type: upper-roman;
256
- }
257
-
258
- div.compact ul, div.compact ol,
259
- div.compact p, div.compact p,
260
- div.compact div, div.compact div {
261
- margin-top: 0.1em;
262
- margin-bottom: 0.1em;
263
- }
264
-
265
- tfoot {
266
- font-weight: bold;
267
- }
268
- td > div.verse {
269
- white-space: pre;
270
- }
271
-
272
- div.hdlist {
273
- margin-top: 0.8em;
274
- margin-bottom: 0.8em;
275
- }
276
- div.hdlist tr {
277
- padding-bottom: 15px;
278
- }
279
- dt.hdlist1.strong, td.hdlist1.strong {
280
- font-weight: bold;
281
- }
282
- td.hdlist1 {
283
- vertical-align: top;
284
- font-style: normal;
285
- padding-right: 0.8em;
286
- color: navy;
287
- }
288
- td.hdlist2 {
289
- vertical-align: top;
290
- }
291
- div.hdlist.compact tr {
292
- margin: 0;
293
- padding-bottom: 0;
294
- }
295
-
296
- .comment {
297
- background: yellow;
298
- }
299
-
300
- .footnote, .footnoteref {
301
- font-size: 0.8em;
302
- }
303
-
304
- span.footnote, span.footnoteref {
305
- vertical-align: super;
306
- }
307
-
308
- #footnotes {
309
- margin: 20px 0 20px 0;
310
- padding: 7px 0 0 0;
311
- }
312
-
313
- #footnotes div.footnote {
314
- margin: 0 0 5px 0;
315
- }
316
-
317
- #footnotes hr {
318
- border: none;
319
- border-top: 1px solid silver;
320
- height: 1px;
321
- text-align: left;
322
- margin-left: 0;
323
- width: 20%;
324
- min-width: 100px;
325
- }
326
-
327
- div.colist td {
328
- padding-right: 0.5em;
329
- padding-bottom: 0.3em;
330
- vertical-align: top;
331
- }
332
- div.colist td img {
333
- margin-top: 0.3em;
334
- }
335
-
336
- @media print {
337
- #footer-badges { display: none; }
338
- }
339
-
340
- #toc {
341
- margin-bottom: 2.5em;
342
- }
343
-
344
- #toctitle {
345
- color: #527bbd;
346
- font-size: 1.1em;
347
- font-weight: bold;
348
- margin-top: 1.0em;
349
- margin-bottom: 0.1em;
350
- }
351
-
352
- div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
353
- margin-top: 0;
354
- margin-bottom: 0;
355
- }
356
- div.toclevel2 {
357
- margin-left: 2em;
358
- font-size: 0.9em;
359
- }
360
- div.toclevel3 {
361
- margin-left: 4em;
362
- font-size: 0.9em;
363
- }
364
- div.toclevel4 {
365
- margin-left: 6em;
366
- font-size: 0.9em;
367
- }
368
-
369
- span.aqua { color: aqua; }
370
- span.black { color: black; }
371
- span.blue { color: blue; }
372
- span.fuchsia { color: fuchsia; }
373
- span.gray { color: gray; }
374
- span.green { color: green; }
375
- span.lime { color: lime; }
376
- span.maroon { color: maroon; }
377
- span.navy { color: navy; }
378
- span.olive { color: olive; }
379
- span.purple { color: purple; }
380
- span.red { color: red; }
381
- span.silver { color: silver; }
382
- span.teal { color: teal; }
383
- span.white { color: white; }
384
- span.yellow { color: yellow; }
385
-
386
- span.aqua-background { background: aqua; }
387
- span.black-background { background: black; }
388
- span.blue-background { background: blue; }
389
- span.fuchsia-background { background: fuchsia; }
390
- span.gray-background { background: gray; }
391
- span.green-background { background: green; }
392
- span.lime-background { background: lime; }
393
- span.maroon-background { background: maroon; }
394
- span.navy-background { background: navy; }
395
- span.olive-background { background: olive; }
396
- span.purple-background { background: purple; }
397
- span.red-background { background: red; }
398
- span.silver-background { background: silver; }
399
- span.teal-background { background: teal; }
400
- span.white-background { background: white; }
401
- span.yellow-background { background: yellow; }
402
-
403
- span.big { font-size: 2em; }
404
- span.small { font-size: 0.6em; }
405
-
406
- span.underline { text-decoration: underline; }
407
- span.overline { text-decoration: overline; }
408
- span.line-through { text-decoration: line-through; }
409
-
410
-
411
- /*
412
- * xhtml11 specific
413
- *
414
- * */
415
-
416
- tt {
417
- font-family: monospace;
418
- font-size: inherit;
419
- color: navy;
420
- }
421
-
422
- div.tableblock {
423
- margin-top: 1.0em;
424
- margin-bottom: 1.5em;
425
- }
426
- div.tableblock > table {
427
- border: 3px solid #527bbd;
428
- }
429
- thead, p.table.header {
430
- font-weight: bold;
431
- color: #527bbd;
432
- }
433
- p.table {
434
- margin-top: 0;
435
- }
436
- /* Because the table frame attribute is overriden by CSS in most browsers. */
437
- div.tableblock > table[frame="void"] {
438
- border-style: none;
439
- }
440
- div.tableblock > table[frame="hsides"] {
441
- border-left-style: none;
442
- border-right-style: none;
443
- }
444
- div.tableblock > table[frame="vsides"] {
445
- border-top-style: none;
446
- border-bottom-style: none;
447
- }
448
-
449
-
450
- /*
451
- * html5 specific
452
- *
453
- * */
454
-
455
- .monospaced {
456
- font-family: monospace;
457
- font-size: inherit;
458
- color: navy;
459
- }
460
-
461
- table.tableblock {
462
- margin-top: 1.0em;
463
- margin-bottom: 1.5em;
464
- }
465
- thead, p.tableblock.header {
466
- font-weight: bold;
467
- color: #527bbd;
468
- }
469
- p.tableblock {
470
- margin-top: 0;
471
- }
472
- table.tableblock {
473
- border-width: 3px;
474
- border-spacing: 0px;
475
- border-style: solid;
476
- border-color: #527bbd;
477
- border-collapse: collapse;
478
- }
479
- th.tableblock, td.tableblock {
480
- border-width: 1px;
481
- padding: 4px;
482
- border-style: solid;
483
- border-color: #527bbd;
484
- }
485
-
486
- table.tableblock.frame-topbot {
487
- border-left-style: hidden;
488
- border-right-style: hidden;
489
- }
490
- table.tableblock.frame-sides {
491
- border-top-style: hidden;
492
- border-bottom-style: hidden;
493
- }
494
- table.tableblock.frame-none {
495
- border-style: hidden;
496
- }
497
-
498
- th.tableblock.halign-left, td.tableblock.halign-left {
499
- text-align: left;
500
- }
501
- th.tableblock.halign-center, td.tableblock.halign-center {
502
- text-align: center;
503
- }
504
- th.tableblock.halign-right, td.tableblock.halign-right {
505
- text-align: right;
506
- }
507
-
508
- th.tableblock.valign-top, td.tableblock.valign-top {
509
- vertical-align: top;
510
- }
511
- th.tableblock.valign-middle, td.tableblock.valign-middle {
512
- vertical-align: middle;
513
- }
514
- th.tableblock.valign-bottom, td.tableblock.valign-bottom {
515
- vertical-align: bottom;
516
- }
517
-
518
-
519
- /*
520
- * manpage specific
521
- *
522
- * */
523
-
524
- body.manpage h1 {
525
- padding-top: 0.5em;
526
- padding-bottom: 0.5em;
527
- border-top: 2px solid silver;
528
- border-bottom: 2px solid silver;
529
- }
530
- body.manpage h2 {
531
- border-style: none;
532
- }
533
- body.manpage div.sectionbody {
534
- margin-left: 3em;
535
- }
536
-
537
- @media print {
538
- body.manpage div#toc { display: none; }
539
- }
540
-
541
-
542
- /*
543
- * Theme specific overrides of the preceding (asciidoc.css) CSS.
544
- *
545
- */
546
- body {
547
- font-family: Garamond, Georgia, serif;
548
- font-size: 17px;
549
- color: #3E4349;
550
- line-height: 1.3em;
551
- }
552
- h1, h2, h3, h4, h5, h6,
553
- div.title, caption.title,
554
- thead, p.table.header,
555
- #toctitle,
556
- #author, #revnumber, #revdate, #revremark,
557
- #footer {
558
- font-family: Garmond, Georgia, serif;
559
- font-weight: normal;
560
- border-bottom-width: 0;
561
- color: #3E4349;
562
- }
563
- div.title, caption.title { color: #596673; font-weight: bold; }
564
- h1 { font-size: 240%; }
565
- h2 { font-size: 180%; }
566
- h3 { font-size: 150%; }
567
- h4 { font-size: 130%; }
568
- h5 { font-size: 115%; }
569
- h6 { font-size: 100%; }
570
- #header h1 { margin-top: 0; }
571
- #toc {
572
- color: #444444;
573
- line-height: 1.5;
574
- padding-top: 1.5em;
575
- }
576
- #toctitle {
577
- font-size: 20px;
578
- }
579
- #toc a {
580
- border-bottom: 1px dotted #999999;
581
- color: #444444 !important;
582
- text-decoration: none !important;
583
- }
584
- #toc a:hover {
585
- border-bottom: 1px solid #6D4100;
586
- color: #6D4100 !important;
587
- text-decoration: none !important;
588
- }
589
- div.toclevel1 { margin-top: 0.2em; font-size: 16px; }
590
- div.toclevel2 { margin-top: 0.15em; font-size: 14px; }
591
- em, dt, td.hdlist1 { color: black; }
592
- strong { color: #3E4349; }
593
- a { color: #004B6B; text-decoration: none; border-bottom: 1px dotted #004B6B; }
594
- a:visited { color: #615FA0; border-bottom: 1px dotted #615FA0; }
595
- a:hover { color: #6D4100; border-bottom: 1px solid #6D4100; }
596
- div.tableblock > table, table.tableblock { border: 3px solid #E8E8E8; }
597
- th.tableblock, td.tableblock { border: 1px solid #E8E8E8; }
598
- ul > li > * { color: #3E4349; }
599
- pre, tt, .monospaced { font-family: Consolas,Menlo,'Deja Vu Sans Mono','Bitstream Vera Sans Mono',monospace; }
600
- tt, .monospaced { font-size: 0.9em; color: black;
601
- }
602
- div.exampleblock > div.content, div.sidebarblock > div.content, div.listingblock > div.content { border-width: 0 0 0 3px; border-color: #E8E8E8; }
603
- div.verseblock { border-left-width: 0; margin-left: 3em; }
604
- div.quoteblock { border-left-width: 3px; margin-left: 0; margin-right: 0;}
605
- div.admonitionblock td.content { border-left: 3px solid #E8E8E8; }
606
- </style>
607
- <script type="text/javascript">
608
- /*<![CDATA[*/
609
- var asciidoc = { // Namespace.
610
-
611
- /////////////////////////////////////////////////////////////////////
612
- // Table Of Contents generator
613
- /////////////////////////////////////////////////////////////////////
614
-
615
- /* Author: Mihai Bazon, September 2002
616
- * http://students.infoiasi.ro/~mishoo
617
- *
618
- * Table Of Content generator
619
- * Version: 0.4
620
- *
621
- * Feel free to use this script under the terms of the GNU General Public
622
- * License, as long as you do not remove or alter this notice.
623
- */
624
-
625
- /* modified by Troy D. Hanson, September 2006. License: GPL */
626
- /* modified by Stuart Rackham, 2006, 2009. License: GPL */
627
-
628
- // toclevels = 1..4.
629
- toc: function (toclevels) {
630
-
631
- function getText(el) {
632
- var text = "";
633
- for (var i = el.firstChild; i != null; i = i.nextSibling) {
634
- if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
635
- text += i.data;
636
- else if (i.firstChild != null)
637
- text += getText(i);
638
- }
639
- return text;
640
- }
641
-
642
- function TocEntry(el, text, toclevel) {
643
- this.element = el;
644
- this.text = text;
645
- this.toclevel = toclevel;
646
- }
647
-
648
- function tocEntries(el, toclevels) {
649
- var result = new Array;
650
- var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
651
- // Function that scans the DOM tree for header elements (the DOM2
652
- // nodeIterator API would be a better technique but not supported by all
653
- // browsers).
654
- var iterate = function (el) {
655
- for (var i = el.firstChild; i != null; i = i.nextSibling) {
656
- if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
657
- var mo = re.exec(i.tagName);
658
- if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
659
- result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
660
- }
661
- iterate(i);
662
- }
663
- }
664
- }
665
- iterate(el);
666
- return result;
667
- }
668
-
669
- var toc = document.getElementById("toc");
670
- if (!toc) {
671
- return;
672
- }
673
-
674
- // Delete existing TOC entries in case we're reloading the TOC.
675
- var tocEntriesToRemove = [];
676
- var i;
677
- for (i = 0; i < toc.childNodes.length; i++) {
678
- var entry = toc.childNodes[i];
679
- if (entry.nodeName.toLowerCase() == 'div'
680
- && entry.getAttribute("class")
681
- && entry.getAttribute("class").match(/^toclevel/))
682
- tocEntriesToRemove.push(entry);
683
- }
684
- for (i = 0; i < tocEntriesToRemove.length; i++) {
685
- toc.removeChild(tocEntriesToRemove[i]);
686
- }
687
-
688
- // Rebuild TOC entries.
689
- var entries = tocEntries(document.getElementById("content"), toclevels);
690
- for (var i = 0; i < entries.length; ++i) {
691
- var entry = entries[i];
692
- if (entry.element.id == "")
693
- entry.element.id = "_toc_" + i;
694
- var a = document.createElement("a");
695
- a.href = "#" + entry.element.id;
696
- a.appendChild(document.createTextNode(entry.text));
697
- var div = document.createElement("div");
698
- div.appendChild(a);
699
- div.className = "toclevel" + entry.toclevel;
700
- toc.appendChild(div);
701
- }
702
- if (entries.length == 0)
703
- toc.parentNode.removeChild(toc);
704
- },
705
-
706
-
707
- /////////////////////////////////////////////////////////////////////
708
- // Footnotes generator
709
- /////////////////////////////////////////////////////////////////////
710
-
711
- /* Based on footnote generation code from:
712
- * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
713
- */
714
-
715
- footnotes: function () {
716
- // Delete existing footnote entries in case we're reloading the footnodes.
717
- var i;
718
- var noteholder = document.getElementById("footnotes");
719
- if (!noteholder) {
720
- return;
721
- }
722
- var entriesToRemove = [];
723
- for (i = 0; i < noteholder.childNodes.length; i++) {
724
- var entry = noteholder.childNodes[i];
725
- if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
726
- entriesToRemove.push(entry);
727
- }
728
- for (i = 0; i < entriesToRemove.length; i++) {
729
- noteholder.removeChild(entriesToRemove[i]);
730
- }
731
-
732
- // Rebuild footnote entries.
733
- var cont = document.getElementById("content");
734
- var spans = cont.getElementsByTagName("span");
735
- var refs = {};
736
- var n = 0;
737
- for (i=0; i<spans.length; i++) {
738
- if (spans[i].className == "footnote") {
739
- n++;
740
- var note = spans[i].getAttribute("data-note");
741
- if (!note) {
742
- // Use [\s\S] in place of . so multi-line matches work.
743
- // Because JavaScript has no s (dotall) regex flag.
744
- note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
745
- spans[i].innerHTML =
746
- "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
747
- "' title='View footnote' class='footnote'>" + n + "</a>]";
748
- spans[i].setAttribute("data-note", note);
749
- }
750
- noteholder.innerHTML +=
751
- "<div class='footnote' id='_footnote_" + n + "'>" +
752
- "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
753
- n + "</a>. " + note + "</div>";
754
- var id =spans[i].getAttribute("id");
755
- if (id != null) refs["#"+id] = n;
756
- }
757
- }
758
- if (n == 0)
759
- noteholder.parentNode.removeChild(noteholder);
760
- else {
761
- // Process footnoterefs.
762
- for (i=0; i<spans.length; i++) {
763
- if (spans[i].className == "footnoteref") {
764
- var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
765
- href = href.match(/#.*/)[0]; // Because IE return full URL.
766
- n = refs[href];
767
- spans[i].innerHTML =
768
- "[<a href='#_footnote_" + n +
769
- "' title='View footnote' class='footnote'>" + n + "</a>]";
770
- }
771
- }
772
- }
773
- },
774
-
775
- install: function(toclevels) {
776
- var timerId;
777
-
778
- function reinstall() {
779
- asciidoc.footnotes();
780
- if (toclevels) {
781
- asciidoc.toc(toclevels);
782
- }
783
- }
784
-
785
- function reinstallAndRemoveTimer() {
786
- clearInterval(timerId);
787
- reinstall();
788
- }
789
-
790
- timerId = setInterval(reinstall, 500);
791
- if (document.addEventListener)
792
- document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
793
- else
794
- window.onload = reinstallAndRemoveTimer;
795
- }
796
-
797
- }
798
- asciidoc.install();
799
- /*]]>*/
800
- </script>
801
- <style type="text/css">
802
- body {
803
- margin: 1em auto 1em auto;
804
- padding: 0 1em 0 1em;
805
- max-width: 800px;
806
- }
807
-
808
- a.image {
809
- border: none;
810
- }
811
-
812
- .comments {
813
- display: block;
814
- background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAgCAYAAAB6kdqOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAB0wAAAdMBc2+PegAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAASjSURBVFiFvZdPaBxVHMc/b/7sbNLdxG13s0sbE1jBxELVbVGEgqmQiiBiDxZqKRWhR0Fqe/BSmoNQSNmrt4ISTyV3byWLHorVU5dYtgVpk4DGhXZ1a7rZmXkeMm99eZn9k1b9wY/3Z2f2fX7f3++9mRFSSnQTQgjAAkTkaO2zmtRaCYTSABBqrIEkS6VS9vTp069lMpmClFL4vt8BCsNwWwsQBAHm7+Y4CAKEEEGtVvtlYWHhbqvVagJ/AE90MCGlVDD2xYsXiydPnvza87wXksnk8NDQUFIPQPW7zfXyMAwJw5BGo/FXs9ncvHfv3tKFCxe+aLfbDyKwQEopFZBdLpdfnp2d/Tafz4+5rhsxghAC1d+h/y5gzH69XvdrtdqDs2fPfuT7/jLQkFIGlhBC5HK5oZmZmW8KhUI+kUgIy7KwLAvbtrFte1vfdHVtnKtg9L7yffv2OcViceLSpUufA88DSSGEcABrfn7+zdHR0UnXdWNv1tXqpY6phGVZnRoy/0MIQT6fdw4ePHgUKAK/AU8sQOzfv/+tdDq9x4xKd1MVU51uSvTzVCrlTU9PTwN7AGEBYmRk5FXXdTvk+gI6kJnGQQG6KQQwMjLiTk1NTQIJBQTgmAWst2rhfiBxC3ab00wAbtRugZjb2LzR3O7d2rh7+s2Ztg1IwajChK2DTSlggpuFrHs34H7BOHELqN0Rl5K4P+4GNQioPt8BUqeoqpd+MGYQvQ7DfrCxKVNAcTCws0B7RdrvhO4HtS1lCkYtbKrT7WB8GihdQf2B3FFIPbEH2cY6iAljjk1l4qB2KKSrMwjMblXqpVpfIF2lXjBxULsB06HigDb1lA2ijgm0WyithmS73faJ3iYdgHq9/tOBAwfe9jyvJ4wam1H1O196QT18+HBzeXl5FQgVkLxz5873k5OTzWw2m+oHE6dMHEw3EGBbuh4/fuyvrKysAS1AOkA4Nzf3w5EjR+6m0+mS/tTvBhMH1U2lXgqtra21l5aWvgNWgCYQ2tH/hY1G48epqal3Pc/b4ziOGLQegiCIPVv0ubhDcXV1dfP27dv3y+Xyl0AVqAO+/pKfmpiYeHFubm4+m82+kkgkPNd1nbjI9TaZTNqu61rRQpbrujiOs+O6MAx59OhRuL6+3mq1Wq1KpXJjYWFhMYK5DzSljF7yo7RYwBCQBfKlUml6bGxsMggCLwgC/Ruts4CRPpFMJodnZmbeKBaLLxUKheFMJmPr6a5Wq0+uXLmyWK1WK8DPwBrwO7AhpQxB+y6LoARbhe4Bw0AyGlv0N/Vd56VSqb3nzp378PDhw+/ncrnnCoWCZ1kWvu9z69at9fPnz3+6sbFxE/gVaEkNYhuQBqUvsBtTSnrAKDB25syZ944dO/ZxNpvNjY+PDzebTb9Sqdy8fPnyZ0AN+FOpEwv0rKYFZEdgaSB7/PjxoydOnPgkl8tNAN7169fLi4uLX7G1w/5RadDnz9N4pJbNVupzwHSpVPrg6tWrN65du/broUOHZoEMYHXu+S+BYsA8YC9QHB8ff/3UqVPvREC2uvZfT1kvi9KpNo7LVo1uApsqZf8rkAHWMX2X/Q1tcUY1hl3QyQAAAABJRU5ErkJggg==') top left no-repeat;
815
- float: left;
816
- margin-left: -55px;
817
- width: 36px;
818
- height: 48px;
819
- line-height: 0;
820
- color: black;
821
- text-decoration: none !important;
822
- border: none !important;
823
- }
824
-
825
- #toc .comments {
826
- margin-top: 0.25em;
827
- }
828
-
829
- .sect1 .comments {
830
- margin-top: 0.5em;
831
- }
832
-
833
- .sect2 .comments {
834
- margin-top: 1.15em;
835
- }
836
-
837
- .sect3 .comments {
838
- margin-top: -1em;
839
- }
840
-
841
- .comments.empty {
842
- opacity: 0.2;
843
- }
844
-
845
- .comments.empty:hover,
846
- .comments.nonempty {
847
- opacity: 1;
848
- }
849
-
850
- .comments .count {
851
- display: block;
852
- font-size: 80%;
853
- padding-top: 12px;
854
- text-align: center;
855
- text-shadow: 1px 1px 2px white;
856
- }
857
-
858
- #comments_lightbox_shadow {
859
- position: fixed;
860
- top: 0;
861
- left: 0;
862
- right: 0;
863
- bottom: 0;
864
- background: black;
865
- opacity: 0.7;
866
- z-index: 10;
867
- }
868
-
869
- #comments_lightbox_contents {
870
- position: fixed;
871
- top: 10%;
872
- left: 20%;
873
- right: 20%;
874
- bottom: 10%;
875
- background: white;
876
- overflow: auto;
877
- z-index: 11;
878
- }
879
-
880
- #comments_lightbox_contents > .shell {
881
- margin: 2em;
882
- }
883
-
884
- pre {
885
- overflow: auto;
886
- }
887
-
888
- @media print {
889
- body {
890
- font-size: 18pt;
891
- }
892
-
893
- #header h1 {
894
- page-break-after: always;
895
- font-size: 500%;
896
- vertical-align: middle;
897
- }
898
-
899
- #header {
900
- page-break-after: always;
901
- }
902
-
903
- #toctitle {
904
- font-size: 200%;
905
- margin-bottom: 1em;
906
- }
907
-
908
- div.toclevel1 {
909
- font-size: 100%;
910
- }
911
-
912
- div.toclevel2 {
913
- font-size: 90%;
914
- }
915
-
916
- div.toclevel3 {
917
- font-size: 80%;
918
- }
919
-
920
- #content .comments {
921
- display: none;
922
- }
923
-
924
- @page :left {
925
- @bottom-left {
926
- content: counter(page);
927
- }
928
- }
929
- }
930
-
931
- #topbar {
932
- position: fixed;
933
- left: 0;
934
- top: 0;
935
- right: 0;
936
- height: 2.5em;
937
- padding-left: 10%;
938
- padding-right: 10%;
939
- z-index: 1;
940
- background: #880000;
941
- overflow: hidden;
942
- white-space: nowrap;
943
- box-shadow: 0px 3px 6px #555555;
944
- -moz-box-shadow: 0px 3px 6px #555555;
945
- -webkit-box-shadow: 0px 3px 6px #555555;
946
- -o-box-shadow: 0px 3px 6px #555555;
947
- }
948
-
949
- #topbar .title {
950
- display: inline-block;
951
- margin: 0.6em 1em 0 0;
952
- vertical-align: top;
953
- }
954
-
955
- #topbar .title img {
956
- display: none;
957
- margin-right: 6px;
958
- vertical-align: middle;
959
- }
960
-
961
- #topbar .title a {
962
- color: #fffafa;
963
- border: 0;
964
- }
965
-
966
- #topbar .title:hover img,
967
- .mobile #topbar .title img {
968
- display: inline-block;
969
- margin-left: -17px;
970
- }
971
-
972
- #topbar .title:hover a,
973
- .mobile #topbar .title a {
974
- color: #ffffdd;
975
- }
976
-
977
- #floattoc {
978
- position: fixed;
979
- z-index: 1;
980
- top: 2em;
981
- bottom: 20%;
982
- width: 50%;
983
- background: #f0f0f0;
984
- color: black;
985
- box-shadow: 0px 6px 6px #555555;
986
- -moz-box-shadow: 0px 6px 6px #555555;
987
- -webkit-box-shadow: 0px 6px 6px #555555;
988
- -o-box-shadow: 0px 6px 6px #555555;
989
- overflow: auto;
990
- padding: 1em;
991
- border-radius: 6px;
992
- -webkit-border-radius: 8px;
993
- -webkit-border-top-left-radius: 0;
994
- -webkit-border-top-right-radius: 0;
995
- -moz-border-radius: 8px;
996
- -moz-border-radius-topleft: 0;
997
- -moz-border-top-right-radius: 0;
998
- -o-border-radius: 8px;
999
- -o-border-radius-topleft: 0;
1000
- -o-border-top-right-radius: 0;
1001
- border-radius: 8px;
1002
- border-top-left-radius: 0;
1003
- border-top-right-radius: 0;
1004
- }
1005
-
1006
- #floattoc a.current {
1007
- font-weight: bold;
1008
- color: black;
1009
- }
1010
-
1011
- #current_section {
1012
- display: inline-block;
1013
- margin: 0.5em 0 0 0;
1014
- padding: 0.2em 0.5em 0.2em 0.5em;
1015
- background: #550000;
1016
- font-size: 90%;
1017
- vertical-align: top;
1018
- color: white;
1019
- border: none;
1020
- -webkit-border-radius: 8px;
1021
- -moz-border-radius: 8px;
1022
- -o-border-radius: 8px;
1023
- border-radius: 8px;
1024
- }
1025
-
1026
- #current_section:hover {
1027
- text-decoration: none;
1028
- border: none;
1029
- }
1030
-
1031
- #current_section.pressed {
1032
- background: #f0f0f0;
1033
- color: black;
1034
- -webkit-border-top-left-radius: 8px;
1035
- -webkit-border-top-right-radius: 8px;
1036
- -webkit-border-bottom-left-radius: 0;
1037
- -webkit-border-bottom-right-radius: 0;
1038
- -moz-border-radius-topleft: 8px;
1039
- -moz-border-radius-topright: 8px;
1040
- -moz-border-bottom-left-radius: 0;
1041
- -moz-border-bottom-right-radius: 0;
1042
- border-top-left-radius: 8px;
1043
- border-top-right-radius: 8px;
1044
- border-bottom-left-radius: 0;
1045
- border-bottom-right-radius: 0;
1046
- }
1047
-
1048
- /* http://nicolasgallagher.com/jump-links-and-viewport-positioning/ */
1049
- .anchor_helper {
1050
- position: relative;
1051
- display: block;
1052
- top: -50px;
1053
- width: 1px;
1054
- height: 1px;
1055
- }
1056
-
1057
- </style>
1058
- </head>
1059
- <body class="article">
1060
- <div id="topbar" style="display: none">
1061
- <div class="title">
1062
- <!-- Don't put a space between the img and a. That will break the hover layout. -->
1063
- <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAKCAYAAAEV95QVAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sGCRMSACDxkZwAAAAidEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVAgb24gYSBNYWOHqHdDAAAAZUlEQVQY032PSxbAIAjEIlfygL6ePF3UUvpzNjgSYWwqAMEhUQnANnsC7TQPeJpsVWzMuh2sog4vDTUbqP081zECrW4dtdaQGSIKlWluPyjK+VXxAz5XfcKufCzA130AfQHWB30HZxlPaP080xsAAAAASUVORK5CYII=" width="11" height="10" alt=""><a href="javascript:void(Mizuho.smoothlyScrollToToc())">Phusion Passenger users guide, Nginx version</a>
1064
- </div>
1065
- <a href="javascript:void(0)" id="current_section"></a>
1066
- </div>
1067
- <div id="header">
1068
- <h1>Phusion Passenger users guide, Nginx version</h1>
1069
- <div id="preamble">
1070
- <div class="sectionbody">
1071
- <div class="paragraph"><p><span class="image">
1072
- <a class="image" href="http://www.phusion.nl/">
1073
- <img src="images/phusion_banner.png" alt="images/phusion_banner.png">
1074
- </a>
1075
- </span></p></div>
1076
- <div class="paragraph"><p>This is the old, deprecated Passenger for Nginx documentation. Please visit <a href="https://www.phusionpassenger.com/library/">https://www.phusionpassenger.com/library/</a> for the new documentation.</p></div>
1077
- </div>
1078
- </div>
1079
- <div id="toc">
1080
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><div id="toctitle">Table of Contents</div>
1081
- <div class="foo toclevel2"><a href="#_support_information">1. Support information</a></div>
1082
- <div class="foo toclevel3"><a href="#_supported_operating_systems_and_languages">1.1. Supported operating systems and languages</a></div>
1083
- <div class="foo toclevel3"><a href="#where_to_get_support">1.2. Where to get support</a></div>
1084
- <div class="foo toclevel2"><a href="#installation">2. Installation</a></div>
1085
- <div class="foo toclevel3"><a href="#_synopsis">2.1. Synopsis</a></div>
1086
- <div class="foo toclevel3"><a href="#install_osx_homebrew">2.2. Installing or upgrading on Mac OS X with Homebrew</a></div>
1087
- <div class="foo toclevel3"><a href="#install_on_debian_ubuntu">2.3. Installing or upgrading on Debian or Ubuntu</a></div>
1088
- <div class="foo toclevel4"><a href="#install_add_apt_repo">2.3.1. Adding our APT repository</a></div>
1089
- <div class="foo toclevel4"><a href="#_installing_packages">2.3.2. Installing packages</a></div>
1090
- <div class="foo toclevel4"><a href="#inserting_passenger_root_for_apt">2.3.3. Inserting passenger_root into nginx.conf</a></div>
1091
- <div class="foo toclevel3"><a href="#installing_or_upgrading_on_red_hat">2.4. Installing or upgrading on Red Hat or CentOS</a></div>
1092
- <div class="foo toclevel4"><a href="#install_add_yum_repo">2.4.1. Adding our YUM repository</a></div>
1093
- <div class="foo toclevel4"><a href="#_installing_packages_2">2.4.2. Installing packages</a></div>
1094
- <div class="foo toclevel3"><a href="#_installing_or_upgrading_on_heroku">2.5. Installing or upgrading on Heroku</a></div>
1095
- <div class="foo toclevel3"><a href="#rubygems_generic_install">2.6. Generic installation, upgrade and downgrade method: via RubyGems</a></div>
1096
- <div class="foo toclevel3"><a href="#tarball_generic_install">2.7. Generic installation, upgrade and downgrade method: via tarball</a></div>
1097
- <div class="foo toclevel3"><a href="#_upgrading_from_open_source_to_enterprise">2.8. Upgrading from open source to Enterprise</a></div>
1098
- <div class="foo toclevel3"><a href="#_cryptographic_verification_of_installation_files">2.9. Cryptographic verification of installation files</a></div>
1099
- <div class="foo toclevel4"><a href="#_synopsis_2">2.9.1. Synopsis</a></div>
1100
- <div class="foo toclevel4"><a href="#_importing_the_phusion_software_signing_key">2.9.2. Importing the Phusion Software Signing key</a></div>
1101
- <div class="foo toclevel4"><a href="#_verifying_the_phusion_software_signing_key">2.9.3. Verifying the Phusion Software Signing key</a></div>
1102
- <div class="foo toclevel4"><a href="#_verifying_the_gem_and_tarball">2.9.4. Verifying the gem and tarball</a></div>
1103
- <div class="foo toclevel4"><a href="#_verifying_git_signatures">2.9.5. Verifying Git signatures</a></div>
1104
- <div class="foo toclevel4"><a href="#_verifying_debian_packages">2.9.6. Verifying Debian packages</a></div>
1105
- <div class="foo toclevel4"><a href="#_verifying_rpm_packages">2.9.7. Verifying RPM packages</a></div>
1106
- <div class="foo toclevel4"><a href="#_revocation">2.9.8. Revocation</a></div>
1107
- <div class="foo toclevel3"><a href="#_non_interactive_automatic_headless_installs_or_upgrades">2.10. Non-interactive, automatic, headless installs or upgrades</a></div>
1108
- <div class="foo toclevel3"><a href="#_customizing_the_compilation_process">2.11. Customizing the compilation process</a></div>
1109
- <div class="foo toclevel4"><a href="#_setting_the_compiler">2.11.1. Setting the compiler</a></div>
1110
- <div class="foo toclevel4"><a href="#_adding_additional_compiler_or_linker_flags">2.11.2. Adding additional compiler or linker flags</a></div>
1111
- <div class="foo toclevel4"><a href="#forcing_location_of_command_line_tools_and_dependencies">2.11.3. Forcing location of command line tools and dependencies</a></div>
1112
- <div class="foo toclevel3"><a href="#_installing_as_a_normal_nginx_module_without_using_the_installer">2.12. Installing as a normal Nginx module without using the installer</a></div>
1113
- <div class="foo toclevel3"><a href="#nginx_init_script">2.13. Creating an Nginx init script</a></div>
1114
- <div class="foo toclevel3"><a href="#_disabling_without_uninstalling">2.14. Disabling without uninstalling</a></div>
1115
- <div class="foo toclevel3"><a href="#uninstalling">2.15. Uninstalling</a></div>
1116
- <div class="foo toclevel3"><a href="#moving_phusion_passenger">2.16. Moving to a different directory</a></div>
1117
- <div class="foo toclevel2"><a href="#deploying_a_rack_app">3. Deploying a Rack-based Ruby application</a></div>
1118
- <div class="foo toclevel3"><a href="#_tutorial_example_writing_and_deploying_a_hello_world_rack_application">3.1. Tutorial/example: writing and deploying a Hello World Rack application</a></div>
1119
- <div class="foo toclevel3"><a href="#_deploying_to_a_virtual_host_8217_s_root">3.2. Deploying to a virtual host’s root</a></div>
1120
- <div class="foo toclevel3"><a href="#deploying_rack_to_sub_uri">3.3. Deploying to a sub URI</a></div>
1121
- <div class="foo toclevel3"><a href="#_redeploying_restarting_the_rack_application">3.4. Redeploying (restarting the Rack application)</a></div>
1122
- <div class="foo toclevel3"><a href="#_rackup_specifications_for_various_web_frameworks">3.5. Rackup specifications for various web frameworks</a></div>
1123
- <div class="foo toclevel2"><a href="#deploying_a_wsgi_app">4. Deploying a WSGI (Python) application</a></div>
1124
- <div class="foo toclevel3"><a href="#_tutorial_example_writing_and_deploying_a_hello_world_wsgi_application">4.1. Tutorial/example: writing and deploying a Hello World WSGI application</a></div>
1125
- <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>
1126
- <div class="foo toclevel3"><a href="#deploying_wsgi_to_sub_uri">4.3. Deploying to a sub URI</a></div>
1127
- <div class="foo toclevel3"><a href="#_redeploying_restarting_the_wsgi_application">4.4. Redeploying (restarting the WSGI application)</a></div>
1128
- <div class="foo toclevel3"><a href="#_sample_span_class_monospaced_passenger_wsgi_py_span_for_django">4.5. Sample passenger_wsgi.py for Django</a></div>
1129
- <div class="foo toclevel2"><a href="#_deploying_a_node_js_application">5. Deploying a Node.js application</a></div>
1130
- <div class="foo toclevel2"><a href="#_deploying_a_meteor_application">6. Deploying a Meteor application</a></div>
1131
- <div class="foo toclevel2"><a href="#_configuring_phusion_passenger">7. Configuring Phusion Passenger</a></div>
1132
- <div class="foo toclevel3"><a href="#PassengerRoot">7.1. passenger_root &lt;directory&gt;</a></div>
1133
- <div class="foo toclevel3"><a href="#_deployment_options">7.2. Deployment options</a></div>
1134
- <div class="foo toclevel4"><a href="#_passenger_enabled_lt_on_off_gt">7.2.1. passenger_enabled &lt;on|off&gt;</a></div>
1135
- <div class="foo toclevel4"><a href="#PassengerBaseURI">7.2.2. passenger_base_uri &lt;uri&gt;</a></div>
1136
- <div class="foo toclevel4"><a href="#PassengerDocumentRoot">7.2.3. passenger_document_root &lt;path&gt;</a></div>
1137
- <div class="foo toclevel3"><a href="#_application_loading_options">7.3. Application loading options</a></div>
1138
- <div class="foo toclevel4"><a href="#PassengerRuby">7.3.1. passenger_ruby &lt;filename&gt;</a></div>
1139
- <div class="foo toclevel4"><a href="#_passenger_python_lt_filename_gt">7.3.2. passenger_python &lt;filename&gt;</a></div>
1140
- <div class="foo toclevel4"><a href="#_passenger_nodejs_lt_filename_gt">7.3.3. passenger_nodejs &lt;filename&gt;</a></div>
1141
- <div class="foo toclevel4"><a href="#_passenger_meteor_app_settings_lt_filename_gt">7.3.4. passenger_meteor_app_settings &lt;filename&gt;</a></div>
1142
- <div class="foo toclevel4"><a href="#PassengerAppEnv">7.3.5. passenger_app_env &lt;string&gt;</a></div>
1143
- <div class="foo toclevel4"><a href="#RailsEnv">7.3.6. rails_env &lt;string&gt;</a></div>
1144
- <div class="foo toclevel4"><a href="#RackEnv">7.3.7. rack_env &lt;string&gt;</a></div>
1145
- <div class="foo toclevel4"><a href="#PassengerAppRoot">7.3.8. passenger_app_root &lt;path/to/root&gt;</a></div>
1146
- <div class="foo toclevel4"><a href="#PassengerAppGroupName">7.3.9. passenger_app_group_name &lt;name&gt;</a></div>
1147
- <div class="foo toclevel4"><a href="#PassengerAppType">7.3.10. passenger_app_type &lt;name&gt;</a></div>
1148
- <div class="foo toclevel4"><a href="#PassengerStartupFile">7.3.11. passenger_startup_file &lt;filename&gt;</a></div>
1149
- <div class="foo toclevel4"><a href="#PassengerSpawnMethod">7.3.12. passenger_spawn_method &lt;string&gt;</a></div>
1150
- <div class="foo toclevel4"><a href="#PassengerEnvVar">7.3.13. passenger_env_var &lt;name&gt; &lt;value&gt;</a></div>
1151
- <div class="foo toclevel4"><a href="#PassengerLoadShellEnvvars">7.3.14. passenger_load_shell_envvars &lt;on|off&gt;</a></div>
1152
- <div class="foo toclevel4"><a href="#PassengerRollingRestarts">7.3.15. passenger_rolling_restarts &lt;on|off&gt;</a></div>
1153
- <div class="foo toclevel4"><a href="#PassengerResistDeploymentErrors">7.3.16. passenger_resist_deployment_errors &lt;on|off&gt;</a></div>
1154
- <div class="foo toclevel3"><a href="#_security_options">7.4. Security options</a></div>
1155
- <div class="foo toclevel4"><a href="#PassengerUserSwitching">7.4.1. passenger_user_switching &lt;on|off&gt;</a></div>
1156
- <div class="foo toclevel4"><a href="#PassengerUser">7.4.2. passenger_user &lt;username&gt;</a></div>
1157
- <div class="foo toclevel4"><a href="#PassengerGroup">7.4.3. passenger_group &lt;group name&gt;</a></div>
1158
- <div class="foo toclevel4"><a href="#PassengerDefaultUser">7.4.4. passenger_default_user &lt;username&gt;</a></div>
1159
- <div class="foo toclevel4"><a href="#PassengerDefaultGroup">7.4.5. Passenger_default_group &lt;group name&gt;</a></div>
1160
- <div class="foo toclevel4"><a href="#_passenger_show_version_in_header_lt_on_off_gt">7.4.6. passenger_show_version_in_header &lt;on|off&gt;</a></div>
1161
- <div class="foo toclevel4"><a href="#PassengerFriendlyErrorPages">7.4.7. passenger_friendly_error_pages &lt;on|off&gt;</a></div>
1162
- <div class="foo toclevel3"><a href="#_resource_control_and_optimization_options">7.5. Resource control and optimization options</a></div>
1163
- <div class="foo toclevel4"><a href="#PassengerMaxPoolSize">7.5.1. passenger_max_pool_size &lt;integer&gt;</a></div>
1164
- <div class="foo toclevel4"><a href="#PassengerMinInstances">7.5.2. passenger_min_instances &lt;integer&gt;</a></div>
1165
- <div class="foo toclevel4"><a href="#PassengerMaxInstances">7.5.3. passenger_max_instances &lt;integer&gt;</a></div>
1166
- <div class="foo toclevel4"><a href="#_passenger_max_instances_per_app_lt_integer_gt">7.5.4. passenger_max_instances_per_app &lt;integer&gt;</a></div>
1167
- <div class="foo toclevel4"><a href="#PassengerPoolIdleTime">7.5.5. passenger_pool_idle_time &lt;integer&gt;</a></div>
1168
- <div class="foo toclevel4"><a href="#_passenger_max_preloader_idle_time_lt_integer_gt">7.5.6. passenger_max_preloader_idle_time &lt;integer&gt;</a></div>
1169
- <div class="foo toclevel4"><a href="#_passenger_start_timeout_lt_seconds_gt">7.5.7. passenger_start_timeout &lt;seconds&gt;</a></div>
1170
- <div class="foo toclevel4"><a href="#PassengerConcurrencyModel">7.5.8. passenger_concurrency_model &lt;process|thread&gt;</a></div>
1171
- <div class="foo toclevel4"><a href="#PassengerThreadCount">7.5.9. passenger_thread_count &lt;number&gt;</a></div>
1172
- <div class="foo toclevel4"><a href="#PassengerMaxRequests">7.5.10. passenger_max_requests &lt;integer&gt;</a></div>
1173
- <div class="foo toclevel4"><a href="#PassengerMaxRequestTime">7.5.11. passenger_max_request_time &lt;seconds&gt;</a></div>
1174
- <div class="foo toclevel4"><a href="#PassengerMemoryLimit">7.5.12. passenger_memory_limit &lt;integer&gt;</a></div>
1175
- <div class="foo toclevel4"><a href="#_passenger_stat_throttle_rate_lt_integer_gt">7.5.13. passenger_stat_throttle_rate &lt;integer&gt;</a></div>
1176
- <div class="foo toclevel4"><a href="#PassengerPreStart">7.5.14. passenger_pre_start &lt;url&gt;</a></div>
1177
- <div class="foo toclevel3"><a href="#_connection_handling_options">7.6. Connection handling options</a></div>
1178
- <div class="foo toclevel4"><a href="#PassengerSetHeader">7.6.1. passenger_set_header &lt;HTTP header name&gt; &lt;value&gt;</a></div>
1179
- <div class="foo toclevel4"><a href="#passenger_max_request_queue_size">7.6.2. passenger_max_request_queue_size &lt;number&gt;</a></div>
1180
- <div class="foo toclevel4"><a href="#passenger_request_queue_overflow_status_code">7.6.3. passenger_request_queue_overflow_status_code &lt;code&gt;</a></div>
1181
- <div class="foo toclevel4"><a href="#PassengerStickySessions">7.6.4. passenger_sticky_sessions &lt;on|off&gt;</a></div>
1182
- <div class="foo toclevel4"><a href="#PassengerStickySessionsCookieName">7.6.5. passenger_sticky_sessions_cookie_name</a></div>
1183
- <div class="foo toclevel4"><a href="#_passenger_ignore_client_abort_lt_on_off_gt">7.6.6. passenger_ignore_client_abort &lt;on|off&gt;</a></div>
1184
- <div class="foo toclevel4"><a href="#passenger_intercept_errors">7.6.7. passenger_intercept_errors &lt;on|off&gt;</a></div>
1185
- <div class="foo toclevel4"><a href="#_passenger_pass_header_lt_header_name_gt">7.6.8. passenger_pass_header &lt;header name&gt;</a></div>
1186
- <div class="foo toclevel4"><a href="#_passenger_ignore_headers_lt_header_names_8230_gt">7.6.9. passenger_ignore_headers &lt;header names…&gt;</a></div>
1187
- <div class="foo toclevel4"><a href="#_passenger_headers_hash_bucket_size_lt_size_gt">7.6.10. passenger_headers_hash_bucket_size &lt;size&gt;</a></div>
1188
- <div class="foo toclevel4"><a href="#_passenger_headers_hash_max_size_lt_size_gt">7.6.11. passenger_headers_hash_max_size &lt;size&gt;</a></div>
1189
- <div class="foo toclevel4"><a href="#passenger_buffer_response">7.6.12. passenger_buffer_response &lt;on|off&gt;</a></div>
1190
- <div class="foo toclevel4"><a href="#PassengerResponseBufferHighWatermark">7.6.13. passenger_response_buffer_high_watermark &lt;bytes&gt;</a></div>
1191
- <div class="foo toclevel4"><a href="#_passenger_buffer_size">7.6.14. passenger_buffer_size</a></div>
1192
- <div class="foo toclevel4"><a href="#_passenger_buffers">7.6.15. passenger_buffers</a></div>
1193
- <div class="foo toclevel4"><a href="#_passenger_busy_buffers_size">7.6.16. passenger_busy_buffers_size</a></div>
1194
- <div class="foo toclevel3"><a href="#_logging_and_debugging_options">7.7. Logging and debugging options</a></div>
1195
- <div class="foo toclevel4"><a href="#PassengerLogLevel">7.7.1. passenger_log_level &lt;integer&gt;</a></div>
1196
- <div class="foo toclevel4"><a href="#PassengerLogFile">7.7.2. passenger_log_file &lt;filename&gt;</a></div>
1197
- <div class="foo toclevel4"><a href="#_passengerfiledescriptorlogfile_lt_filename_gt">7.7.3. PassengerFileDescriptorLogFile &lt;filename&gt;</a></div>
1198
- <div class="foo toclevel4"><a href="#_passenger_debugger_lt_on_off_gt">7.7.4. passenger_debugger &lt;on|off&gt;</a></div>
1199
- <div class="foo toclevel3"><a href="#_advanced_options">7.8. Advanced options</a></div>
1200
- <div class="foo toclevel4"><a href="#PassengerInstanceRegistryDir">7.8.1. passenger_instance_registry_dir &lt;directory&gt;</a></div>
1201
- <div class="foo toclevel4"><a href="#PassengerDataBufferDir">7.8.2. passenger_data_buffer_dir &lt;directory&gt;</a></div>
1202
- <div class="foo toclevel4"><a href="#_passenger_fly_with_lt_socket_filename_gt">7.8.3. passenger_fly_with &lt;socket filename&gt;</a></div>
1203
- <div class="foo toclevel3"><a href="#_deprecated_or_removed_options">7.9. Deprecated or removed options</a></div>
1204
- <div class="foo toclevel4"><a href="#_rails_spawn_method">7.9.1. rails_spawn_method</a></div>
1205
- <div class="foo toclevel4"><a href="#_passenger_debug_log_file">7.9.2. passenger_debug_log_file</a></div>
1206
- <div class="foo toclevel2"><a href="#troubleshooting">8. Troubleshooting</a></div>
1207
- <div class="foo toclevel3"><a href="#_generic_troubleshooting_tips">8.1. Generic troubleshooting tips</a></div>
1208
- <div class="foo toclevel3"><a href="#_why_does_the_first_request_take_a_long_time">8.2. Why does the first request take a long time?</a></div>
1209
- <div class="foo toclevel3"><a href="#_upon_accessing_the_web_app_nginx_reports_a_permission_denied_error">8.3. Upon accessing the web app, Nginx reports a "Permission denied" error</a></div>
1210
- <div class="foo toclevel3"><a href="#_i_get_command_not_found_when_running_a_phusion_passenger_command_through_sudo">8.4. I get "command not found" when running a Phusion Passenger command through sudo</a></div>
1211
- <div class="foo toclevel3"><a href="#_the_application_thinks_its_not_on_ssl_even_though_it_is">8.5. The application thinks its not on SSL even though it is</a></div>
1212
- <div class="foo toclevel3"><a href="#_ruby_on_rails_specific_troubleshooting">8.6. Ruby on Rails-specific troubleshooting</a></div>
1213
- <div class="foo toclevel4"><a href="#_the_about_your_application_8217_s_environment_link_does_not_work">8.6.1. The "About your application’s environment" link does not work</a></div>
1214
- <div class="foo toclevel4"><a href="#_the_rails_application_reports_that_it_8217_s_unable_to_start_because_of_a_permission_error">8.6.2. The Rails application reports that it’s unable to start because of a permission error</a></div>
1215
- <div class="foo toclevel4"><a href="#_the_rails_application_8217_s_log_file_is_not_being_written_to">8.6.3. The Rails application’s log file is not being written to</a></div>
1216
- <div class="foo toclevel2"><a href="#_analysis_and_system_maintenance">9. Analysis and system maintenance</a></div>
1217
- <div class="foo toclevel3"><a href="#_inspecting_memory_usage">9.1. Inspecting memory usage</a></div>
1218
- <div class="foo toclevel3"><a href="#_inspecting_phusion_passenger_8217_s_internal_status">9.2. Inspecting Phusion Passenger’s internal status</a></div>
1219
- <div class="foo toclevel3"><a href="#debugging_frozen">9.3. Debugging frozen applications</a></div>
1220
- <div class="foo toclevel3"><a href="#_accessing_individual_application_processes">9.4. Accessing individual application processes</a></div>
1221
- <div class="foo toclevel3"><a href="#_attaching_an_irb_console_to_an_application_process">9.5. Attaching an IRB console to an application process</a></div>
1222
- <div class="foo toclevel2"><a href="#_tips">10. Tips</a></div>
1223
- <div class="foo toclevel3"><a href="#user_switching">10.1. User Switching (security feature)</a></div>
1224
- <div class="foo toclevel4"><a href="#_requirements">10.1.1. Requirements</a></div>
1225
- <div class="foo toclevel4"><a href="#_effects">10.1.2. Effects</a></div>
1226
- <div class="foo toclevel4"><a href="#_caveats_amp_troubleshooting">10.1.3. Caveats &amp; troubleshooting</a></div>
1227
- <div class="foo toclevel4"><a href="#user_switching_rpm_caveats">10.1.4. Red Hat and CentOS caveats</a></div>
1228
- <div class="foo toclevel4"><a href="#finding_out_app_user">10.1.5. Finding out what user an application is running as</a></div>
1229
- <div class="foo toclevel3"><a href="#reducing_memory_usage">10.2. Copy-on-write memory support (reducing memory consumption of Ruby applications)</a></div>
1230
- <div class="foo toclevel3"><a href="#tuning_sse_websockets">10.3. Tuning for Server Sent Events and WebSockets</a></div>
1231
- <div class="foo toclevel3"><a href="#bundler_support">10.4. Bundler support</a></div>
1232
- <div class="foo toclevel4"><a href="#add_passenger_to_gemfile">10.4.1. Does Phusion Passenger itself need to be added to the Gemfile?</a></div>
1233
- <div class="foo toclevel3"><a href="#_installing_multiple_ruby_on_rails_versions">10.5. Installing multiple Ruby on Rails versions</a></div>
1234
- <div class="foo toclevel3"><a href="#_making_the_application_restart_after_each_request">10.6. Making the application restart after each request</a></div>
1235
- <div class="foo toclevel3"><a href="#sub_uri_deployment_uri_fix">10.7. How to fix broken images/CSS/JavaScript URIs in sub-URI deployments</a></div>
1236
- <div class="foo toclevel3"><a href="#_out_of_band_work_and_out_of_band_garbage_collection">10.8. Out-of-Band Work and Out-of-Band Garbage Collection</a></div>
1237
- <div class="foo toclevel3"><a href="#_hooks">10.9. Hooks</a></div>
1238
- <div class="foo toclevel4"><a href="#_example">10.9.1. Example</a></div>
1239
- <div class="foo toclevel4"><a href="#_environment">10.9.2. Environment</a></div>
1240
- <div class="foo toclevel4"><a href="#_blocking_and_concurrency">10.9.3. Blocking and concurrency</a></div>
1241
- <div class="foo toclevel4"><a href="#_error_handling">10.9.4. Error handling</a></div>
1242
- <div class="foo toclevel4"><a href="#_compatibility">10.9.5. Compatibility</a></div>
1243
- <div class="foo toclevel4"><a href="#_available_hooks">10.9.6. Available hooks</a></div>
1244
- <div class="foo toclevel3"><a href="#flying_passenger">10.10. Flying Passenger</a></div>
1245
- <div class="foo toclevel4"><a href="#_requirements_2">10.10.1. Requirements</a></div>
1246
- <div class="foo toclevel4"><a href="#_basic_usage">10.10.2. Basic usage</a></div>
1247
- <div class="foo toclevel4"><a href="#configuring_flying_passenger">10.10.3. Configuring Flying Passenger</a></div>
1248
- <div class="foo toclevel4"><a href="#_managing_the_flying_passenger_daemon">10.10.4. Managing the Flying Passenger daemon</a></div>
1249
- <div class="foo toclevel4"><a href="#using_flying_passenger_with_mri_18_or_jruby">10.10.5. Using Flying Passenger with MRI 1.8 or JRuby</a></div>
1250
- <div class="foo toclevel4"><a href="#flying_passenger_caveats">10.10.6. Caveats and limitations</a></div>
1251
- <div class="foo toclevel2"><a href="#_under_the_hood">11. Under the hood</a></div>
1252
- <div class="foo toclevel3"><a href="#_page_caching_support">11.1. Page caching support</a></div>
1253
- <div class="foo toclevel3"><a href="#relationship_with_ruby">11.2. Phusion Passenger and its relationship with Ruby</a></div>
1254
- <div class="foo toclevel4"><a href="#_how_ruby_is_used">11.2.1. How Ruby is used</a></div>
1255
- <div class="foo toclevel4"><a href="#_when_the_system_has_multiple_ruby_interpreters">11.2.2. When the system has multiple Ruby interpreters</a></div>
1256
- <div class="foo toclevel3"><a href="#application_detection">11.3. How Phusion Passenger detects whether a virtual host is a web application</a></div>
1257
- <div class="foo toclevel2"><a href="#_appendix_a_about_this_document">12. Appendix A: About this document</a></div>
1258
- <div class="foo toclevel2"><a href="#_appendix_b_terminology">13. Appendix B: Terminology</a></div>
1259
- <div class="foo toclevel3"><a href="#application_root">13.1. Application root</a></div>
1260
- <div class="foo toclevel3"><a href="#idle_process">13.2. Idle process</a></div>
1261
- <div class="foo toclevel3"><a href="#inactive_process">13.3. Inactive process</a></div>
1262
- <div class="foo toclevel2"><a href="#spawning_methods_explained">14. Appendix C: Spawning methods explained</a></div>
1263
- <div class="foo toclevel3"><a href="#_the_most_straightforward_and_traditional_way_direct_spawning">14.1. The most straightforward and traditional way: direct spawning</a></div>
1264
- <div class="foo toclevel3"><a href="#_the_smart_spawning_method">14.2. The smart spawning method</a></div>
1265
- <div class="foo toclevel4"><a href="#_how_it_works">14.2.1. How it works</a></div>
1266
- <div class="foo toclevel4"><a href="#_summary_of_benefits">14.2.2. Summary of benefits</a></div>
1267
- <div class="foo toclevel3"><a href="#_smart_spawning_caveat_1_unintentional_file_descriptor_sharing">14.3. Smart spawning caveat #1: unintentional file descriptor sharing</a></div>
1268
- <div class="foo toclevel4"><a href="#_example_1_memcached_connection_sharing_harmful">14.3.1. Example 1: Memcached connection sharing (harmful)</a></div>
1269
- <div class="foo toclevel4"><a href="#_example_2_log_file_sharing_not_harmful">14.3.2. Example 2: Log file sharing (not harmful)</a></div>
1270
- <div class="foo toclevel3"><a href="#_smart_spawning_caveat_2_the_need_to_revive_threads">14.4. Smart spawning caveat #2: the need to revive threads</a></div>
1271
- <div class="foo toclevel2"><a href="#about_environment_variables">15. Appendix D: About environment variables</a></div>
1272
- <div class="foo toclevel3"><a href="#_working_with_environment_variables">15.1. Working with environment variables</a></div>
1273
- <div class="foo toclevel3"><a href="#the_path_env_var">15.2. The PATH environment variable</a></div>
1274
- <div class="foo toclevel4"><a href="#_adding_phusion_passenger_8217_s_administration_tools_to_path">15.2.1. Adding Phusion Passenger’s administration tools to PATH</a></div>
1275
- <div class="foo toclevel3"><a href="#_making_environment_variables_permanent">15.3. Making environment variables permanent</a></div>
1276
- <div class="foo toclevel4"><a href="#_bash">15.3.1. bash</a></div>
1277
- <div class="foo toclevel4"><a href="#_apache">15.3.2. Apache</a></div>
1278
- <div class="foo toclevel4"><a href="#_nginx">15.3.3. Nginx</a></div>
1279
- <div class="foo toclevel4"><a href="#_cron">15.3.4. cron</a></div>
1280
- <div class="foo toclevel4"><a href="#env_vars_passenger_apps">15.3.5. Phusion Passenger-served apps</a></div>
1281
- <div class="foo toclevel3"><a href="#env_vars_and_sudo">15.4. Environment variables and sudo</a></div>
1282
- </div>
1283
- </div>
1284
- <div id="content">
1285
-
1286
- <div class="sect1">
1287
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_support_information"></span><h2 data-comment-topic="support-information-nl5gdn" data-anchor="_support_information">1. Support information</h2>
1288
- <div class="sectionbody">
1289
- <div class="sect2">
1290
- <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_and_languages"></span><h3 data-comment-topic="supported-operating-systems-a5n2x4" data-anchor="_supported_operating_systems_and_languages">1.1. Supported operating systems and languages</h3>
1291
- <div class="paragraph"><p>This documentation has moved. <a href="https://www.phusionpassenger.com/library/install/supported_operating_systems_and_languages.html">https://www.phusionpassenger.com/library/install/supported_operating_systems_and_languages.html</a></p></div>
1292
- </div>
1293
- <div class="sect2">
1294
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="where_to_get_support"></span><h3 data-comment-topic="where-to-get-support-2s9na5" data-anchor="where_to_get_support">1.2. Where to get support</h3>
1295
- <div class="ulist"><ul>
1296
- <li>
1297
- <p>
1298
- <a href="http://groups.google.com/group/phusion-passenger">Community discussion forum</a> - post a
1299
- 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.
1300
- </p>
1301
- </li>
1302
- <li>
1303
- <p>
1304
- <a href="https://github.com/phusion/passenger/issues">Issue tracker</a> - report
1305
- bugs here.
1306
- </p>
1307
- </li>
1308
- <li>
1309
- <p>
1310
- 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.
1311
- </p>
1312
- </li>
1313
- <li>
1314
- <p>
1315
- <a href="https://www.phusionpassenger.com/commercial_support">Commercial support contracts</a> are also available.
1316
- </p>
1317
- </li>
1318
- <li>
1319
- <p>
1320
- Report security vulnerabilities to <a href="mailto:security@phusion.nl">security@phusion.nl</a>. We will do our best to respond to you as quickly as we can, so please do not disclose the vulnerability until then.
1321
- </p>
1322
- </li>
1323
- </ul></div>
1324
- <div class="paragraph"><p>Please consult <a href="https://www.phusionpassenger.com/support">the Phusion Passenger website</a> for a full list of support resources.</p></div>
1325
- </div>
1326
- </div>
1327
- </div>
1328
- <div class="sect1">
1329
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="installation"></span><h2 data-comment-topic="installing-phusion-passenger-hn03ac" data-anchor="installation">2. Installation</h2>
1330
- <div class="sectionbody">
1331
- <div class="sect2">
1332
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_synopsis"></span><h3 data-comment-topic="synopsis-1uu3sqp" data-anchor="_synopsis">2.1. Synopsis</h3>
1333
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/">https://www.phusionpassenger.com/library/install/</a></p></div>
1334
- </div>
1335
- <div class="sect2">
1336
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="install_osx_homebrew"></span><h3 data-comment-topic="installing-or-upgrading-on-mac-os-x-with-homebrew-13ovvy9" data-anchor="install_osx_homebrew">2.2. Installing or upgrading on Mac OS X with Homebrew</h3>
1337
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/">https://www.phusionpassenger.com/library/install/</a></p></div>
1338
- </div>
1339
- <div class="sect2">
1340
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="install_on_debian_ubuntu"></span><h3 data-comment-topic="installing-or-upgrading-on-ubuntu-fw5fvp" data-anchor="install_on_debian_ubuntu">2.3. Installing or upgrading on Debian or Ubuntu</h3>
1341
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/apt_repo/">https://www.phusionpassenger.com/library/install/apt_repo/</a></p></div>
1342
- <div class="sect3">
1343
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="install_add_apt_repo"></span><h4 data-comment-topic="adding-our-apt-repository-p60cki" data-anchor="install_add_apt_repo">2.3.1. Adding our APT repository</h4>
1344
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/apt_repo/">https://www.phusionpassenger.com/library/install/apt_repo/</a></p></div>
1345
- </div>
1346
- <div class="sect3">
1347
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_installing_packages"></span><h4 data-comment-topic="installing-packages-j9glez" data-anchor="_installing_packages">2.3.2. Installing packages</h4>
1348
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/apt_repo/">https://www.phusionpassenger.com/library/install/apt_repo/</a></p></div>
1349
- </div>
1350
- <div class="sect3">
1351
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="inserting_passenger_root_for_apt"></span><h4 data-comment-topic="inserting-passenger-root-into-nginx-conf--1pmj19o" data-anchor="inserting_passenger_root_for_apt">2.3.3. Inserting <span class="monospaced">passenger_root</span> into nginx.conf</h4>
1352
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_root">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_root</a></p></div>
1353
- </div>
1354
- </div>
1355
- <div class="sect2">
1356
- <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"></span><h3 data-comment-topic="installing-or-upgrading-on-red-hat-fedora-centos-or-scientificlinux-1uus5a1" data-anchor="installing_or_upgrading_on_red_hat">2.4. Installing or upgrading on Red Hat or CentOS</h3>
1357
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/yum_repo/">https://www.phusionpassenger.com/library/install/yum_repo/</a></p></div>
1358
- <div class="sect3">
1359
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="install_add_yum_repo"></span><h4 data-comment-topic="adding-our-yum-repository-2i9z9o" data-anchor="install_add_yum_repo">2.4.1. Adding our YUM repository</h4>
1360
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/yum_repo/">https://www.phusionpassenger.com/library/install/yum_repo/</a></p></div>
1361
- </div>
1362
- <div class="sect3">
1363
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_installing_packages_2"></span><h4 data-comment-topic="installing-packages-1actlet" data-anchor="_installing_packages_2">2.4.2. Installing packages</h4>
1364
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/yum_repo/">https://www.phusionpassenger.com/library/install/yum_repo/</a></p></div>
1365
- </div>
1366
- </div>
1367
- <div class="sect2">
1368
- <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_heroku"></span><h3 data-comment-topic="installing-or-upgrading-on-heroku-jh07kr" data-anchor="_installing_or_upgrading_on_heroku">2.5. Installing or upgrading on Heroku</h3>
1369
- <div class="paragraph"><p>Please refer to our <a href="https://github.com/phusion/passenger-ruby-heroku-demo#readme">Heroku Ruby demo</a> for installation and upgrade instructions for Heroku.</p></div>
1370
- </div>
1371
- <div class="sect2">
1372
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="rubygems_generic_install"></span><h3 data-comment-topic="generic-installation-upgrade-and-downgrade-method-via-rubygems-76uol7" data-anchor="rubygems_generic_install">2.6. Generic installation, upgrade and downgrade method: via RubyGems</h3>
1373
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/">https://www.phusionpassenger.com/library/install/</a></p></div>
1374
- </div>
1375
- <div class="sect2">
1376
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="tarball_generic_install"></span><h3 data-comment-topic="generic-installation-upgrade-and-downgrade-method-via-tarball-2gkx43" data-anchor="tarball_generic_install">2.7. Generic installation, upgrade and downgrade method: via tarball</h3>
1377
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/">https://www.phusionpassenger.com/library/install/</a></p></div>
1378
- </div>
1379
- <div class="sect2">
1380
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_upgrading_from_open_source_to_enterprise"></span><h3 data-comment-topic="upgrading-from-open-source-to-enterprise-1a58c2b" data-anchor="_upgrading_from_open_source_to_enterprise">2.8. Upgrading from open source to Enterprise</h3>
1381
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/apache/upgrading_from_oss_to_enterprise.html">https://www.phusionpassenger.com/library/install/apache/upgrading_from_oss_to_enterprise.html</a></p></div>
1382
- </div>
1383
- <div class="sect2">
1384
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_cryptographic_verification_of_installation_files"></span><h3 data-comment-topic="cryptographic-verification-of-installation-files-2goray" data-anchor="_cryptographic_verification_of_installation_files">2.9. Cryptographic verification of installation files</h3>
1385
- <div class="sect3">
1386
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_synopsis_2"></span><h4 data-comment-topic="synopsis-4fv6zw" data-anchor="_synopsis_2">2.9.1. Synopsis</h4>
1387
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/crypto_verify_install.html">https://www.phusionpassenger.com/library/install/crypto_verify_install.html</a></p></div>
1388
- </div>
1389
- <div class="sect3">
1390
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_importing_the_phusion_software_signing_key"></span><h4 data-comment-topic="importing-the-phusion-software-signing-key-1qfpaj4" data-anchor="_importing_the_phusion_software_signing_key">2.9.2. Importing the Phusion Software Signing key</h4>
1391
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/crypto_verify_install.html">https://www.phusionpassenger.com/library/install/crypto_verify_install.html</a></p></div>
1392
- </div>
1393
- <div class="sect3">
1394
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_verifying_the_phusion_software_signing_key"></span><h4 data-comment-topic="verifying-the-phusion-software-signing-key-i7f1vj" data-anchor="_verifying_the_phusion_software_signing_key">2.9.3. Verifying the Phusion Software Signing key</h4>
1395
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/crypto_verify_install.html">https://www.phusionpassenger.com/library/install/crypto_verify_install.html</a></p></div>
1396
- </div>
1397
- <div class="sect3">
1398
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_verifying_the_gem_and_tarball"></span><h4 data-comment-topic="verifying-the-gem-and-tarball-dr9466" data-anchor="_verifying_the_gem_and_tarball">2.9.4. Verifying the gem and tarball</h4>
1399
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/crypto_verify_install.html">https://www.phusionpassenger.com/library/install/crypto_verify_install.html</a></p></div>
1400
- </div>
1401
- <div class="sect3">
1402
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_verifying_git_signatures"></span><h4 data-comment-topic="verifying-git-signatures-dyo4fk" data-anchor="_verifying_git_signatures">2.9.5. Verifying Git signatures</h4>
1403
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/crypto_verify_install.html">https://www.phusionpassenger.com/library/install/crypto_verify_install.html</a></p></div>
1404
- </div>
1405
- <div class="sect3">
1406
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_verifying_debian_packages"></span><h4 data-comment-topic="verifying-deb-and-rpm-packages-1ed36d5" data-anchor="_verifying_debian_packages">2.9.6. Verifying Debian packages</h4>
1407
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/crypto_verify_install.html">https://www.phusionpassenger.com/library/install/crypto_verify_install.html</a></p></div>
1408
- </div>
1409
- <div class="sect3">
1410
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_verifying_rpm_packages"></span><h4 data-comment-topic="verifying-rpm-packages-1wwblzx" data-anchor="_verifying_rpm_packages">2.9.7. Verifying RPM packages</h4>
1411
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/crypto_verify_install.html">https://www.phusionpassenger.com/library/install/crypto_verify_install.html</a></p></div>
1412
- </div>
1413
- <div class="sect3">
1414
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_revocation"></span><h4 data-comment-topic="revocation-xwvhea" data-anchor="_revocation">2.9.8. Revocation</h4>
1415
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/crypto_verify_install.html">https://www.phusionpassenger.com/library/install/crypto_verify_install.html</a></p></div>
1416
- </div>
1417
- </div>
1418
- <div class="sect2">
1419
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_non_interactive_automatic_headless_installs_or_upgrades"></span><h3 data-comment-topic="non-interactive-automatic-headless-installs-or-upgrades-834ymv" data-anchor="_non_interactive_automatic_headless_installs_or_upgrades">2.10. Non-interactive, automatic, headless installs or upgrades</h3>
1420
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/nginx/noninteractive_install.html">https://www.phusionpassenger.com/library/install/nginx/noninteractive_install.html</a></p></div>
1421
- </div>
1422
- <div class="sect2">
1423
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_customizing_the_compilation_process"></span><h3 data-comment-topic="customizing-the-compilation-process-u4cdcf" data-anchor="_customizing_the_compilation_process">2.11. Customizing the compilation process</h3>
1424
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/nginx/customizing_compilation_process.html">https://www.phusionpassenger.com/library/install/nginx/customizing_compilation_process.html</a></p></div>
1425
- <div class="sect3">
1426
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_setting_the_compiler"></span><h4 data-comment-topic="setting-the-compiler-1l6dpe1" data-anchor="_setting_the_compiler">2.11.1. Setting the compiler</h4>
1427
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/nginx/customizing_compilation_process.html">https://www.phusionpassenger.com/library/install/nginx/customizing_compilation_process.html</a></p></div>
1428
- </div>
1429
- <div class="sect3">
1430
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_adding_additional_compiler_or_linker_flags"></span><h4 data-comment-topic="adding-additional-compiler-or-linker-flags-1jehjon" data-anchor="_adding_additional_compiler_or_linker_flags">2.11.2. Adding additional compiler or linker flags</h4>
1431
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/nginx/customizing_compilation_process.html">https://www.phusionpassenger.com/library/install/nginx/customizing_compilation_process.html</a></p></div>
1432
- </div>
1433
- <div class="sect3">
1434
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="forcing_location_of_command_line_tools_and_dependencies"></span><h4 data-comment-topic="forcing-location-of-certain-command-line-tools-1j93cki" data-anchor="forcing_location_of_command_line_tools_and_dependencies">2.11.3. Forcing location of command line tools and dependencies</h4>
1435
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/nginx/customizing_compilation_process.html">https://www.phusionpassenger.com/library/install/nginx/customizing_compilation_process.html</a></p></div>
1436
- </div>
1437
- </div>
1438
- <div class="sect2">
1439
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_installing_as_a_normal_nginx_module_without_using_the_installer"></span><h3 data-comment-topic="installing-as-a-normal-nginx-module-without-using-the-installer-1kkpes5" data-anchor="_installing_as_a_normal_nginx_module_without_using_the_installer">2.12. Installing as a normal Nginx module without using the installer</h3>
1440
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/nginx/install_as_nginx_module.html">https://www.phusionpassenger.com/library/install/nginx/install_as_nginx_module.html</a></p></div>
1441
- </div>
1442
- <div class="sect2">
1443
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="nginx_init_script"></span><h3 data-comment-topic="creating-an-nginx-init-script-1kd8zg5" data-anchor="nginx_init_script">2.13. Creating an Nginx init script</h3>
1444
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/nginx/nginx_init_script.html">https://www.phusionpassenger.com/library/install/nginx/nginx_init_script.html</a></p></div>
1445
- </div>
1446
- <div class="sect2">
1447
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_disabling_without_uninstalling"></span><h3 data-comment-topic="disabling-without-uninstalling-1t5tqan" data-anchor="_disabling_without_uninstalling">2.14. Disabling without uninstalling</h3>
1448
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/nginx/disable.html">https://www.phusionpassenger.com/library/install/nginx/disable.html</a></p></div>
1449
- </div>
1450
- <div class="sect2">
1451
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="uninstalling"></span><h3 data-comment-topic="uninstalling-phusion-passenger-wuycvb" data-anchor="uninstalling">2.15. Uninstalling</h3>
1452
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/nginx/uninstall/">https://www.phusionpassenger.com/library/install/nginx/uninstall/</a></p></div>
1453
- </div>
1454
- <div class="sect2">
1455
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="moving_phusion_passenger"></span><h3 data-comment-topic="moving-to-a-different-directory-gif3wo" data-anchor="moving_phusion_passenger">2.16. Moving to a different directory</h3>
1456
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/install/nginx/moving.html">https://www.phusionpassenger.com/library/install/nginx/moving.html</a></p></div>
1457
- </div>
1458
- </div>
1459
- </div>
1460
- <div class="sect1">
1461
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="deploying_a_rack_app"></span><h2 data-comment-topic="deploying-a-rack-based-ruby-application-including-rails-3--12benx3" data-anchor="deploying_a_rack_app">3. Deploying a Rack-based Ruby application</h2>
1462
- <div class="sectionbody">
1463
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/deploy/nginx/">https://www.phusionpassenger.com/library/deploy/nginx/</a></p></div>
1464
- <div class="sect2">
1465
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_tutorial_example_writing_and_deploying_a_hello_world_rack_application"></span><h3 data-comment-topic="tutorial-example-writing-and-deploying-a-hello-world-rack-application-1wstx99" data-anchor="_tutorial_example_writing_and_deploying_a_hello_world_rack_application">3.1. Tutorial/example: writing and deploying a Hello World Rack application</h3>
1466
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/deploy/nginx/">https://www.phusionpassenger.com/library/deploy/nginx/</a></p></div>
1467
- </div>
1468
- <div class="sect2">
1469
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_deploying_to_a_virtual_host_8217_s_root"></span><h3 data-comment-topic="deploying-to-a-virtual-host-s-root-1mh24z5" data-anchor="_deploying_to_a_virtual_host_8217_s_root">3.2. Deploying to a virtual host’s root</h3>
1470
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/deploy/nginx/">https://www.phusionpassenger.com/library/deploy/nginx/</a></p></div>
1471
- </div>
1472
- <div class="sect2">
1473
- <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-1il2qj7" data-anchor="deploying_rack_to_sub_uri">3.3. Deploying to a sub URI</h3>
1474
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/deploy/nginx/">https://www.phusionpassenger.com/library/deploy/nginx/</a></p></div>
1475
- </div>
1476
- <div class="sect2">
1477
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_redeploying_restarting_the_rack_application"></span><h3 data-comment-topic="redeploying-restarting-the-rack-application--xnbfam" data-anchor="_redeploying_restarting_the_rack_application">3.4. Redeploying (restarting the Rack application)</h3>
1478
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/admin/nginx/restart_app.html">https://www.phusionpassenger.com/library/admin/nginx/restart_app.html</a></p></div>
1479
- </div>
1480
- <div class="sect2">
1481
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_rackup_specifications_for_various_web_frameworks"></span><h3 data-comment-topic="rackup-specifications-for-various-web-frameworks-1a2cs41" data-anchor="_rackup_specifications_for_various_web_frameworks">3.5. Rackup specifications for various web frameworks</h3>
1482
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/deploy/config_ru.html">https://www.phusionpassenger.com/library/deploy/config_ru.html</a></p></div>
1483
- </div>
1484
- </div>
1485
- </div>
1486
- <div class="sect1">
1487
- <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_app"></span><h2 data-comment-topic="deploying-a-wsgi-python-application-1or2efo" data-anchor="deploying_a_wsgi_app">4. Deploying a WSGI (Python) application</h2>
1488
- <div class="sectionbody">
1489
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/deploy/nginx/">https://www.phusionpassenger.com/library/deploy/nginx/</a></p></div>
1490
- <div class="sect2">
1491
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_tutorial_example_writing_and_deploying_a_hello_world_wsgi_application"></span><h3 data-comment-topic="tutorial-example-writing-and-deploying-a-hello-world-wsgi-application-k5ron2" data-anchor="_tutorial_example_writing_and_deploying_a_hello_world_wsgi_application">4.1. Tutorial/example: writing and deploying a Hello World WSGI application</h3>
1492
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/deploy/nginx/">https://www.phusionpassenger.com/library/deploy/nginx/</a></p></div>
1493
- </div>
1494
- <div class="sect2">
1495
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_deploying_to_a_virtual_host_8217_s_root_2"></span><h3 data-comment-topic="deploying-to-a-virtual-host-s-root-f02erj" data-anchor="_deploying_to_a_virtual_host_8217_s_root_2">4.2. Deploying to a virtual host’s root</h3>
1496
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/deploy/nginx/">https://www.phusionpassenger.com/library/deploy/nginx/</a></p></div>
1497
- </div>
1498
- <div class="sect2">
1499
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="deploying_wsgi_to_sub_uri"></span><h3 data-comment-topic="deploying-to-a-sub-uri-37q0ou" data-anchor="deploying_wsgi_to_sub_uri">4.3. Deploying to a sub URI</h3>
1500
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/deploy/nginx/">https://www.phusionpassenger.com/library/deploy/nginx/</a></p></div>
1501
- </div>
1502
- <div class="sect2">
1503
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_redeploying_restarting_the_wsgi_application"></span><h3 data-comment-topic="redeploying-restarting-the-wsgi-application--10zdh2k" data-anchor="_redeploying_restarting_the_wsgi_application">4.4. Redeploying (restarting the WSGI application)</h3>
1504
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/admin/nginx/restart_app.html">https://www.phusionpassenger.com/library/admin/nginx/restart_app.html</a></p></div>
1505
- </div>
1506
- <div class="sect2">
1507
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_sample_span_class_monospaced_passenger_wsgi_py_span_for_django"></span><h3 data-comment-topic="sample-passenger-wsgi-py-for-django-1cvndls" data-anchor="_sample_span_class_monospaced_passenger_wsgi_py_span_for_django">4.5. Sample <span class="monospaced">passenger_wsgi.py</span> for Django</h3>
1508
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/deploy/wsgi_spec.html">https://www.phusionpassenger.com/library/deploy/wsgi_spec.html</a></p></div>
1509
- </div>
1510
- </div>
1511
- </div>
1512
- <div class="sect1">
1513
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_deploying_a_node_js_application"></span><h2 data-comment-topic="deploying-a-node-js-application-15wbczd" data-anchor="_deploying_a_node_js_application">5. Deploying a Node.js application</h2>
1514
- <div class="sectionbody">
1515
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/deploy/nginx/">https://www.phusionpassenger.com/library/deploy/nginx/</a></p></div>
1516
- </div>
1517
- </div>
1518
- <div class="sect1">
1519
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_deploying_a_meteor_application"></span><h2 data-comment-topic="deploying-a-meteor-application-1b51wl9" data-anchor="_deploying_a_meteor_application">6. Deploying a Meteor application</h2>
1520
- <div class="sectionbody">
1521
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/deploy/nginx/">https://www.phusionpassenger.com/library/deploy/nginx/</a></p></div>
1522
- </div>
1523
- </div>
1524
- <div class="sect1">
1525
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_configuring_phusion_passenger"></span><h2 data-comment-topic="configuring-phusion-passenger-1g1svey" data-anchor="_configuring_phusion_passenger">7. Configuring Phusion Passenger</h2>
1526
- <div class="sectionbody">
1527
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/">https://www.phusionpassenger.com/library/config/nginx/</a></p></div>
1528
- <div class="sect2">
1529
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerRoot"></span><h3 data-comment-topic="passenger-root-directory--bqvhhz" data-anchor="PassengerRoot">7.1. passenger_root &lt;directory&gt;</h3>
1530
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_root">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_root</a></p></div>
1531
- </div>
1532
- <div class="sect2">
1533
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_deployment_options"></span><h3 data-comment-topic="deployment-options-1a1vxsp" data-anchor="_deployment_options">7.2. Deployment options</h3>
1534
- <div class="sect3">
1535
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_enabled_lt_on_off_gt"></span><h4 data-comment-topic="passenger-enabled-on-off--1rpb2t7" data-anchor="_passenger_enabled_lt_on_off_gt">7.2.1. passenger_enabled &lt;on|off&gt;</h4>
1536
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_enabled">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_enabled</a></p></div>
1537
- </div>
1538
- <div class="sect3">
1539
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerBaseURI"></span><h4 data-comment-topic="passenger-base-uri-uri--1xtuo50" data-anchor="PassengerBaseURI">7.2.2. passenger_base_uri &lt;uri&gt;</h4>
1540
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_base_uri">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_base_uri</a></p></div>
1541
- </div>
1542
- <div class="sect3">
1543
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerDocumentRoot"></span><h4 data-comment-topic="passenger-document-root-path--1pge8kd" data-anchor="PassengerDocumentRoot">7.2.3. passenger_document_root &lt;path&gt;</h4>
1544
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_document_root">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_document_root</a></p></div>
1545
- </div>
1546
- </div>
1547
- <div class="sect2">
1548
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_application_loading_options"></span><h3 data-comment-topic="application-loading-options-f3skts" data-anchor="_application_loading_options">7.3. Application loading options</h3>
1549
- <div class="sect3">
1550
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerRuby"></span><h4 data-comment-topic="passenger-ruby-filename--1gnok5k" data-anchor="PassengerRuby">7.3.1. passenger_ruby &lt;filename&gt;</h4>
1551
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_ruby">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_ruby</a></p></div>
1552
- </div>
1553
- <div class="sect3">
1554
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_python_lt_filename_gt"></span><h4 data-comment-topic="passenger-python-filename--14p554" data-anchor="_passenger_python_lt_filename_gt">7.3.2. passenger_python &lt;filename&gt;</h4>
1555
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_python">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_python</a></p></div>
1556
- </div>
1557
- <div class="sect3">
1558
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_nodejs_lt_filename_gt"></span><h4 data-comment-topic="passenger-nodejs-filename--16hzjsv" data-anchor="_passenger_nodejs_lt_filename_gt">7.3.3. passenger_nodejs &lt;filename&gt;</h4>
1559
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_nodejs">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_nodejs</a></p></div>
1560
- </div>
1561
- <div class="sect3">
1562
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_meteor_app_settings_lt_filename_gt"></span><h4 data-comment-topic="passenger-meteor-app-settings-filename--1toqnaz" data-anchor="_passenger_meteor_app_settings_lt_filename_gt">7.3.4. passenger_meteor_app_settings &lt;filename&gt;</h4>
1563
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_meteor_app_settings-filename">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_meteor_app_settings-filename</a></p></div>
1564
- </div>
1565
- <div class="sect3">
1566
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerAppEnv"></span><h4 data-comment-topic="passenger-app-env-string--qjeimp" data-anchor="PassengerAppEnv">7.3.5. passenger_app_env &lt;string&gt;</h4>
1567
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_app_env">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_app_env</a></p></div>
1568
- </div>
1569
- <div class="sect3">
1570
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="RailsEnv"></span><h4 data-comment-topic="rails-env-string--jlh7v9" data-anchor="RailsEnv">7.3.6. rails_env &lt;string&gt;</h4>
1571
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_app_env">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_app_env</a></p></div>
1572
- </div>
1573
- <div class="sect3">
1574
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="RackEnv"></span><h4 data-comment-topic="rack-env-string--tqmrt0" data-anchor="RackEnv">7.3.7. rack_env &lt;string&gt;</h4>
1575
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_app_env">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_app_env</a></p></div>
1576
- </div>
1577
- <div class="sect3">
1578
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerAppRoot"></span><h4 data-comment-topic="passenger-app-root-path-to-root--1dbudc6" data-anchor="PassengerAppRoot">7.3.8. passenger_app_root &lt;path/to/root&gt;</h4>
1579
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_app_root">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_app_root</a></p></div>
1580
- </div>
1581
- <div class="sect3">
1582
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerAppGroupName"></span><h4 data-comment-topic="passenger-app-group-name-name--11jrx8u" data-anchor="PassengerAppGroupName">7.3.9. passenger_app_group_name &lt;name&gt;</h4>
1583
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_app_group_name">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_app_group_name</a></p></div>
1584
- </div>
1585
- <div class="sect3">
1586
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerAppType"></span><h4 data-comment-topic="passenger-app-type-name--g9zccv" data-anchor="PassengerAppType">7.3.10. passenger_app_type &lt;name&gt;</h4>
1587
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_app_type">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_app_type</a></p></div>
1588
- </div>
1589
- <div class="sect3">
1590
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerStartupFile"></span><h4 data-comment-topic="passenger-startup-file-filename--y4gy1m" data-anchor="PassengerStartupFile">7.3.11. passenger_startup_file &lt;filename&gt;</h4>
1591
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_startup_file">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_startup_file</a></p></div>
1592
- </div>
1593
- <div class="sect3">
1594
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerSpawnMethod"></span><h4 data-comment-topic="passenger-spawn-method-string--1sc6njl" data-anchor="PassengerSpawnMethod">7.3.12. passenger_spawn_method &lt;string&gt;</h4>
1595
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_spawn_method">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_spawn_method</a></p></div>
1596
- </div>
1597
- <div class="sect3">
1598
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerEnvVar"></span><h4 data-comment-topic="passenger-env-var-name-value--y8e7wh" data-anchor="PassengerEnvVar">7.3.13. passenger_env_var &lt;name&gt; &lt;value&gt;</h4>
1599
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_env_var">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_env_var</a></p></div>
1600
- </div>
1601
- <div class="sect3">
1602
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerLoadShellEnvvars"></span><h4 data-comment-topic="passenger-load-shell-envvars-on-off--fw5u4l" data-anchor="PassengerLoadShellEnvvars">7.3.14. passenger_load_shell_envvars &lt;on|off&gt;</h4>
1603
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_load_shell_envvars">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_load_shell_envvars</a></p></div>
1604
- </div>
1605
- <div class="sect3">
1606
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerRollingRestarts"></span><h4 data-comment-topic="passenger-rolling-restarts" data-anchor="PassengerRollingRestarts">7.3.15. passenger_rolling_restarts &lt;on|off&gt;</h4>
1607
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_rolling_restarts">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_rolling_restarts</a></p></div>
1608
- </div>
1609
- <div class="sect3">
1610
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerResistDeploymentErrors"></span><h4 data-comment-topic="passenger-resist-deployment-errors-on-off--k9yf1" data-anchor="PassengerResistDeploymentErrors">7.3.16. passenger_resist_deployment_errors &lt;on|off&gt;</h4>
1611
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_resist_deployment_errors">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_resist_deployment_errors</a></p></div>
1612
- </div>
1613
- </div>
1614
- <div class="sect2">
1615
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_security_options"></span><h3 data-comment-topic="security-options-1bv93g4" data-anchor="_security_options">7.4. Security options</h3>
1616
- <div class="sect3">
1617
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerUserSwitching"></span><h4 data-comment-topic="passenger-user-switching-on-off--1p37u3l" data-anchor="PassengerUserSwitching">7.4.1. passenger_user_switching &lt;on|off&gt;</h4>
1618
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_user_switching">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_user_switching</a></p></div>
1619
- </div>
1620
- <div class="sect3">
1621
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerUser"></span><h4 data-comment-topic="passenger-user-username--b06ur7" data-anchor="PassengerUser">7.4.2. passenger_user &lt;username&gt;</h4>
1622
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_user">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_user</a></p></div>
1623
- </div>
1624
- <div class="sect3">
1625
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerGroup"></span><h4 data-comment-topic="passenger-user-group-name--1fco4j7" data-anchor="PassengerGroup">7.4.3. passenger_group &lt;group name&gt;</h4>
1626
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_group">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_group</a></p></div>
1627
- </div>
1628
- <div class="sect3">
1629
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerDefaultUser"></span><h4 data-comment-topic="passenger-default-user-username--1h6cdmf" data-anchor="PassengerDefaultUser">7.4.4. passenger_default_user &lt;username&gt;</h4>
1630
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_default_user">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_default_user</a></p></div>
1631
- </div>
1632
- <div class="sect3">
1633
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerDefaultGroup"></span><h4 data-comment-topic="passenger-default-group-group-name--1qxn2qa" data-anchor="PassengerDefaultGroup">7.4.5. Passenger_default_group &lt;group name&gt;</h4>
1634
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_default_group">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_default_group</a></p></div>
1635
- </div>
1636
- <div class="sect3">
1637
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_show_version_in_header_lt_on_off_gt"></span><h4 data-comment-topic="passenger-show-version-in-header-on-off--2h49av" data-anchor="_passenger_show_version_in_header_lt_on_off_gt">7.4.6. passenger_show_version_in_header &lt;on|off&gt;</h4>
1638
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_show_version_in_header">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_show_version_in_header</a></p></div>
1639
- </div>
1640
- <div class="sect3">
1641
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerFriendlyErrorPages"></span><h4 data-comment-topic="passenger-friendly-error-pages-on-off--1ti1a0e" data-anchor="PassengerFriendlyErrorPages">7.4.7. passenger_friendly_error_pages &lt;on|off&gt;</h4>
1642
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_friendly_error_pages">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_friendly_error_pages</a></p></div>
1643
- </div>
1644
- </div>
1645
- <div class="sect2">
1646
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_resource_control_and_optimization_options"></span><h3 data-comment-topic="resource-control-and-optimization-options-xd7evs" data-anchor="_resource_control_and_optimization_options">7.5. Resource control and optimization options</h3>
1647
- <div class="sect3">
1648
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerMaxPoolSize"></span><h4 data-comment-topic="passenger-max-pool-size-integer--3jzefs" data-anchor="PassengerMaxPoolSize">7.5.1. passenger_max_pool_size &lt;integer&gt;</h4>
1649
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_max_pool_size">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_max_pool_size</a></p></div>
1650
- </div>
1651
- <div class="sect3">
1652
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerMinInstances"></span><h4 data-comment-topic="passenger-min-instances-integer--uclykt" data-anchor="PassengerMinInstances">7.5.2. passenger_min_instances &lt;integer&gt;</h4>
1653
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_min_instances">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_min_instances</a></p></div>
1654
- </div>
1655
- <div class="sect3">
1656
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerMaxInstances"></span><h4 data-comment-topic="passenger-max-instances" data-anchor="PassengerMaxInstances">7.5.3. passenger_max_instances &lt;integer&gt;</h4>
1657
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_max_instances">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_max_instances</a></p></div>
1658
- </div>
1659
- <div class="sect3">
1660
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_max_instances_per_app_lt_integer_gt"></span><h4 data-comment-topic="passenger-max-instances-per-app-integer--1xhbbne" data-anchor="_passenger_max_instances_per_app_lt_integer_gt">7.5.4. passenger_max_instances_per_app &lt;integer&gt;</h4>
1661
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_max_instances_per_app">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_max_instances_per_app</a></p></div>
1662
- </div>
1663
- <div class="sect3">
1664
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerPoolIdleTime"></span><h4 data-comment-topic="passenger-pool-idle-time-integer--xcw65o" data-anchor="PassengerPoolIdleTime">7.5.5. passenger_pool_idle_time &lt;integer&gt;</h4>
1665
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_pool_idle_time">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_pool_idle_time</a></p></div>
1666
- </div>
1667
- <div class="sect3">
1668
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_max_preloader_idle_time_lt_integer_gt"></span><h4 data-comment-topic="rails-app-spawner-idle-time-integer--1xjqe4b" data-anchor="_passenger_max_preloader_idle_time_lt_integer_gt">7.5.6. passenger_max_preloader_idle_time &lt;integer&gt;</h4>
1669
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_max_preloader_idle_time">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_max_preloader_idle_time</a></p></div>
1670
- </div>
1671
- <div class="sect3">
1672
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_start_timeout_lt_seconds_gt"></span><h4 data-comment-topic="passenger-start-timeout-seconds--8xn504" data-anchor="_passenger_start_timeout_lt_seconds_gt">7.5.7. passenger_start_timeout &lt;seconds&gt;</h4>
1673
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_start_timeout">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_start_timeout</a></p></div>
1674
- </div>
1675
- <div class="sect3">
1676
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerConcurrencyModel"></span><h4 data-comment-topic="passenger-concurrency-model-process-thread--brcvkk" data-anchor="PassengerConcurrencyModel">7.5.8. passenger_concurrency_model &lt;process|thread&gt;</h4>
1677
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_concurrency_model">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_concurrency_model</a></p></div>
1678
- </div>
1679
- <div class="sect3">
1680
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerThreadCount"></span><h4 data-comment-topic="passenger-thread-count-number--1kd6ffy" data-anchor="PassengerThreadCount">7.5.9. passenger_thread_count &lt;number&gt;</h4>
1681
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_thread_count">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_thread_count</a></p></div>
1682
- </div>
1683
- <div class="sect3">
1684
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerMaxRequests"></span><h4 data-comment-topic="passenger-max-requests-integer--sgzint" data-anchor="PassengerMaxRequests">7.5.10. passenger_max_requests &lt;integer&gt;</h4>
1685
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_max_requests">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_max_requests</a></p></div>
1686
- </div>
1687
- <div class="sect3">
1688
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerMaxRequestTime"></span><h4 data-comment-topic="passenger-max-request-time-seconds--1htog2g" data-anchor="PassengerMaxRequestTime">7.5.11. passenger_max_request_time &lt;seconds&gt;</h4>
1689
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_max_request_time">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_max_request_time</a></p></div>
1690
- </div>
1691
- <div class="sect3">
1692
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerMemoryLimit"></span><h4 data-comment-topic="passenger-memory-limit-integer--1ry7dwx" data-anchor="PassengerMemoryLimit">7.5.12. passenger_memory_limit &lt;integer&gt;</h4>
1693
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_memory_limit">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_memory_limit</a></p></div>
1694
- </div>
1695
- <div class="sect3">
1696
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_stat_throttle_rate_lt_integer_gt"></span><h4 data-comment-topic="passenger-stat-throttle-rate-integer--xzjbry" data-anchor="_passenger_stat_throttle_rate_lt_integer_gt">7.5.13. passenger_stat_throttle_rate &lt;integer&gt;</h4>
1697
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_stat_throttle_rate">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_stat_throttle_rate</a></p></div>
1698
- </div>
1699
- <div class="sect3">
1700
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerPreStart"></span><h4 data-comment-topic="passenger-pre-start-url--npldeb" data-anchor="PassengerPreStart">7.5.14. passenger_pre_start &lt;url&gt;</h4>
1701
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_pre_start">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_pre_start</a></p></div>
1702
- </div>
1703
- </div>
1704
- <div class="sect2">
1705
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_connection_handling_options"></span><h3 data-comment-topic="connection-handling-options-8jgq90" data-anchor="_connection_handling_options">7.6. Connection handling options</h3>
1706
- <div class="sect3">
1707
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerSetHeader"></span><h4 data-comment-topic="passenger-set-cgi-param-cgi-environment-name-value--rx9gc0" data-anchor="PassengerSetHeader">7.6.1. passenger_set_header &lt;HTTP header name&gt; &lt;value&gt;</h4>
1708
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_set_header">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_set_header</a></p></div>
1709
- </div>
1710
- <div class="sect3">
1711
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="passenger_max_request_queue_size"></span><h4 data-comment-topic="passenger-max-request-queue-size-number--i0te1b" data-anchor="passenger_max_request_queue_size">7.6.2. passenger_max_request_queue_size &lt;number&gt;</h4>
1712
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_max_request_queue_size">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_max_request_queue_size</a></p></div>
1713
- </div>
1714
- <div class="sect3">
1715
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="passenger_request_queue_overflow_status_code"></span><h4 data-comment-topic="passenger-request-queue-overflow-status-code-code--1wcwuxl" data-anchor="passenger_request_queue_overflow_status_code">7.6.3. passenger_request_queue_overflow_status_code &lt;code&gt;</h4>
1716
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_request_queue_overflow_status_code">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_request_queue_overflow_status_code</a></p></div>
1717
- </div>
1718
- <div class="sect3">
1719
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerStickySessions"></span><h4 data-comment-topic="passenger-sticky-sessions-on-off--lwvbxs" data-anchor="PassengerStickySessions">7.6.4. passenger_sticky_sessions &lt;on|off&gt;</h4>
1720
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_sticky_sessions">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_sticky_sessions</a></p></div>
1721
- </div>
1722
- <div class="sect3">
1723
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerStickySessionsCookieName"></span><h4 data-comment-topic="passenger-sticky-sessions-cookie-name-8hrox9" data-anchor="PassengerStickySessionsCookieName">7.6.5. passenger_sticky_sessions_cookie_name</h4>
1724
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_sticky_sessions_cookie_name">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_sticky_sessions_cookie_name</a></p></div>
1725
- </div>
1726
- <div class="sect3">
1727
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_ignore_client_abort_lt_on_off_gt"></span><h4 data-comment-topic="passenger-ignore-client-abort" data-anchor="_passenger_ignore_client_abort_lt_on_off_gt">7.6.6. passenger_ignore_client_abort &lt;on|off&gt;</h4>
1728
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_ignore_client_abort">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_ignore_client_abort</a></p></div>
1729
- </div>
1730
- <div class="sect3">
1731
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="passenger_intercept_errors"></span><h4 data-comment-topic="passenger-intercept-errors-1uvcb9x" data-anchor="passenger_intercept_errors">7.6.7. passenger_intercept_errors &lt;on|off&gt;</h4>
1732
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_intercept_errors">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_intercept_errors</a></p></div>
1733
- </div>
1734
- <div class="sect3">
1735
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_pass_header_lt_header_name_gt"></span><h4 data-comment-topic="passenger-pass-header-header-name--1cg31je" data-anchor="_passenger_pass_header_lt_header_name_gt">7.6.8. passenger_pass_header &lt;header name&gt;</h4>
1736
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_pass_header-header-name">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_pass_header-header-name</a></p></div>
1737
- </div>
1738
- <div class="sect3">
1739
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_ignore_headers_lt_header_names_8230_gt"></span><h4 data-comment-topic="passenger-ignore-headers-header-names--12zg5oh" data-anchor="_passenger_ignore_headers_lt_header_names_8230_gt">7.6.9. passenger_ignore_headers &lt;header names…&gt;</h4>
1740
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_ignore_headers">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_ignore_headers</a></p></div>
1741
- </div>
1742
- <div class="sect3">
1743
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_headers_hash_bucket_size_lt_size_gt"></span><h4 data-comment-topic="passenger-headers-hash-bucket-size-size--zx1rwf" data-anchor="_passenger_headers_hash_bucket_size_lt_size_gt">7.6.10. passenger_headers_hash_bucket_size &lt;size&gt;</h4>
1744
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_headers_hash_bucket_size">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_headers_hash_bucket_size</a></p></div>
1745
- </div>
1746
- <div class="sect3">
1747
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_headers_hash_max_size_lt_size_gt"></span><h4 data-comment-topic="passenger-headers-hash-max-size-size--1vl0i9u" data-anchor="_passenger_headers_hash_max_size_lt_size_gt">7.6.11. passenger_headers_hash_max_size &lt;size&gt;</h4>
1748
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_headers_hash_max_size">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_headers_hash_max_size</a></p></div>
1749
- </div>
1750
- <div class="sect3">
1751
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="passenger_buffer_response"></span><h4 data-comment-topic="passenger-buffer-response" data-anchor="passenger_buffer_response">7.6.12. passenger_buffer_response &lt;on|off&gt;</h4>
1752
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_buffer_response">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_buffer_response</a></p></div>
1753
- </div>
1754
- <div class="sect3">
1755
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerResponseBufferHighWatermark"></span><h4 data-comment-topic="passenger-response-buffer-high-watermark-bytes--ranajv" data-anchor="PassengerResponseBufferHighWatermark">7.6.13. passenger_response_buffer_high_watermark &lt;bytes&gt;</h4>
1756
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_response_buffer_high_watermark">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_response_buffer_high_watermark</a></p></div>
1757
- </div>
1758
- <div class="sect3">
1759
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_buffer_size"></span><h4 data-comment-topic="passenger-buffer-size-1jfkq87" data-anchor="_passenger_buffer_size">7.6.14. passenger_buffer_size</h4>
1760
- </div>
1761
- <div class="sect3">
1762
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_buffers"></span><h4 data-comment-topic="passenger-busy-buffers" data-anchor="_passenger_buffers">7.6.15. passenger_buffers</h4>
1763
- </div>
1764
- <div class="sect3">
1765
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_busy_buffers_size"></span><h4 data-comment-topic="passenger-busy-buffer-size-124sj61" data-anchor="_passenger_busy_buffers_size">7.6.16. passenger_busy_buffers_size</h4>
1766
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_buffer_size-passenger_buffers-passenger_busy_buffers_size">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_buffer_size-passenger_buffers-passenger_busy_buffers_size</a></p></div>
1767
- </div>
1768
- </div>
1769
- <div class="sect2">
1770
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_logging_and_debugging_options"></span><h3 data-comment-topic="logging-and-debugging-options-14e91ni" data-anchor="_logging_and_debugging_options">7.7. Logging and debugging options</h3>
1771
- <div class="sect3">
1772
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerLogLevel"></span><h4 data-comment-topic="passenger-log-level-integer--17snhon" data-anchor="PassengerLogLevel">7.7.1. passenger_log_level &lt;integer&gt;</h4>
1773
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_log_level">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_log_level</a></p></div>
1774
- </div>
1775
- <div class="sect3">
1776
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerLogFile"></span><h4 data-comment-topic="passenger-debug-log-file-filename--21ubaj" data-anchor="PassengerLogFile">7.7.2. passenger_log_file &lt;filename&gt;</h4>
1777
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_log_file">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_log_file</a></p></div>
1778
- </div>
1779
- <div class="sect3">
1780
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passengerfiledescriptorlogfile_lt_filename_gt"></span><h4 data-comment-topic="passengerfiledescriptorlogfile-filename--bqbga8" data-anchor="_passengerfiledescriptorlogfile_lt_filename_gt">7.7.3. PassengerFileDescriptorLogFile &lt;filename&gt;</h4>
1781
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_file_descriptor_log_file">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_file_descriptor_log_file</a></p></div>
1782
- </div>
1783
- <div class="sect3">
1784
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_debugger_lt_on_off_gt"></span><h4 data-comment-topic="passenger-debugger-on-off--1wkuq85" data-anchor="_passenger_debugger_lt_on_off_gt">7.7.4. passenger_debugger &lt;on|off&gt;</h4>
1785
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_debugger">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_debugger</a></p></div>
1786
- </div>
1787
- </div>
1788
- <div class="sect2">
1789
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_advanced_options"></span><h3 data-comment-topic="advanced-options-hnuhqz" data-anchor="_advanced_options">7.8. Advanced options</h3>
1790
- <div class="sect3">
1791
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerInstanceRegistryDir"></span><h4 data-comment-topic="passenger-instance-registry-dir-directory--1jl6zij" data-anchor="PassengerInstanceRegistryDir">7.8.1. passenger_instance_registry_dir &lt;directory&gt;</h4>
1792
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_instance_registry_dir">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_instance_registry_dir</a></p></div>
1793
- </div>
1794
- <div class="sect3">
1795
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="PassengerDataBufferDir"></span><h4 data-comment-topic="passenger-data-buffer-dir-directory--1isg9cm" data-anchor="PassengerDataBufferDir">7.8.2. passenger_data_buffer_dir &lt;directory&gt;</h4>
1796
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_data_buffer_dir">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_data_buffer_dir</a></p></div>
1797
- </div>
1798
- <div class="sect3">
1799
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_fly_with_lt_socket_filename_gt"></span><h4 data-comment-topic="passenger-fly-with-socket-filename--1amd1xn" data-anchor="_passenger_fly_with_lt_socket_filename_gt">7.8.3. passenger_fly_with &lt;socket filename&gt;</h4>
1800
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_fly_with">https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_fly_with</a></p></div>
1801
- </div>
1802
- </div>
1803
- <div class="sect2">
1804
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_deprecated_or_removed_options"></span><h3 data-comment-topic="deprecated-options-1dtzo0g" data-anchor="_deprecated_or_removed_options">7.9. Deprecated or removed options</h3>
1805
- <div class="paragraph"><p>The following options have been deprecated or removed. Some are still supported for backwards
1806
- compatibility reasons.</p></div>
1807
- <div class="sect3">
1808
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_rails_spawn_method"></span><h4 data-comment-topic="rails-spawn-method-17vdnpt" data-anchor="_rails_spawn_method">7.9.1. rails_spawn_method</h4>
1809
- <div class="paragraph"><p>Deprecated in favor of <a href="#PassengerSpawnMethod">passenger_spawn_method</a>.</p></div>
1810
- </div>
1811
- <div class="sect3">
1812
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_passenger_debug_log_file"></span><h4 data-comment-topic="passenger-debug-log-file-1aqru34" data-anchor="_passenger_debug_log_file">7.9.2. passenger_debug_log_file</h4>
1813
- <div class="paragraph"><p>This option has been renamed in version 5.0.5 to <a href="#PassengerLogFile">passenger_log_file</a>.</p></div>
1814
- </div>
1815
- </div>
1816
- </div>
1817
- </div>
1818
- <div class="sect1">
1819
- <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-1pt0c76" data-anchor="troubleshooting">8. Troubleshooting</h2>
1820
- <div class="sectionbody">
1821
- <div class="sect2">
1822
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_generic_troubleshooting_tips"></span><h3 data-comment-topic="generic-troubleshooting-tips-xhe4nu" data-anchor="_generic_troubleshooting_tips">8.1. Generic troubleshooting tips</h3>
1823
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/admin/nginx/troubleshooting/">https://www.phusionpassenger.com/library/admin/nginx/troubleshooting/</a></p></div>
1824
- </div>
1825
- <div class="sect2">
1826
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_why_does_the_first_request_take_a_long_time"></span><h3 data-comment-topic="why-does-the-first-request-take-a-long-time--1knj9fp" data-anchor="_why_does_the_first_request_take_a_long_time">8.2. Why does the first request take a long time?</h3>
1827
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/admin/nginx/troubleshooting/?a=why-does-the-first-request-take-a-long-time">https://www.phusionpassenger.com/library/admin/nginx/troubleshooting/?a=why-does-the-first-request-take-a-long-time</a></p></div>
1828
- </div>
1829
- <div class="sect2">
1830
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_upon_accessing_the_web_app_nginx_reports_a_permission_denied_error"></span><h3 data-comment-topic="upon-accessing-the-web-app-nginx-reports-a-permission-denied-error-1wgatlk" data-anchor="_upon_accessing_the_web_app_nginx_reports_a_permission_denied_error">8.3. Upon accessing the web app, Nginx reports a "Permission denied" error</h3>
1831
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/admin/nginx/troubleshooting/?a=upon-accessing-the-web-app-nginx-reports-a-permission-denied-error">https://www.phusionpassenger.com/library/admin/nginx/troubleshooting/?a=upon-accessing-the-web-app-nginx-reports-a-permission-denied-error</a></p></div>
1832
- </div>
1833
- <div class="sect2">
1834
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_i_get_command_not_found_when_running_a_phusion_passenger_command_through_sudo"></span><h3 data-comment-topic="i-get-command-not-found-when-running-a-phusion-passenger-command-through-sudo-10fzwno" data-anchor="_i_get_command_not_found_when_running_a_phusion_passenger_command_through_sudo">8.4. I get "command not found" when running a Phusion Passenger command through sudo</h3>
1835
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/admin/nginx/troubleshooting/?a=i-get-command-not-found-when-running-a-passenger-command-through-sudo">https://www.phusionpassenger.com/library/admin/nginx/troubleshooting/?a=i-get-command-not-found-when-running-a-passenger-command-through-sudo</a></p></div>
1836
- </div>
1837
- <div class="sect2">
1838
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_the_application_thinks_its_not_on_ssl_even_though_it_is"></span><h3 data-comment-topic="the-application-thinks-its-not-on-ssl-even-though-it-is-1e2m21h" data-anchor="_the_application_thinks_its_not_on_ssl_even_though_it_is">8.5. The application thinks its not on SSL even though it is</h3>
1839
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/admin/nginx/troubleshooting/">https://www.phusionpassenger.com/library/admin/nginx/troubleshooting/</a></p></div>
1840
- </div>
1841
- <div class="sect2">
1842
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_ruby_on_rails_specific_troubleshooting"></span><h3 data-comment-topic="ruby-on-rails-specific-troubleshooting-n8u5u1" data-anchor="_ruby_on_rails_specific_troubleshooting">8.6. Ruby on Rails-specific troubleshooting</h3>
1843
- <div class="sect3">
1844
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_the_about_your_application_8217_s_environment_link_does_not_work"></span><h4 data-comment-topic="the-about-your-application-s-environment-link-does-not-work-9p7b2g" data-anchor="_the_about_your_application_8217_s_environment_link_does_not_work">8.6.1. The "About your application’s environment" link does not work</h4>
1845
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/admin/nginx/troubleshooting/ruby/#the-about-your-application-s-environment-link-does-not-work">https://www.phusionpassenger.com/library/admin/nginx/troubleshooting/ruby/#the-about-your-application-s-environment-link-does-not-work</a></p></div>
1846
- </div>
1847
- <div class="sect3">
1848
- <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-58ww8s" data-anchor="_the_rails_application_reports_that_it_8217_s_unable_to_start_because_of_a_permission_error">8.6.2. The Rails application reports that it’s unable to start because of a permission error</h4>
1849
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/admin/nginx/troubleshooting/ruby/#the-rails-application-reports-that-it-s-unable-to-start-because-of-a-permission-error">https://www.phusionpassenger.com/library/admin/nginx/troubleshooting/ruby/#the-rails-application-reports-that-it-s-unable-to-start-because-of-a-permission-error</a></p></div>
1850
- </div>
1851
- <div class="sect3">
1852
- <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_8217_s_log_file_is_not_being_written_to"></span><h4 data-comment-topic="the-rails-application-s-log-file-is-not-being-written-to-9m2i5h" data-anchor="_the_rails_application_8217_s_log_file_is_not_being_written_to">8.6.3. The Rails application’s log file is not being written to</h4>
1853
- <div class="paragraph"><p>There are a couple things that you should be aware of:</p></div>
1854
- <div class="ulist"><ul>
1855
- <li>
1856
- <p>
1857
- By default, Phusion Passenger runs Rails applications in <em>production</em> mode,
1858
- so please be sure to check <span class="monospaced">production.log</span> instead of <span class="monospaced">development.log</span>.
1859
- </p>
1860
- <div class="paragraph"><p>See
1861
- <a href="#RailsEnv">rails_env</a>
1862
- for configuration.
1863
- - By default, Phusion Passenger runs Rails applications as the owner of <span class="monospaced">config.ru</span>.
1864
- So the log file can only be written to if that user has write permission to the
1865
- log file. Please <span class="monospaced">chmod</span> or <span class="monospaced">chown</span> your log file accordingly.</p></div>
1866
- <div class="paragraph"><p>See <a href="#User_switching">User switching (security)</a> for details.</p></div>
1867
- </li>
1868
- </ul></div>
1869
- <div class="paragraph"><p>If you’re using a RedHat-derived Linux distribution (such as Fedora or CentOS)
1870
- then it is <a href="http://code.google.com/p/phusion-passenger/issues/detail?id=4">possible
1871
- that SELinux is interfering</a>. RedHat’s SELinux policy only allows Apache to read/write
1872
- directories that have the <em>httpd_sys_content_t</em> security context. Please run the
1873
- following command to give your Rails application folder that context:</p></div>
1874
- <div class="listingblock">
1875
- <div class="content monospaced">
1876
- <pre>chcon -R -h -t httpd_sys_content_t /path/to/your/rails/app</pre>
1877
- </div>
1878
- </div>
1879
- </div>
1880
- </div>
1881
- </div>
1882
- </div>
1883
- <div class="sect1">
1884
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_analysis_and_system_maintenance"></span><h2 data-comment-topic="analysis-and-system-maintenance-1nnlnj8" data-anchor="_analysis_and_system_maintenance">9. Analysis and system maintenance</h2>
1885
- <div class="sectionbody">
1886
- <div class="sect2">
1887
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_inspecting_memory_usage"></span><h3 data-comment-topic="inspecting-memory-usage-1k6y8v0" data-anchor="_inspecting_memory_usage">9.1. Inspecting memory usage</h3>
1888
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/admin/nginx/overall_status_report.html">https://www.phusionpassenger.com/library/admin/nginx/overall_status_report.html</a></p></div>
1889
- </div>
1890
- <div class="sect2">
1891
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_inspecting_phusion_passenger_8217_s_internal_status"></span><h3 data-comment-topic="inspecting-phusion-passenger-s-internal-status-v36wbc" data-anchor="_inspecting_phusion_passenger_8217_s_internal_status">9.2. Inspecting Phusion Passenger’s internal status</h3>
1892
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/admin/nginx/overall_status_report.html">https://www.phusionpassenger.com/library/admin/nginx/overall_status_report.html</a></p></div>
1893
- </div>
1894
- <div class="sect2">
1895
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="debugging_frozen"></span><h3 data-comment-topic="debugging-frozen-applications-qoctl8" data-anchor="debugging_frozen">9.3. Debugging frozen applications</h3>
1896
- <div class="paragraph"><p>If one of your application processes is frozen (stopped responding), then you
1897
- can figure out where it is frozen by killing it with <em>SIGABRT</em>. This will cause the
1898
- processs to print a backtrace, after which it aborts. The backtrace information is
1899
- logged into the web server error log file.</p></div>
1900
- <div class="paragraph"><p>In case of Ruby applications, you can also send the <em>SIGQUIT</em> signal to have it print
1901
- a backtrace without aborting.</p></div>
1902
- </div>
1903
- <div class="sect2">
1904
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_accessing_individual_application_processes"></span><h3 data-comment-topic="accessing-individual-application-processes-1qe4fqk" data-anchor="_accessing_individual_application_processes">9.4. Accessing individual application processes</h3>
1905
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/admin/nginx/request_individual_processes.html">https://www.phusionpassenger.com/library/admin/nginx/request_individual_processes.html</a></p></div>
1906
- </div>
1907
- <div class="sect2">
1908
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_attaching_an_irb_console_to_an_application_process"></span><h3 data-comment-topic="attaching-an-irb-console-to-an-application-process-d36enw" data-anchor="_attaching_an_irb_console_to_an_application_process">9.5. Attaching an IRB console to an application process</h3>
1909
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/admin/nginx/debugging_console/">https://www.phusionpassenger.com/library/admin/nginx/debugging_console/</a></p></div>
1910
- </div>
1911
- </div>
1912
- </div>
1913
- <div class="sect1">
1914
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_tips"></span><h2 data-comment-topic="tips-n4c22d" data-anchor="_tips">10. Tips</h2>
1915
- <div class="sectionbody">
1916
- <div class="sect2">
1917
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="user_switching"></span><h3 data-comment-topic="user-switching-security--zmsy9o" data-anchor="user_switching">10.1. User Switching (security feature)</h3>
1918
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/deploy/nginx/user_sandboxing.html">https://www.phusionpassenger.com/library/deploy/nginx/user_sandboxing.html</a></p></div>
1919
- <div class="sect3">
1920
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_requirements"></span><h4 data-comment-topic="requirements-15ozqdj" data-anchor="_requirements">10.1.1. Requirements</h4>
1921
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/deploy/nginx/user_sandboxing.html">https://www.phusionpassenger.com/library/deploy/nginx/user_sandboxing.html</a></p></div>
1922
- </div>
1923
- <div class="sect3">
1924
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_effects"></span><h4 data-comment-topic="effects-nd2m44" data-anchor="_effects">10.1.2. Effects</h4>
1925
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/deploy/nginx/user_sandboxing.html">https://www.phusionpassenger.com/library/deploy/nginx/user_sandboxing.html</a></p></div>
1926
- </div>
1927
- <div class="sect3">
1928
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_caveats_amp_troubleshooting"></span><h4 data-comment-topic="caveats-troubleshooting-mbw582" data-anchor="_caveats_amp_troubleshooting">10.1.3. Caveats &amp; troubleshooting</h4>
1929
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/deploy/nginx/user_sandboxing.html">https://www.phusionpassenger.com/library/deploy/nginx/user_sandboxing.html</a></p></div>
1930
- </div>
1931
- <div class="sect3">
1932
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="user_switching_rpm_caveats"></span><h4 data-comment-topic="red-hat-and-centos-caveats-ilqxyl" data-anchor="user_switching_rpm_caveats">10.1.4. Red Hat and CentOS caveats</h4>
1933
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/deploy/nginx/user_sandboxing.html">https://www.phusionpassenger.com/library/deploy/nginx/user_sandboxing.html</a></p></div>
1934
- </div>
1935
- <div class="sect3">
1936
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="finding_out_app_user"></span><h4 data-comment-topic="finding-out-what-user-an-application-is-running-as-1ni7zk6" data-anchor="finding_out_app_user">10.1.5. Finding out what user an application is running as</h4>
1937
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/deploy/nginx/user_sandboxing.html">https://www.phusionpassenger.com/library/deploy/nginx/user_sandboxing.html</a></p></div>
1938
- </div>
1939
- </div>
1940
- <div class="sect2">
1941
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="reducing_memory_usage"></span><h3 data-comment-topic="reducing-memory-consumption-of-ruby-on-rails-applications-by-33--1o3z66q" data-anchor="reducing_memory_usage">10.2. Copy-on-write memory support (reducing memory consumption of Ruby applications)</h3>
1942
- <div class="paragraph"><p>Phusion Passenger automatically leverages operating system virtual memory copy-on-write features in order to reduce the memory usage of Ruby applications. Experience has shown that this reduces memory usage by 33% on average. For this mechanism to work, a Ruby interpreter with a copy-on-write friendly garbage collector is required. The following Ruby interpreters have copy-on-write friendly garbage collectors:</p></div>
1943
- <div class="ulist"><ul>
1944
- <li>
1945
- <p>
1946
- MRI Ruby &gt;= 2.0. Versions prior to 2.0 did not have a copy-on-write friendly garbage collector.
1947
- </p>
1948
- </li>
1949
- <li>
1950
- <p>
1951
- <a href="http://www.rubyenterpriseedition.com/">Ruby Enterprise Edition</a>, which was Phusion’s branch of MRI Ruby 1.8 with a copy-on-write friendly garbage collector and other enhancement. It has reached End-Of-Life as of 2012, but remains available for legacy systems.
1952
- </p>
1953
- </li>
1954
- </ul></div>
1955
- </div>
1956
- <div class="sect2">
1957
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="tuning_sse_websockets"></span><h3 data-comment-topic="tuning-for-server-sent-events-and-websockets-8ec9td" data-anchor="tuning_sse_websockets">10.3. Tuning for Server Sent Events and WebSockets</h3>
1958
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/config/nginx/tuning_sse_and_websockets.html">https://www.phusionpassenger.com/library/config/nginx/tuning_sse_and_websockets.html</a></p></div>
1959
- </div>
1960
- <div class="sect2">
1961
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="bundler_support"></span><h3 data-comment-topic="bundler-support-19v1h43" data-anchor="bundler_support">10.4. Bundler support</h3>
1962
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/ruby/bundler.html">https://www.phusionpassenger.com/library/indepth/ruby/bundler.html</a></p></div>
1963
- <div class="sect3">
1964
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="add_passenger_to_gemfile"></span><h4 data-comment-topic="does-phusion-passenger-itself-need-to-be-added-to-the-gemfile--xn1a11" data-anchor="add_passenger_to_gemfile">10.4.1. Does Phusion Passenger itself need to be added to the Gemfile?</h4>
1965
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/ruby/bundler.html#does-passenger-itself-need-to-be-added-to-the-gemfile">https://www.phusionpassenger.com/library/indepth/ruby/bundler.html#does-passenger-itself-need-to-be-added-to-the-gemfile</a></p></div>
1966
- </div>
1967
- </div>
1968
- <div class="sect2">
1969
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_installing_multiple_ruby_on_rails_versions"></span><h3 data-comment-topic="installing-multiple-ruby-on-rails-versions-1bp1fff" data-anchor="_installing_multiple_ruby_on_rails_versions">10.5. Installing multiple Ruby on Rails versions</h3>
1970
- <div class="paragraph"><p>Each Ruby on Rails applications that are going to be deployed may require a
1971
- specific Ruby on Rails version. You can install a specific version with
1972
- this command:</p></div>
1973
- <div class="listingblock">
1974
- <div class="content monospaced">
1975
- <pre>gem install rails -v X.X.X</pre>
1976
- </div>
1977
- </div>
1978
- <div class="paragraph"><p>where <em>X.X.X</em> is the version number of Ruby on Rails.</p></div>
1979
- <div class="paragraph"><p>All of these versions will exist in parallel, and will not conflict with each
1980
- other. Phusion Passenger will automatically make use of the correct version.</p></div>
1981
- </div>
1982
- <div class="sect2">
1983
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_making_the_application_restart_after_each_request"></span><h3 data-comment-topic="making-the-application-restart-after-each-request-vimy48" data-anchor="_making_the_application_restart_after_each_request">10.6. Making the application restart after each request</h3>
1984
- <div class="paragraph"><p>In some situations it might be desirable to restart the web application after
1985
- each request, for example when developing a non-Rails application that doesn’t
1986
- support code reloading, or when developing a web framework.</p></div>
1987
- <div class="paragraph"><p>To achieve this, simply create the file <em>tmp/always_restart.txt</em> in your
1988
- application’s root folder. Unlike <em>restart.txt</em>, Phusion Passenger does not
1989
- check for this file’s timestamp: Phusion Passenger will always restart the
1990
- application, as long as <em>always_restart.txt</em> exists.</p></div>
1991
- <div class="admonitionblock">
1992
- <table><tr>
1993
- <td class="icon">
1994
- <img src="./images/icons/note.png" alt="Note">
1995
- </td>
1996
- <td class="content">If you’re just developing a Rails application then you probably don’t need
1997
- this feature. If you set
1998
- <em>rails_env development</em>
1999
- in your web server configuration,
2000
- then Rails will automatically reload your application code after each request.
2001
- <em>always_restart.txt</em> is mostly useful when you’re using a web framework that
2002
- doesn’t support code reloading by itself, of when you’re working on a web framework
2003
- yourself.</td>
2004
- </tr></table>
2005
- </div>
2006
- </div>
2007
- <div class="sect2">
2008
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="sub_uri_deployment_uri_fix"></span><h3 data-comment-topic="how-to-fix-broken-images-css-javascript-uris-in-sub-uri-deployments-11mzwt6" data-anchor="sub_uri_deployment_uri_fix">10.7. How to fix broken images/CSS/JavaScript URIs in sub-URI deployments</h3>
2009
- <div class="paragraph"><p>Some people experience broken images and other broken static assets when they
2010
- deploy their application to a sub-URI (i.e. <em>http://mysite.com/railsapp/</em>).
2011
- The reason for this usually is that you used a
2012
- static URI for your image in the views. This means your <em>img</em> source probably refers
2013
- to something like <em>/images/foo.jpg</em>. The leading slash means that it’s an absolute URI:
2014
- you’re telling the browser to always load <em>http://mysite.com/images/foo.jpg</em> no
2015
- matter what. The problem is that the image is actually at
2016
- <em>http://mysite.com/railsapp/images/foo.jpg</em>. There are two ways to fix this.</p></div>
2017
- <div class="paragraph"><p>The first way (not recommended) is to change your view templates to refer to
2018
- <em>images/foo.jpg</em>. This is a relative URI: note the lack of a leading slash). What
2019
- this does is making the path relative to the current URI. The problem is that if you
2020
- use restful URIs, then your images will probably break again when you add a level to
2021
- the URI.
2022
- For example, when you’re at <em>http://mysite.com/railsapp</em> the browser will look for
2023
- <em>http://mysite.com/railsapp/images/foo.jpg</em>. But when you’re at
2024
- <em>http://mysite.com/railsapp/controller</em>. the browser will look for
2025
- <em>http://mysite.com/railsapp/controller/images/foo.jpg</em>.
2026
- So relative URIs usually don’t work well with layout templates.</p></div>
2027
- <div class="paragraph"><p>The second and highly recommended way is to always use Rails helper methods to
2028
- output tags for static assets. These helper methods automatically take care
2029
- of prepending the base URI that you’ve deployed the application to. For images
2030
- there is <span class="monospaced">image_tag</span>, for JavaScript there is <span class="monospaced">javascript_include_tag</span> and for
2031
- CSS there is <span class="monospaced">stylesheet_link_tag</span>. In the above example you would simply remove
2032
- the <em>&lt;img&gt;</em> HTML tag and replace it with inline Ruby like this:</p></div>
2033
- <div class="listingblock">
2034
- <div class="content monospaced">
2035
- <pre>&lt;%= image_tag("foo.jpg") %&gt;</pre>
2036
- </div>
2037
- </div>
2038
- <div class="paragraph"><p>This will generate the proper image tag to <span class="monospaced">$RAILS_ROOT/public/images/foo.jpg</span>
2039
- so that your images will always work no matter what sub-URI you’ve deployed to.</p></div>
2040
- <div class="paragraph"><p>These helper methods are more valuable than you may think. For example they also
2041
- append a timestamp to the URI to better facilitate HTTP caching. For more information,
2042
- please refer to
2043
- <a href="http://api.rubyonrails.org/classes/ActionView/Helpers/AssetTagHelper.html">the Rails API docs</a>.</p></div>
2044
- </div>
2045
- <div class="sect2">
2046
- <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_work_and_out_of_band_garbage_collection"></span><h3 data-comment-topic="out-of-band-work-and-out-of-band-garbage-collection-v89lu2" data-anchor="_out_of_band_work_and_out_of_band_garbage_collection">10.8. Out-of-Band Work and Out-of-Band Garbage Collection</h3>
2047
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/ruby/out_of_band_work.html">https://www.phusionpassenger.com/library/indepth/ruby/out_of_band_work.html</a></p></div>
2048
- </div>
2049
- <div class="sect2">
2050
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_hooks"></span><h3 data-comment-topic="hooks-qrxle1" data-anchor="_hooks">10.9. Hooks</h3>
2051
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/hooks.html">https://www.phusionpassenger.com/library/indepth/hooks.html</a></p></div>
2052
- <div class="sect3">
2053
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_example"></span><h4 data-comment-topic="example-1orara9" data-anchor="_example">10.9.1. Example</h4>
2054
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/hooks.html#example">https://www.phusionpassenger.com/library/indepth/hooks.html#example</a></p></div>
2055
- </div>
2056
- <div class="sect3">
2057
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_environment"></span><h4 data-comment-topic="environment-10uhg8m" data-anchor="_environment">10.9.2. Environment</h4>
2058
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/hooks.html#environment">https://www.phusionpassenger.com/library/indepth/hooks.html#environment</a></p></div>
2059
- </div>
2060
- <div class="sect3">
2061
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_blocking_and_concurrency"></span><h4 data-comment-topic="blocking-and-concurrency-g5njp1" data-anchor="_blocking_and_concurrency">10.9.3. Blocking and concurrency</h4>
2062
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/hooks.html#blocking-and-concurrency">https://www.phusionpassenger.com/library/indepth/hooks.html#blocking-and-concurrency</a></p></div>
2063
- </div>
2064
- <div class="sect3">
2065
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_error_handling"></span><h4 data-comment-topic="error-handling-m78oxs" data-anchor="_error_handling">10.9.4. Error handling</h4>
2066
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/hooks.html#error-handling">https://www.phusionpassenger.com/library/indepth/hooks.html#error-handling</a></p></div>
2067
- </div>
2068
- <div class="sect3">
2069
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_compatibility"></span><h4 data-comment-topic="compatibility-132b3ns" data-anchor="_compatibility">10.9.5. Compatibility</h4>
2070
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/hooks.html#compatibility">https://www.phusionpassenger.com/library/indepth/hooks.html#compatibility</a></p></div>
2071
- </div>
2072
- <div class="sect3">
2073
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_available_hooks"></span><h4 data-comment-topic="available-hooks-11w1prq" data-anchor="_available_hooks">10.9.6. Available hooks</h4>
2074
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/hooks.html#available-hooks">https://www.phusionpassenger.com/library/indepth/hooks.html#available-hooks</a></p></div>
2075
- </div>
2076
- </div>
2077
- <div class="sect2">
2078
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="flying_passenger"></span><h3 data-comment-topic="flying-passenger-137qg5e" data-anchor="flying_passenger">10.10. Flying Passenger</h3>
2079
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/deploy/nginx/flying_passenger.html">https://www.phusionpassenger.com/library/deploy/nginx/flying_passenger.html</a></p></div>
2080
- <div class="sect3">
2081
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_requirements_2"></span><h4 data-comment-topic="requirements-194ysj6" data-anchor="_requirements_2">10.10.1. Requirements</h4>
2082
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/deploy/nginx/flying_passenger.html">https://www.phusionpassenger.com/library/deploy/nginx/flying_passenger.html</a></p></div>
2083
- </div>
2084
- <div class="sect3">
2085
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_basic_usage"></span><h4 data-comment-topic="basic-usage-1qtgvwx" data-anchor="_basic_usage">10.10.2. Basic usage</h4>
2086
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/deploy/nginx/flying_passenger.html">https://www.phusionpassenger.com/library/deploy/nginx/flying_passenger.html</a></p></div>
2087
- </div>
2088
- <div class="sect3">
2089
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="configuring_flying_passenger"></span><h4 data-comment-topic="configuring-flying-passenger-n558np" data-anchor="configuring_flying_passenger">10.10.3. Configuring Flying Passenger</h4>
2090
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/deploy/nginx/flying_passenger.html">https://www.phusionpassenger.com/library/deploy/nginx/flying_passenger.html</a></p></div>
2091
- </div>
2092
- <div class="sect3">
2093
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_managing_the_flying_passenger_daemon"></span><h4 data-comment-topic="managing-the-flying-passenger-daemon-vjmzdh" data-anchor="_managing_the_flying_passenger_daemon">10.10.4. Managing the Flying Passenger daemon</h4>
2094
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/deploy/nginx/flying_passenger.html">https://www.phusionpassenger.com/library/deploy/nginx/flying_passenger.html</a></p></div>
2095
- </div>
2096
- <div class="sect3">
2097
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="using_flying_passenger_with_mri_18_or_jruby"></span><h4 data-comment-topic="using-flying-passenger-with-mri-1-8-or-jruby-pxho35" data-anchor="using_flying_passenger_with_mri_18_or_jruby">10.10.5. Using Flying Passenger with MRI 1.8 or JRuby</h4>
2098
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/deploy/nginx/flying_passenger.html">https://www.phusionpassenger.com/library/deploy/nginx/flying_passenger.html</a></p></div>
2099
- </div>
2100
- <div class="sect3">
2101
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="flying_passenger_caveats"></span><h4 data-comment-topic="caveats-and-limitations-15wakf" data-anchor="flying_passenger_caveats">10.10.6. Caveats and limitations</h4>
2102
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/deploy/nginx/flying_passenger.html">https://www.phusionpassenger.com/library/deploy/nginx/flying_passenger.html</a></p></div>
2103
- </div>
2104
- </div>
2105
- </div>
2106
- </div>
2107
- <div class="sect1">
2108
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_under_the_hood"></span><h2 data-comment-topic="under-the-hood-8uney" data-anchor="_under_the_hood">11. Under the hood</h2>
2109
- <div class="sectionbody">
2110
- <div class="sect2">
2111
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_page_caching_support"></span><h3 data-comment-topic="page-caching-support-nafhf6" data-anchor="_page_caching_support">11.1. Page caching support</h3>
2112
- <div class="paragraph"><p>For each HTTP request, Phusion Passenger will automatically look for a corresponding
2113
- page cache file, and serve that if it exists. It does this by appending ".html" to
2114
- the filename that the URI normally maps to, and checking whether that file exists.
2115
- This check occurs after checking whether the original mapped filename exists (as part
2116
- of static asset serving). All this is done without the need for special mod_rewrite
2117
- rules.</p></div>
2118
- <div class="paragraph"><p>For example, suppose that the browser requests <em>/foo/bar</em>.</p></div>
2119
- <div class="olist arabic"><ol class="arabic">
2120
- <li>
2121
- <p>
2122
- Phusion Passenger will first check whether this URI maps to a static file, i.e.
2123
- whether the file <em>foo/bar</em> exists in the web application’s <em>public</em> directory.
2124
- If it does then Phusion Passenger will serve this file through the web server immediately.
2125
- </p>
2126
- </li>
2127
- <li>
2128
- <p>
2129
- If that doesn’t exist, then Phusion Passenger will check whether the file
2130
- <em>foo/bar.html</em> exists. If it does then Phusion Passenger will serve this file
2131
- through the web server immediately.
2132
- </p>
2133
- </li>
2134
- <li>
2135
- <p>
2136
- If <em>foo/bar.html</em> doesn’t exist either, then Phusion Passenger will forward the
2137
- request to the underlying web application.
2138
- </p>
2139
- </li>
2140
- </ol></div>
2141
- <div class="paragraph"><p>Note that Phusion Passenger’s page caching support doesn’t work if your web
2142
- application uses a non-standard page cache directory, i.e. if it doesn’t cache to
2143
- the <em>public</em> directory. In that case you’ll need to use mod_rewrite to serve such
2144
- page cache files.</p></div>
2145
- </div>
2146
- <div class="sect2">
2147
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="relationship_with_ruby"></span><h3 data-comment-topic="phusion-passenger-and-its-relationship-with-ruby-1hub1pa" data-anchor="relationship_with_ruby">11.2. Phusion Passenger and its relationship with Ruby</h3>
2148
- <div class="sect3">
2149
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_how_ruby_is_used"></span><h4 data-comment-topic="how-ruby-is-used-j7g2a4" data-anchor="_how_ruby_is_used">11.2.1. How Ruby is used</h4>
2150
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/lightweight_ruby_dependency.html">https://www.phusionpassenger.com/library/indepth/lightweight_ruby_dependency.html</a></p></div>
2151
- </div>
2152
- <div class="sect3">
2153
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_when_the_system_has_multiple_ruby_interpreters"></span><h4 data-comment-topic="when-the-system-has-multiple-ruby-interpreters-fwn3t" data-anchor="_when_the_system_has_multiple_ruby_interpreters">11.2.2. When the system has multiple Ruby interpreters</h4>
2154
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/ruby/multiple_rubies.html">https://www.phusionpassenger.com/library/indepth/ruby/multiple_rubies.html</a></p></div>
2155
- </div>
2156
- </div>
2157
- <div class="sect2">
2158
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="application_detection"></span><h3 data-comment-topic="how-phusion-passenger-detects-whether-a-virtual-host-is-a-web-application-13qbmhn" data-anchor="application_detection">11.3. How Phusion Passenger detects whether a virtual host is a web application</h3>
2159
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/app_autodetection/nginx/">https://www.phusionpassenger.com/library/indepth/app_autodetection/nginx/</a></p></div>
2160
- </div>
2161
- </div>
2162
- </div>
2163
- <div class="sect1">
2164
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_appendix_a_about_this_document"></span><h2 data-comment-topic="appendix-a-about-this-document-zfvixm" data-anchor="_appendix_a_about_this_document">12. Appendix A: About this document</h2>
2165
- <div class="sectionbody">
2166
- <div class="paragraph"><p>The text of this document is licensed under the
2167
- <a href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons
2168
- Attribution-Share Alike 3.0 Unported License</a>.</p></div>
2169
- <div class="paragraph"><p><span class="image">
2170
- <a class="image" href="http://creativecommons.org/licenses/by-sa/3.0/">
2171
- <img src="images/by_sa.png" alt="images/by_sa.png">
2172
- </a>
2173
- </span></p></div>
2174
- <div class="paragraph"><p>Phusion Passenger is brought to you by <a href="http://www.phusion.nl/">Phusion</a>.</p></div>
2175
- <div class="paragraph"><p><span class="image">
2176
- <a class="image" href="http://www.phusion.nl/">
2177
- <img src="images/phusion_banner.png" alt="images/phusion_banner.png">
2178
- </a>
2179
- </span></p></div>
2180
- <div class="paragraph"><p>"Passenger", "Phusion Passenger" and "Union Station" are registered trademarks of Phusion Holding B.V.</p></div>
2181
- </div>
2182
- </div>
2183
- <div class="sect1">
2184
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_appendix_b_terminology"></span><h2 data-comment-topic="appendix-b-terminology-wzv5ro" data-anchor="_appendix_b_terminology">13. Appendix B: Terminology</h2>
2185
- <div class="sectionbody">
2186
- <div class="sect2">
2187
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="application_root"></span><h3 data-comment-topic="application-root-1fd6bqv" data-anchor="application_root">13.1. Application root</h3>
2188
- <div class="paragraph"><p>The root directory of an application that’s served by Phusion Passenger.</p></div>
2189
- <div class="paragraph"><p>In case of Ruby on Rails applications, this is the directory that contains
2190
- <em>Rakefile</em>, <em>app/</em>, <em>config/</em>, <em>public/</em>, etc. In other words, the directory
2191
- pointed to by <span class="monospaced">RAILS_ROOT</span>. For example, take the following directory structure:</p></div>
2192
- <div class="listingblock">
2193
- <div class="content monospaced">
2194
- <pre>/apps/foo/ &lt;------ This is the Rails application's application root!
2195
- |
2196
- +- app/
2197
- | |
2198
- | +- controllers/
2199
- | |
2200
- | +- models/
2201
- | |
2202
- | +- views/
2203
- |
2204
- +- config/
2205
- | |
2206
- | +- environment.rb
2207
- | |
2208
- | +- ...
2209
- |
2210
- +- public/
2211
- | |
2212
- | +- ...
2213
- |
2214
- +- ...</pre>
2215
- </div>
2216
- </div>
2217
- <div class="paragraph"><p>In case of Rack applications, this is the directory that contains <em>config.ru</em>.
2218
- For example, take the following directory structure:</p></div>
2219
- <div class="listingblock">
2220
- <div class="content monospaced">
2221
- <pre>/apps/bar/ &lt;----- This is the Rack application's application root!
2222
- |
2223
- +- public/
2224
- | |
2225
- | +- ...
2226
- |
2227
- +- config.ru
2228
- |
2229
- +- ...</pre>
2230
- </div>
2231
- </div>
2232
- <div class="paragraph"><p>In case of Python (WSGI) applications, this is the directory that contains
2233
- <em>passenger_wsgi.py</em>. For example, take the following directory structure:</p></div>
2234
- <div class="listingblock">
2235
- <div class="content monospaced">
2236
- <pre>/apps/baz/ &lt;----- This is the WSGI application's application root!
2237
- |
2238
- +- public/
2239
- | |
2240
- | +- ...
2241
- |
2242
- +- passenger_wsgi.py
2243
- |
2244
- +- ...</pre>
2245
- </div>
2246
- </div>
2247
- </div>
2248
- <div class="sect2">
2249
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="idle_process"></span><h3 data-comment-topic="idle-process-13byfw9" data-anchor="idle_process">13.2. Idle process</h3>
2250
- <div class="paragraph"><p>An "idle process" refers to a process that hasn’t processed any requests for a while.</p></div>
2251
- </div>
2252
- <div class="sect2">
2253
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="inactive_process"></span><h3 data-comment-topic="inactive-process-1d2h0po" data-anchor="inactive_process">13.3. Inactive process</h3>
2254
- <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>
2255
- </div>
2256
- </div>
2257
- </div>
2258
- <div class="sect1">
2259
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="spawning_methods_explained"></span><h2 data-comment-topic="appendix-c-spawning-methods-explained-tcp8e6" data-anchor="spawning_methods_explained">14. Appendix C: Spawning methods explained</h2>
2260
- <div class="sectionbody">
2261
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/spawn_methods/">https://www.phusionpassenger.com/library/indepth/spawn_methods/</a></p></div>
2262
- <div class="sect2">
2263
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_the_most_straightforward_and_traditional_way_direct_spawning"></span><h3 data-comment-topic="the-most-straightforward-and-traditional-way-conservative-spawning-civ29z" data-anchor="_the_most_straightforward_and_traditional_way_direct_spawning">14.1. The most straightforward and traditional way: direct spawning</h3>
2264
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/spawn_methods/">https://www.phusionpassenger.com/library/indepth/spawn_methods/</a></p></div>
2265
- </div>
2266
- <div class="sect2">
2267
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_the_smart_spawning_method"></span><h3 data-comment-topic="the-smart-spawning-method-7nhgtj" data-anchor="_the_smart_spawning_method">14.2. The smart spawning method</h3>
2268
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/spawn_methods/">https://www.phusionpassenger.com/library/indepth/spawn_methods/</a></p></div>
2269
- <div class="sect3">
2270
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_how_it_works"></span><h4 data-comment-topic="how-it-works-f9umga" data-anchor="_how_it_works">14.2.1. How it works</h4>
2271
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/spawn_methods/">https://www.phusionpassenger.com/library/indepth/spawn_methods/</a></p></div>
2272
- </div>
2273
- <div class="sect3">
2274
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_summary_of_benefits"></span><h4 data-comment-topic="summary-of-benefits-qovyvk" data-anchor="_summary_of_benefits">14.2.2. Summary of benefits</h4>
2275
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/spawn_methods/">https://www.phusionpassenger.com/library/indepth/spawn_methods/</a></p></div>
2276
- </div>
2277
- </div>
2278
- <div class="sect2">
2279
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_smart_spawning_caveat_1_unintentional_file_descriptor_sharing"></span><h3 data-comment-topic="smart-spawning-gotcha-1-unintentional-file-descriptor-sharing-cebw6q" data-anchor="_smart_spawning_caveat_1_unintentional_file_descriptor_sharing">14.3. Smart spawning caveat #1: unintentional file descriptor sharing</h3>
2280
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/spawn_methods/">https://www.phusionpassenger.com/library/indepth/spawn_methods/</a></p></div>
2281
- <div class="sect3">
2282
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_example_1_memcached_connection_sharing_harmful"></span><h4 data-comment-topic="example-1-memcached-connection-sharing-harmful--1wfs3ad" data-anchor="_example_1_memcached_connection_sharing_harmful">14.3.1. Example 1: Memcached connection sharing (harmful)</h4>
2283
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/spawn_methods/">https://www.phusionpassenger.com/library/indepth/spawn_methods/</a></p></div>
2284
- </div>
2285
- <div class="sect3">
2286
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_example_2_log_file_sharing_not_harmful"></span><h4 data-comment-topic="example-2-log-file-sharing-not-harmful--ox4yfy" data-anchor="_example_2_log_file_sharing_not_harmful">14.3.2. Example 2: Log file sharing (not harmful)</h4>
2287
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/spawn_methods/">https://www.phusionpassenger.com/library/indepth/spawn_methods/</a></p></div>
2288
- </div>
2289
- </div>
2290
- <div class="sect2">
2291
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_smart_spawning_caveat_2_the_need_to_revive_threads"></span><h3 data-comment-topic="smart-spawning-gotcha-2-the-need-to-revive-threads-1ey176o" data-anchor="_smart_spawning_caveat_2_the_need_to_revive_threads">14.4. Smart spawning caveat #2: the need to revive threads</h3>
2292
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/spawn_methods/">https://www.phusionpassenger.com/library/indepth/spawn_methods/</a></p></div>
2293
- </div>
2294
- </div>
2295
- </div>
2296
- <div class="sect1">
2297
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="about_environment_variables"></span><h2 data-comment-topic="appendix-d-about-environment-variables-1t2cuff" data-anchor="about_environment_variables">15. Appendix D: About environment variables</h2>
2298
- <div class="sectionbody">
2299
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/environment_variables.html">https://www.phusionpassenger.com/library/indepth/environment_variables.html</a></p></div>
2300
- <div class="sect2">
2301
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_working_with_environment_variables"></span><h3 data-comment-topic="working-with-environment-variables-1kmvq8w" data-anchor="_working_with_environment_variables">15.1. Working with environment variables</h3>
2302
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/environment_variables.html#working-with-environment-variables">https://www.phusionpassenger.com/library/indepth/environment_variables.html#working-with-environment-variables</a></p></div>
2303
- </div>
2304
- <div class="sect2">
2305
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="the_path_env_var"></span><h3 data-comment-topic="the-path-environment-variable-vlp05e" data-anchor="the_path_env_var">15.2. The PATH environment variable</h3>
2306
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/environment_variables.html#the-path-environment-variable">https://www.phusionpassenger.com/library/indepth/environment_variables.html#the-path-environment-variable</a></p></div>
2307
- <div class="sect3">
2308
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_adding_phusion_passenger_8217_s_administration_tools_to_path"></span><h4 data-comment-topic="adding-phusion-passenger-s-administration-tools-to-path-1flz2tu" data-anchor="_adding_phusion_passenger_8217_s_administration_tools_to_path">15.2.1. Adding Phusion Passenger’s administration tools to PATH</h4>
2309
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/environment_variables.html#adding-passenger-s-administration-tools-to-path">https://www.phusionpassenger.com/library/indepth/environment_variables.html#adding-passenger-s-administration-tools-to-path</a></p></div>
2310
- </div>
2311
- </div>
2312
- <div class="sect2">
2313
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_making_environment_variables_permanent"></span><h3 data-comment-topic="making-environment-variables-permanent-1wjyhzt" data-anchor="_making_environment_variables_permanent">15.3. Making environment variables permanent</h3>
2314
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/environment_variables.html#making-environment-variables-permanent">https://www.phusionpassenger.com/library/indepth/environment_variables.html#making-environment-variables-permanent</a></p></div>
2315
- <div class="sect3">
2316
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_bash"></span><h4 data-comment-topic="bash-19xsxec" data-anchor="_bash">15.3.1. bash</h4>
2317
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/environment_variables.html#bash">https://www.phusionpassenger.com/library/indepth/environment_variables.html#bash</a></p></div>
2318
- </div>
2319
- <div class="sect3">
2320
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_apache"></span><h4 data-comment-topic="apache-9hqtyj" data-anchor="_apache">15.3.2. Apache</h4>
2321
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/environment_variables.html#apache">https://www.phusionpassenger.com/library/indepth/environment_variables.html#apache</a></p></div>
2322
- </div>
2323
- <div class="sect3">
2324
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_nginx"></span><h4 data-comment-topic="nginx-157dpwy" data-anchor="_nginx">15.3.3. Nginx</h4>
2325
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/environment_variables.html#nginx">https://www.phusionpassenger.com/library/indepth/environment_variables.html#nginx</a></p></div>
2326
- </div>
2327
- <div class="sect3">
2328
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="_cron"></span><h4 data-comment-topic="cron-1nuc9cz" data-anchor="_cron">15.3.4. cron</h4>
2329
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/environment_variables.html#cron">https://www.phusionpassenger.com/library/indepth/environment_variables.html#cron</a></p></div>
2330
- </div>
2331
- <div class="sect3">
2332
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="env_vars_passenger_apps"></span><h4 data-comment-topic="phusion-passenger-served-apps-uiewl5" data-anchor="env_vars_passenger_apps">15.3.5. Phusion Passenger-served apps</h4>
2333
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/environment_variables.html#passenger-served-apps">https://www.phusionpassenger.com/library/indepth/environment_variables.html#passenger-served-apps</a></p></div>
2334
- </div>
2335
- </div>
2336
- <div class="sect2">
2337
- <a href="javascript:void(0)" class="comments empty" title="Add a comment"><span class="count"></span></a><span class="anchor_helper" id="env_vars_and_sudo"></span><h3 data-comment-topic="environment-variables-and-sudo-10lphxn" data-anchor="env_vars_and_sudo">15.4. Environment variables and sudo</h3>
2338
- <div class="paragraph"><p>This documentation has moved. Please visit <a href="https://www.phusionpassenger.com/library/indepth/environment_variables.html#environment-variables-and-sudo">https://www.phusionpassenger.com/library/indepth/environment_variables.html#environment-variables-and-sudo</a></p></div>
2339
- </div>
2340
- </div>
2341
- </div>
2342
- </div>
2343
- <div id="footnotes"><hr></div>
2344
- <div id="footer">
2345
-
2346
- </div>
2347
- <script>/*! jQuery v1.7.1 jquery.com | jquery.org/license */
2348
- (function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
2349
- f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
2350
- {for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
2351
- /**
2352
- * jQuery hashchange 1.0.0
2353
- *
2354
- * (based on jquery.history)
2355
- *
2356
- * Copyright (c) 2008 Chris Leishman (chrisleishman.com)
2357
- * Dual licensed under the MIT (MIT-LICENSE.txt)
2358
- * and GPL (GPL-LICENSE.txt) licenses.
2359
- */
2360
- (function($) {
2361
-
2362
- $.fn.extend({
2363
- hashchange: function(callback) { this.bind('hashchange', callback) },
2364
- openOnClick: function(href) {
2365
- if (href === undefined || href.length == 0)
2366
- href = '#';
2367
- return this.click(function(ev) {
2368
- if (href && href.charAt(0) == '#') {
2369
- // execute load in separate call stack
2370
- window.setTimeout(function() { $.locationHash(href) }, 0);
2371
- } else {
2372
- window.location(href);
2373
- }
2374
- ev.stopPropagation();
2375
- return false;
2376
- });
2377
- }
2378
- });
2379
-
2380
- // IE 8 introduces the hashchange event natively - so nothing more to do
2381
- if ($.browser.msie && document.documentMode && document.documentMode >= 8) {
2382
- $.extend({
2383
- locationHash: function(hash) {
2384
- if (!hash) hash = '#';
2385
- else if (hash.charAt(0) != '#') hash = '#' + hash;
2386
- location.hash = hash;
2387
- }
2388
- });
2389
- return;
2390
- }
2391
-
2392
- var curHash;
2393
- // hidden iframe for IE (earlier than 8)
2394
- var iframe;
2395
-
2396
- $.extend({
2397
- locationHash: function(hash) {
2398
- if (curHash === undefined) return;
2399
-
2400
- if (!hash) hash = '#';
2401
- else if (hash.charAt(0) != '#') hash = '#' + hash;
2402
-
2403
- location.hash = hash;
2404
-
2405
- if (curHash == hash) return;
2406
- curHash = hash;
2407
-
2408
- if ($.browser.msie) updateIEFrame(hash);
2409
- $.event.trigger('hashchange');
2410
- }
2411
- });
2412
-
2413
- $(document).ready(function() {
2414
- curHash = location.hash;
2415
- if ($.browser.msie) {
2416
- // stop the callback firing twice during init if no hash present
2417
- if (curHash == '') curHash = '#';
2418
- // add hidden iframe for IE
2419
- iframe = $('<iframe />').hide().get(0);
2420
- $('body').prepend(iframe);
2421
- updateIEFrame(location.hash);
2422
- setInterval(checkHashIE, 100);
2423
- } else {
2424
- setInterval(checkHash, 100);
2425
- }
2426
- });
2427
- $(window).unload(function() { iframe = null });
2428
-
2429
- function checkHash() {
2430
- var hash = location.hash;
2431
- if (hash != curHash) {
2432
- curHash = hash;
2433
- $.event.trigger('hashchange');
2434
- }
2435
- }
2436
-
2437
- if ($.browser.msie) {
2438
- // Attach a live handler for any anchor links
2439
- $('a[href^=#]').live('click', function() {
2440
- var hash = $(this).attr('href');
2441
- // Don't intercept the click if there is an existing anchor on the page
2442
- // that matches this hash
2443
- if ($(hash).length == 0 && $('a[name='+hash.slice(1)+']').length == 0) {
2444
- $.locationHash(hash);
2445
- return false;
2446
- }
2447
- });
2448
- }
2449
-
2450
- function checkHashIE() {
2451
- // On IE, check for location.hash of iframe
2452
- var idoc = iframe.contentDocument || iframe.contentWindow.document;
2453
- var hash = idoc.location.hash;
2454
- if (hash == '') hash = '#';
2455
-
2456
- if (hash != curHash) {
2457
- if (location.hash != hash) location.hash = hash;
2458
- curHash = hash;
2459
- $.event.trigger('hashchange');
2460
- }
2461
- }
2462
-
2463
- function updateIEFrame(hash) {
2464
- if (hash == '#') hash = '';
2465
- var idoc = iframe.contentWindow.document;
2466
- idoc.open();
2467
- idoc.close();
2468
- if (idoc.location.hash != hash) idoc.location.hash = hash;
2469
- }
2470
-
2471
- })(jQuery);
2472
- // IE...
2473
- if (!Date.now) {
2474
- Date.now = function() {
2475
- return new Date().getTime();
2476
- }
2477
- }
2478
-
2479
- var Mizuho = {
2480
- /** Cached DOM elements so that we don't have to re-find them over and over. */
2481
- $document: undefined,
2482
- $window: undefined,
2483
- $mainSections: undefined,
2484
- $sectionHeaders: undefined,
2485
-
2486
- /** Constants */
2487
- MAX_TOC_LEVEL: 3,
2488
-
2489
- sectionHeadersSelector: undefined,
2490
- scrollMemory: {},
2491
- changingHash: false,
2492
- activeHash: undefined,
2493
- /** Whether in single-page or multi-page mode. Either 'single' or 'multi'. */
2494
- mode: 'single',
2495
- /** Whether smooth scrolling is enabled. It is always enabled except right
2496
- * after page load: when the page is scrolled to the section as pointed to
2497
- * by location.hash.
2498
- */
2499
- smoothScrolling: true,
2500
-
2501
- initialize: function() {
2502
- this.sectionHeadersSelector = '';
2503
- for (var i = 0; i < this.MAX_TOC_LEVEL; i++) {
2504
- if (i != 0) {
2505
- this.sectionHeadersSelector += ', ';
2506
- }
2507
- this.sectionHeadersSelector += 'h' + (i + 2);
2508
- }
2509
-
2510
- this.$document = $(document);
2511
- this.$window = $(window);
2512
- this.$mainSections = $('.sect1');
2513
- this.$sectionHeaders = $(this.sectionHeadersSelector, '#content');
2514
- this.$sectionHeaders.sort(function(a, b) {
2515
- var off_a = $(a).offset();
2516
- var off_b = $(b).offset();
2517
- return off_a.top - off_b.top;
2518
- });
2519
-
2520
- if (this.isMobileDevice()) {
2521
- $(document.body).addClass('mobile');
2522
- }
2523
- },
2524
-
2525
-
2526
- /********* Generic utility functions *********/
2527
-
2528
- isMobileDevice: function() {
2529
- return navigator.userAgent.match(
2530
- /(IEMobile|Windows CE|NetFront|PlayStation|PLAYSTATION|like Mac OS X|MIDP|UP\.Browser|Symbian|Nintendo|Android)/
2531
- );
2532
- },
2533
-
2534
- virtualAnimate: function(options) {
2535
- var options = $.extend({
2536
- duration: 1000
2537
- }, options || {});
2538
- var animation_start = Date.now();
2539
- var animation_end = Date.now() + options.duration;
2540
- var interval = animation_end - animation_start;
2541
- this._virtualAnimate_step(animation_start, animation_end, interval, options);
2542
- },
2543
-
2544
- _virtualAnimate_step: function(animation_start, animation_end, interval, options) {
2545
- var self = this;
2546
- var now = new Date();
2547
- var progress = (now - animation_start) / interval;
2548
- if (progress > 1) {
2549
- progress = 1;
2550
- }
2551
- progress = (1 + Math.sin(-Math.PI / 2 + progress * Math.PI)) / 2;
2552
- options.step(progress);
2553
- if (now < animation_end) {
2554
- setTimeout(function() {
2555
- self._virtualAnimate_step(animation_start,
2556
- animation_end, interval, options);
2557
- }, 15);
2558
- } else {
2559
- options.step(1);
2560
- if (options.finish) {
2561
- options.finish();
2562
- }
2563
- }
2564
- },
2565
-
2566
- smoothlyScrollTo: function(top) {
2567
- if (!this.smoothScrolling) {
2568
- return this.setScrollTop(top);
2569
- }
2570
-
2571
- var self = this;
2572
- var $document = this.$document;
2573
- var current = $document.scrollTop();
2574
- this.virtualAnimate({
2575
- duration: 300,
2576
- step: function(x) {
2577
- $document.scrollTop(Math.floor(
2578
- top + (1 - x) * (current - top)
2579
- ));
2580
- },
2581
- finish: function() {
2582
- self.setScrollTop(top);
2583
- }
2584
- });
2585
- },
2586
-
2587
- smoothlyScrollToToc: function() {
2588
- this.smoothlyScrollTo($('#toc').position().top);
2589
- },
2590
-
2591
- scrollToHeader: function(header) {
2592
- this.smoothlyScrollTo($(header).offset().top - 50);
2593
- },
2594
-
2595
- setScrollTop: function(top, element) {
2596
- // Browsers don't always scroll properly so work around
2597
- // this with a few timers.
2598
- var self = this;
2599
- element = element || this.$document;
2600
- element = $(element);
2601
- element.scrollTop(top);
2602
- setTimeout(function() {
2603
- element.scrollTop(top);
2604
- }, 1);
2605
- setTimeout(function() {
2606
- element.scrollTop(top);
2607
- self.$document.trigger('mizuho:updateTopBar');
2608
- }, 20);
2609
- },
2610
-
2611
-
2612
- /********* Mizuho-specific functions *********/
2613
-
2614
- /** Returns the currently displayed section's header DOM element. */
2615
- currentSubsection: function() {
2616
- var $sectionHeaders = this.$sectionHeaders;
2617
- var scrollTop = this.$document.scrollTop();
2618
- var windowHeight = this.$window.height();
2619
- var offset;
2620
-
2621
- var low = 0;
2622
- var high = this.$sectionHeaders.length - 1;
2623
- var mid = 0;
2624
-
2625
- while (low <= high) {
2626
- mid = Math.floor((low + high) / 2);
2627
- offset = $($sectionHeaders[mid]).offset();
2628
-
2629
- if (offset.top >= scrollTop) {
2630
- high = mid - 1;
2631
- } else {
2632
- low = mid + 1;
2633
- }
2634
- }
2635
-
2636
- var $found = $($sectionHeaders[low]);
2637
- if ($found.offset().top > scrollTop + windowHeight) {
2638
- if (low > 0) {
2639
- return $sectionHeaders[low - 1];
2640
- } else {
2641
- return undefined;
2642
- }
2643
- } else {
2644
- return $sectionHeaders[low];
2645
- }
2646
- },
2647
-
2648
- /** Looks up a section's header DOM element corresponding to a hash name. */
2649
- lookupHeader: function(hash) {
2650
- var id = hash.replace(/^#!\//, '#');
2651
- if (id == '') {
2652
- return undefined;
2653
- } else {
2654
- var header = $(id);
2655
- if (header.length == 0) {
2656
- return undefined;
2657
- } else {
2658
- return header;
2659
- }
2660
- }
2661
- }
2662
- };
2663
-
2664
- for (var key in Mizuho) {
2665
- if (typeof(Mizuho[key]) == 'function') {
2666
- Mizuho[key] = $.proxy(Mizuho[key], Mizuho);
2667
- }
2668
- }
2669
- $(document).ready(Mizuho.initialize);
2670
- //$(document).ready(Mizuho.installHashbangLinks);
2671
-
2672
- Mizuho.initializeTopBar = $.proxy(function() {
2673
- var $window = this.$window;
2674
- var $document = this.$document;
2675
- var self = this;
2676
- var $topbar = $('#topbar');
2677
- var $title = $('#header h1');
2678
- var $currentSection = $('#current_section');
2679
- var isMobileDevice = this.isMobileDevice();
2680
- var timerId;
2681
-
2682
- // Create the floating table of contents used in the top bar.
2683
- var $floattoc = $('<div id="floattoc"></div>').html($('#toc').html());
2684
- $floattoc.find('#toctitle').remove();
2685
- $floattoc.find('.comments').remove();
2686
- $floattoc.css('visibility', 'hidden');
2687
- $floattoc.insertAfter($topbar);
2688
- var $floattoclinks = $floattoc.find('a');
2689
- $floattoclinks.each(function() {
2690
- // Firefox changes '#!' to '#%21' so change that back.
2691
- var $this = $(this);
2692
- var href = $this.attr('href');
2693
- if (href.match(/^#%21/)) {
2694
- $this.attr('href', href.replace(/^#%21/, '#!'));
2695
- }
2696
- });
2697
- $floattoclinks.click(function(event) {
2698
- self.internalLinkClicked(this, event);
2699
- });
2700
-
2701
- // Callback for when the user clicks on the Table of Contents
2702
- // button on the top bar.
2703
- function showFloatingToc() {
2704
- var scrollUpdateTimerId;
2705
-
2706
- function reposition() {
2707
- if (isMobileDevice) {
2708
- $floattoc.css({
2709
- top: $currentSection.offset().top +
2710
- $currentSection.innerHeight() +
2711
- 'px',
2712
- height: $window.height() * 0.7 + 'px'
2713
- });
2714
- }
2715
- }
2716
-
2717
- function highlightCurrentTocEntry() {
2718
- var currentSubsection = self.currentSubsection();
2719
- $floattoclinks.removeClass('current');
2720
- if (currentSubsection) {
2721
- var currentSubsectionTitle = $(currentSubsection).text();
2722
- var $link;
2723
-
2724
- $floattoclinks.each(function() {
2725
- if ($(this).text() == currentSubsectionTitle) {
2726
- $link = $(this);
2727
- return false;
2728
- }
2729
- });
2730
- if ($link) {
2731
- $link.addClass('current');
2732
- self.setScrollTop(
2733
- $floattoc.scrollTop() +
2734
- $link.position().top -
2735
- $floattoc.height() * 0.45,
2736
- $floattoc);
2737
- return false;
2738
- }
2739
- }
2740
- }
2741
-
2742
- function hideFloatingToc() {
2743
- $currentSection.removeClass('pressed');
2744
- $floattoc.css('visibility', 'hidden');
2745
- $floattoclinks.unbind('click', hideFloatingToc);
2746
- $document.unbind('mousedown', onMouseDown);
2747
- $document.unbind('touchdown', onMouseDown);
2748
- $document.unbind('mizuho:hideTopBar', hideFloatingToc);
2749
- $window.unbind('scroll', onScroll);
2750
- if (scrollUpdateTimerId !== undefined) {
2751
- clearTimeout(scrollUpdateTimerId);
2752
- scrollUpdateTimerId = undefined;
2753
- }
2754
- }
2755
-
2756
- function onMouseDown(event) {
2757
- if (event.target != $floattoc[0]
2758
- && $(event.target).closest('#floattoc').length == 0) {
2759
- hideFloatingToc();
2760
- }
2761
- }
2762
-
2763
- function onScroll(event) {
2764
- if (scrollUpdateTimerId === undefined) {
2765
- scrollUpdateTimerId = setTimeout(function() {
2766
- scrollUpdateTimerId = undefined;
2767
- reposition();
2768
- highlightCurrentTocEntry();
2769
- }, 100);
2770
- }
2771
- }
2772
-
2773
- // Layout and display floating TOC.
2774
- highlightCurrentTocEntry();
2775
- var origScrollTop = $document.scrollTop();
2776
- var windowWidth = $window.width();
2777
- var maxRight = windowWidth - Math.floor(windowWidth * 0.1);
2778
-
2779
- if ($currentSection.offset().left + $floattoc.outerWidth() > maxRight) {
2780
- $floattoc.css('left', maxRight - $floattoc.outerWidth());
2781
- } else {
2782
- $floattoc.css('left', $currentSection.offset().left + 'px');
2783
- }
2784
- reposition();
2785
- $floattoc.css('visibility', 'visible');
2786
- $currentSection.addClass('pressed');
2787
-
2788
- $floattoclinks.bind('click', hideFloatingToc);
2789
- $document.bind('mousedown', onMouseDown)
2790
- $document.bind('touchdown', onMouseDown);
2791
- $document.bind('mizuho:hideTopBar', hideFloatingToc);
2792
- $window.bind('scroll', onScroll);
2793
- }
2794
-
2795
- // Called whenever the user scrolls. Updates the title of the
2796
- // Table of Contents button in the top bar to the section that
2797
- // the user is currently reading.
2798
- function update() {
2799
- if ($title.offset().top + $title.height() < $document.scrollTop()) {
2800
- if (!$topbar.is(':visible')) {
2801
- $topbar.slideDown(250);
2802
- $document.trigger('mizuho:showTopBar');
2803
- }
2804
- } else {
2805
- if ($topbar.is(':visible')) {
2806
- $topbar.slideUp();
2807
- $document.trigger('mizuho:hideTopBar');
2808
- }
2809
- }
2810
-
2811
- if (isMobileDevice) {
2812
- $topbar.css({
2813
- top: $document.scrollTop() + 'px',
2814
- width: $window.width() -
2815
- parseInt($topbar.css('padding-left')) -
2816
- parseInt($topbar.css('padding-right')) +
2817
- 'px'
2818
- });
2819
- }
2820
-
2821
- var header = self.currentSubsection();
2822
- var name;
2823
- if (header) {
2824
- name = $(header).text();
2825
- } else {
2826
- name = 'Preamble';
2827
- }
2828
- $currentSection.text(name);
2829
- }
2830
-
2831
- function scheduleUpdate() {
2832
- if (timerId !== undefined) {
2833
- return;
2834
- }
2835
- timerId = setTimeout(function() {
2836
- timerId = undefined;
2837
- update();
2838
- }, 100);
2839
- }
2840
-
2841
-
2842
- if (isMobileDevice) {
2843
- // Mobile devices don't support position fixed.
2844
- $topbar.css('position', 'absolute');
2845
- $floattoc.css('position', 'absolute');
2846
- }
2847
-
2848
- $currentSection.click(showFloatingToc);
2849
- $window.scroll(scheduleUpdate);
2850
- $document.bind('mizuho:updateTopBar', update);
2851
- }, Mizuho);
2852
-
2853
- $(document).ready(Mizuho.initializeTopBar);
2854
-
2855
-
2856
- var JUVIA_URL = 'http://juvia.phusion.nl';
2857
- var JUVIA_SITE_KEY = 'q0ptarhn8o9xanwomq8zkgewbtwffyz';
2858
- var disqus_identifier;
2859
- var disqus_title;
2860
- var disqus_url;
2861
- var disqus_developer = 1;
2862
-
2863
- Mizuho.initializeCommenting = $.proxy(function() {
2864
- var self = this;
2865
- this.commentBalloons = $('.comments');
2866
- this.commentBalloons.click(function() {
2867
- self.showCommentsPopup(this);
2868
- });
2869
- this.reloadCommentCount();
2870
- }, Mizuho);
2871
-
2872
- Mizuho.showLightbox = $.proxy(function(creationCallback, closeCallback) {
2873
- var lightbox = $(
2874
- '<div id="comments_lightbox">' +
2875
- ' <div id="comments_lightbox_shadow"></div>' +
2876
- ' <div id="comments_lightbox_contents"><div class="shell"></div></div>' +
2877
- '</div>');
2878
- var shadow = $('#comments_lightbox_shadow', lightbox);
2879
- var contents = $('#comments_lightbox_contents > .shell', lightbox);
2880
-
2881
- function close() {
2882
- if (lightbox) {
2883
- lightbox.remove();
2884
- lightbox = undefined;
2885
- if (closeCallback) {
2886
- closeCallback();
2887
- }
2888
- }
2889
- }
2890
-
2891
- shadow.click(close);
2892
- lightbox.bind('lightbox:close', close);
2893
- lightbox.appendTo(document.body);
2894
- creationCallback(contents);
2895
- }, Mizuho);
2896
-
2897
- Mizuho.getCommentThreadInfo = $.proxy(function(balloon) {
2898
- var info = {};
2899
- if ($(balloon).closest('#toc').length > 0) {
2900
- info.id = 'toctitle';
2901
- info.topic = 'toctitle';
2902
- info.title = $('#header h1').text() + " - " + $('#toctitle').text();
2903
- } else {
2904
- var header = $(balloon).next('h2, h3, h4');
2905
- if (header.length > 0) {
2906
- info.id = header.attr('id');
2907
- info.topic = header.data('comment-topic');
2908
- info.title = $('#header h1').text() + " - " + header.text();
2909
- } else {
2910
- info = undefined;
2911
- }
2912
- }
2913
- return info;
2914
- }, Mizuho);
2915
-
2916
- Mizuho.callJuviaApi = function(action, options) {
2917
- function makeQueryString(options) {
2918
- var key, params = [];
2919
- for (key in options) {
2920
- params.push(
2921
- encodeURIComponent(key) +
2922
- '=' +
2923
- encodeURIComponent(options[key]));
2924
- }
2925
- return params.join('&');
2926
- }
2927
-
2928
- // Makes sure that each call generates a unique URL, otherwise
2929
- // the browser may not actually perform the request.
2930
- if (!('_juviaRequestCounter' in window)) {
2931
- window._juviaRequestCounter = 0;
2932
- }
2933
-
2934
- var url =
2935
- JUVIA_URL + '/api/' + action +
2936
- '?_c=' + window._juviaRequestCounter +
2937
- '&' + makeQueryString(options);
2938
- window._juviaRequestCounter++;
2939
-
2940
- var s = document.createElement('script');
2941
- s.async = true;
2942
- s.type = 'text/javascript';
2943
- s.className = 'juvia';
2944
- s.src = url;
2945
- (document.getElementsByTagName('head')[0] ||
2946
- document.getElementsByTagName('body')[0]).appendChild(s);
2947
- }
2948
-
2949
- Mizuho.showCommentsPopup = $.proxy(function(balloon) {
2950
- var info = this.getCommentThreadInfo(balloon);
2951
- if (!info) {
2952
- return;
2953
- }
2954
-
2955
- var self = this;
2956
- this.showLightbox(function(element) {
2957
- // We install a 'Close' button in the Juvia comment form after it has loaded.
2958
- function installCloseButton() {
2959
- if ($('#comments .juvia-form-actions').size() > 0) {
2960
- // The Juvia form is now loaded. Install the button.
2961
- var div = $('<div class="juvia-action" style="margin-left: 0.5em"></div>');
2962
- var button = $('<input type="button" value="Cancel"></div>').appendTo(div);
2963
- div.insertBefore('#comments .juvia-form-actions .juvia-error');
2964
- button.click(function() {
2965
- $(element).trigger('lightbox:close');
2966
- });
2967
- } else {
2968
- // Continue polling.
2969
- setTimeout(installCloseButton, 50);
2970
- }
2971
- }
2972
- setTimeout(installCloseButton, 50);
2973
-
2974
- // Now load the Juvia comments form.
2975
- element.html('<div id="comments">Loading comments...</div>');
2976
- self.changingHash = true;
2977
- location.hash = '#!/' + info.id;
2978
- self.callJuviaApi('show_topic.js', {
2979
- container : '#comments',
2980
- site_key : JUVIA_SITE_KEY,
2981
- topic_key : info.topic,
2982
- topic_url : location.href,
2983
- topic_title : info.topic,
2984
- include_base: !window.Juvia,
2985
- include_css : !window.Juvia
2986
- });
2987
- }, function() {
2988
- self.reloadCommentCount();
2989
- });
2990
- }, Mizuho);
2991
-
2992
- Mizuho.reloadCommentCount = $.proxy(function() {
2993
- this.callJuviaApi('list_topics.jsonp', {
2994
- site_key: JUVIA_SITE_KEY,
2995
- jsonp : 'Mizuho.topicListReceived'
2996
- });
2997
- }, Mizuho);
2998
-
2999
- Mizuho.topicListReceived = $.proxy(function(result) {
3000
- var self = this;
3001
- var i, topic, map = {};
3002
- for (i = 0; i < result.topics.length; i++) {
3003
- topic = result.topics[i];
3004
- map[topic.key] = topic;
3005
- }
3006
-
3007
- this.commentBalloons.each(function() {
3008
- var info = self.getCommentThreadInfo(this);
3009
- if (info) {
3010
- topic = map[info.topic];
3011
- if (topic) {
3012
- var balloon = $(this);
3013
- $('.count', balloon).text(topic.comment_count);
3014
- balloon.removeClass('empty');
3015
- balloon.addClass('nonempty');
3016
- balloon.attr('title', null);
3017
- }
3018
- }
3019
- });
3020
- }, Mizuho);
3021
-
3022
- $(document).ready(Mizuho.initializeCommenting);
3023
-
3024
- </script>
3025
- </body>
3026
- </html>