passenger 3.0.0 → 3.0.1

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 (538) hide show
  1. data/DEVELOPERS.TXT +9 -6
  2. data/NEWS +50 -0
  3. data/Rakefile +2 -1
  4. data/bin/passenger-install-apache2-module +4 -4
  5. data/bin/passenger-install-nginx-module +1 -1
  6. data/bin/passenger-make-enterprisey +1 -1
  7. data/build/agents.rb +26 -19
  8. data/build/apache2.rb +49 -46
  9. data/build/basics.rb +37 -13
  10. data/build/common_library.rb +134 -64
  11. data/build/config.rb +18 -11
  12. data/build/cplusplus_support.rb +4 -0
  13. data/build/cxx_tests.rb +26 -12
  14. data/build/documentation.rb +18 -11
  15. data/build/integration_tests.rb +18 -11
  16. data/build/misc.rb +18 -11
  17. data/build/nginx.rb +27 -19
  18. data/build/oxt_tests.rb +18 -11
  19. data/build/packaging.rb +45 -37
  20. data/build/rpm.rb +98 -0
  21. data/build/ruby_extension.rb +19 -13
  22. data/build/ruby_tests.rb +19 -12
  23. data/build/test_basics.rb +23 -11
  24. data/debian/README.Debian +15 -0
  25. data/debian/changelog +185 -0
  26. data/debian/control +47 -19
  27. data/debian/copyright +20 -0
  28. data/debian/libapache2-mod-passenger.install +1 -0
  29. data/debian/libapache2-mod-passenger.postinst +36 -0
  30. data/debian/libapache2-mod-passenger.prerm +15 -0
  31. data/debian/passenger-common.install +4 -0
  32. data/debian/passenger.conf +4 -0
  33. data/debian/passenger.load +1 -0
  34. data/debian/rules +37 -0
  35. data/debian/watch +3 -0
  36. data/{misc → dev}/copy_boost_headers.rb +3 -0
  37. data/{misc → dev}/find_owner_pipe_leaks.rb +0 -0
  38. data/{misc → dev}/render_error_pages.rb +0 -0
  39. data/doc/Users guide Apache.html +39 -1
  40. data/doc/Users guide Apache.txt +40 -0
  41. data/doc/Users guide Nginx.html +1 -1
  42. data/doc/Users guide Standalone.html +1 -1
  43. data/doc/cxxapi/Constants_8h_source.html +1 -1
  44. data/doc/cxxapi/DirectoryMapper_8h_source.html +6 -22
  45. data/doc/cxxapi/EventedClient_8h_source.html +572 -468
  46. data/doc/cxxapi/Exceptions_8h_source.html +142 -129
  47. data/doc/cxxapi/FileDescriptor_8h_source.html +263 -199
  48. data/doc/cxxapi/MessageChannel_8h_source.html +686 -770
  49. data/doc/cxxapi/MessageServer_8h_source.html +1 -1
  50. data/doc/cxxapi/PoolOptions_8h_source.html +79 -78
  51. data/doc/cxxapi/ResourceLocator_8h_source.html +105 -55
  52. data/doc/cxxapi/SafeLibev_8h_source.html +180 -0
  53. data/doc/cxxapi/ServerInstanceDir_8h_source.html +114 -110
  54. data/doc/cxxapi/Session_8h_source.html +1 -1
  55. data/doc/cxxapi/SpawnManager_8h_source.html +208 -208
  56. data/doc/cxxapi/StaticString_8h_source.html +258 -183
  57. data/doc/cxxapi/Utils_8h_source.html +71 -54
  58. data/doc/cxxapi/annotated.html +3 -0
  59. data/doc/cxxapi/classAgentWatcher.html +2 -2
  60. data/doc/cxxapi/classPassenger_1_1DirectoryMapper-members.html +0 -1
  61. data/doc/cxxapi/classPassenger_1_1DirectoryMapper.html +0 -27
  62. data/doc/cxxapi/classPassenger_1_1EventedClient-members.html +5 -0
  63. data/doc/cxxapi/classPassenger_1_1EventedClient.html +102 -7
  64. data/doc/cxxapi/classPassenger_1_1FileDescriptor-members.html +2 -1
  65. data/doc/cxxapi/classPassenger_1_1FileDescriptor.html +34 -8
  66. data/doc/cxxapi/classPassenger_1_1FileDescriptorPair-members.html +36 -0
  67. data/doc/cxxapi/classPassenger_1_1FileDescriptorPair.html +52 -0
  68. data/doc/cxxapi/classPassenger_1_1MessageChannel-members.html +0 -3
  69. data/doc/cxxapi/classPassenger_1_1MessageChannel.html +0 -120
  70. data/doc/cxxapi/classPassenger_1_1SafeLibev-members.html +36 -0
  71. data/doc/cxxapi/classPassenger_1_1SafeLibev.html +51 -0
  72. data/doc/cxxapi/classPassenger_1_1SpawnException-members.html +1 -0
  73. data/doc/cxxapi/classPassenger_1_1SpawnException.html +22 -0
  74. data/doc/cxxapi/classes.html +14 -14
  75. data/doc/cxxapi/files.html +2 -0
  76. data/doc/cxxapi/functions_0x63.html +6 -3
  77. data/doc/cxxapi/functions_0x64.html +9 -2
  78. data/doc/cxxapi/functions_0x67.html +6 -9
  79. data/doc/cxxapi/functions_0x69.html +3 -0
  80. data/doc/cxxapi/functions_0x77.html +8 -8
  81. data/doc/cxxapi/functions_eval.html +6 -0
  82. data/doc/cxxapi/functions_func.html +18 -17
  83. data/doc/cxxapi/functions_vars.html +8 -0
  84. data/doc/cxxapi/graph_legend.png +0 -0
  85. data/doc/cxxapi/group__Core.png +0 -0
  86. data/doc/cxxapi/group__Hooks.png +0 -0
  87. data/doc/cxxapi/hierarchy.html +3 -0
  88. data/doc/cxxapi/inherit__graph__14.map +1 -1
  89. data/doc/cxxapi/inherit__graph__14.md5 +1 -1
  90. data/doc/cxxapi/inherit__graph__14.png +0 -0
  91. data/doc/cxxapi/inherit__graph__15.map +1 -3
  92. data/doc/cxxapi/inherit__graph__15.md5 +1 -1
  93. data/doc/cxxapi/inherit__graph__15.png +0 -0
  94. data/doc/cxxapi/inherit__graph__16.map +3 -1
  95. data/doc/cxxapi/inherit__graph__16.md5 +1 -1
  96. data/doc/cxxapi/inherit__graph__16.png +0 -0
  97. data/doc/cxxapi/inherit__graph__17.map +1 -1
  98. data/doc/cxxapi/inherit__graph__17.md5 +1 -1
  99. data/doc/cxxapi/inherit__graph__17.png +0 -0
  100. data/doc/cxxapi/inherit__graph__18.map +1 -2
  101. data/doc/cxxapi/inherit__graph__18.md5 +1 -1
  102. data/doc/cxxapi/inherit__graph__18.png +0 -0
  103. data/doc/cxxapi/inherit__graph__19.map +2 -1
  104. data/doc/cxxapi/inherit__graph__19.md5 +1 -1
  105. data/doc/cxxapi/inherit__graph__19.png +0 -0
  106. data/doc/cxxapi/inherit__graph__20.map +1 -1
  107. data/doc/cxxapi/inherit__graph__20.md5 +1 -1
  108. data/doc/cxxapi/inherit__graph__20.png +0 -0
  109. data/doc/cxxapi/inherit__graph__21.map +1 -1
  110. data/doc/cxxapi/inherit__graph__21.md5 +1 -1
  111. data/doc/cxxapi/inherit__graph__21.png +0 -0
  112. data/doc/cxxapi/inherit__graph__22.map +1 -1
  113. data/doc/cxxapi/inherit__graph__22.md5 +1 -1
  114. data/doc/cxxapi/inherit__graph__22.png +0 -0
  115. data/doc/cxxapi/inherit__graph__23.map +1 -1
  116. data/doc/cxxapi/inherit__graph__23.md5 +1 -1
  117. data/doc/cxxapi/inherit__graph__23.png +0 -0
  118. data/doc/cxxapi/inherit__graph__24.map +1 -1
  119. data/doc/cxxapi/inherit__graph__24.md5 +1 -1
  120. data/doc/cxxapi/inherit__graph__24.png +0 -0
  121. data/doc/cxxapi/inherit__graph__25.map +1 -1
  122. data/doc/cxxapi/inherit__graph__25.md5 +1 -1
  123. data/doc/cxxapi/inherit__graph__25.png +0 -0
  124. data/doc/cxxapi/inherit__graph__26.map +1 -1
  125. data/doc/cxxapi/inherit__graph__26.md5 +1 -1
  126. data/doc/cxxapi/inherit__graph__26.png +0 -0
  127. data/doc/cxxapi/inherit__graph__27.map +1 -1
  128. data/doc/cxxapi/inherit__graph__27.md5 +1 -1
  129. data/doc/cxxapi/inherit__graph__27.png +0 -0
  130. data/doc/cxxapi/inherit__graph__28.map +1 -2
  131. data/doc/cxxapi/inherit__graph__28.md5 +1 -1
  132. data/doc/cxxapi/inherit__graph__28.png +0 -0
  133. data/doc/cxxapi/inherit__graph__29.map +1 -1
  134. data/doc/cxxapi/inherit__graph__29.md5 +1 -1
  135. data/doc/cxxapi/inherit__graph__29.png +0 -0
  136. data/doc/cxxapi/inherit__graph__30.map +1 -1
  137. data/doc/cxxapi/inherit__graph__30.md5 +1 -1
  138. data/doc/cxxapi/inherit__graph__30.png +0 -0
  139. data/doc/cxxapi/inherit__graph__31.map +2 -1
  140. data/doc/cxxapi/inherit__graph__31.md5 +1 -1
  141. data/doc/cxxapi/inherit__graph__31.png +0 -0
  142. data/doc/cxxapi/inherit__graph__32.map +1 -3
  143. data/doc/cxxapi/inherit__graph__32.md5 +1 -1
  144. data/doc/cxxapi/inherit__graph__32.png +0 -0
  145. data/doc/cxxapi/inherit__graph__33.map +1 -1
  146. data/doc/cxxapi/inherit__graph__33.md5 +1 -1
  147. data/doc/cxxapi/inherit__graph__33.png +0 -0
  148. data/doc/cxxapi/inherit__graph__34.map +1 -1
  149. data/doc/cxxapi/inherit__graph__34.md5 +1 -1
  150. data/doc/cxxapi/inherit__graph__34.png +0 -0
  151. data/doc/cxxapi/inherit__graph__35.map +3 -1
  152. data/doc/cxxapi/inherit__graph__35.md5 +1 -1
  153. data/doc/cxxapi/inherit__graph__35.png +0 -0
  154. data/doc/cxxapi/inherit__graph__36.map +1 -1
  155. data/doc/cxxapi/inherit__graph__36.md5 +1 -1
  156. data/doc/cxxapi/inherit__graph__36.png +0 -0
  157. data/doc/cxxapi/inherit__graph__37.map +1 -1
  158. data/doc/cxxapi/inherit__graph__37.md5 +1 -1
  159. data/doc/cxxapi/inherit__graph__37.png +0 -0
  160. data/doc/cxxapi/inherit__graph__38.map +3 -1
  161. data/doc/cxxapi/inherit__graph__38.md5 +1 -1
  162. data/doc/cxxapi/inherit__graph__38.png +0 -0
  163. data/doc/cxxapi/inherit__graph__39.map +3 -1
  164. data/doc/cxxapi/inherit__graph__39.md5 +1 -1
  165. data/doc/cxxapi/inherit__graph__39.png +0 -0
  166. data/doc/cxxapi/inherits.html +33 -24
  167. data/doc/cxxapi/namespacePassenger.html +52 -0
  168. data/doc/cxxapi/namespacemembers.html +6 -0
  169. data/doc/cxxapi/namespacemembers_func.html +6 -0
  170. data/doc/cxxapi/tree.html +8 -0
  171. data/ext/apache2/Configuration.cpp +30 -8
  172. data/ext/apache2/Configuration.hpp +15 -14
  173. data/ext/apache2/DirectoryMapper.h +0 -16
  174. data/ext/apache2/Hooks.cpp +30 -29
  175. data/ext/boost/algorithm/string/detail/case_conv.hpp +6 -6
  176. data/ext/boost/algorithm/string/detail/find_format.hpp +14 -4
  177. data/ext/boost/algorithm/string/detail/find_format_all.hpp +13 -3
  178. data/ext/boost/algorithm/string/detail/find_format_store.hpp +11 -0
  179. data/ext/boost/algorithm/string/erase.hpp +2 -2
  180. data/ext/boost/bind/placeholders.hpp +2 -2
  181. data/ext/boost/concept/detail/backward_compatibility.hpp +16 -0
  182. data/ext/boost/concept/detail/general.hpp +15 -6
  183. data/ext/boost/concept/detail/has_constraints.hpp +5 -3
  184. data/ext/boost/concept/usage.hpp +5 -4
  185. data/ext/boost/concept_check.hpp +10 -1
  186. data/ext/boost/config/abi/borland_prefix.hpp +1 -1
  187. data/ext/boost/config/auto_link.hpp +68 -21
  188. data/ext/boost/config/compiler/borland.hpp +11 -3
  189. data/ext/boost/config/compiler/clang.hpp +62 -0
  190. data/ext/boost/config/compiler/codegear.hpp +21 -7
  191. data/ext/boost/config/compiler/common_edg.hpp +4 -2
  192. data/ext/boost/config/compiler/digitalmars.hpp +1 -1
  193. data/ext/boost/config/compiler/gcc.hpp +46 -7
  194. data/ext/boost/config/compiler/gcc_xml.hpp +25 -0
  195. data/ext/boost/config/compiler/intel.hpp +23 -0
  196. data/ext/boost/config/compiler/kai.hpp +1 -1
  197. data/ext/boost/config/compiler/metrowerks.hpp +1 -1
  198. data/ext/boost/config/compiler/nvcc.hpp +86 -0
  199. data/ext/boost/config/compiler/pgi.hpp +18 -3
  200. data/ext/boost/config/compiler/sunpro_cc.hpp +19 -5
  201. data/ext/boost/config/compiler/vacpp.hpp +8 -0
  202. data/ext/boost/config/compiler/visualc.hpp +27 -11
  203. data/ext/boost/config/platform/cygwin.hpp +0 -3
  204. data/ext/boost/config/platform/symbian.hpp +94 -0
  205. data/ext/boost/config/platform/win32.hpp +8 -1
  206. data/ext/boost/config/select_compiler_config.hpp +10 -0
  207. data/ext/boost/config/select_platform_config.hpp +4 -0
  208. data/ext/boost/config/stdlib/dinkumware.hpp +11 -1
  209. data/ext/boost/config/stdlib/libcomo.hpp +1 -0
  210. data/ext/boost/config/stdlib/libstdcpp3.hpp +1 -0
  211. data/ext/boost/config/stdlib/modena.hpp +1 -0
  212. data/ext/boost/config/stdlib/msl.hpp +1 -0
  213. data/ext/boost/config/stdlib/roguewave.hpp +1 -0
  214. data/ext/boost/config/stdlib/sgi.hpp +1 -0
  215. data/ext/boost/config/stdlib/stlport.hpp +1 -0
  216. data/ext/boost/config/stdlib/vacpp.hpp +1 -0
  217. data/ext/boost/config/suffix.hpp +40 -2
  218. data/ext/boost/cstdint.hpp +36 -7
  219. data/ext/boost/date_time/gregorian/conversion.hpp +4 -2
  220. data/ext/boost/date_time/microsec_time_clock.hpp +7 -7
  221. data/ext/boost/date_time/posix_time/conversion.hpp +4 -2
  222. data/ext/boost/date_time/time_facet.hpp +43 -4
  223. data/ext/boost/detail/endian.hpp +5 -2
  224. data/ext/boost/detail/lcast_precision.hpp +2 -2
  225. data/ext/boost/detail/sp_typeinfo.hpp +1 -1
  226. data/ext/boost/detail/workaround.hpp +5 -0
  227. data/ext/boost/exception/detail/error_info_impl.hpp +3 -3
  228. data/ext/boost/exception/detail/exception_ptr.hpp +76 -135
  229. data/ext/boost/exception/detail/is_output_streamable.hpp +15 -2
  230. data/ext/boost/exception/detail/type_info.hpp +9 -5
  231. data/ext/boost/exception/diagnostic_information.hpp +5 -3
  232. data/ext/boost/exception/exception.hpp +60 -46
  233. data/ext/boost/exception/info.hpp +47 -14
  234. data/ext/boost/function/function_base.hpp +4 -4
  235. data/ext/boost/integer.hpp +4 -0
  236. data/ext/boost/integer_fwd.hpp +9 -3
  237. data/ext/boost/iterator/iterator_concepts.hpp +284 -0
  238. data/ext/boost/iterator/transform_iterator.hpp +0 -1
  239. data/ext/boost/make_shared.hpp +17 -0
  240. data/ext/boost/mpl/aux_/config/has_xxx.hpp +4 -3
  241. data/ext/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp +2 -6
  242. data/ext/boost/mpl/aux_/template_arity.hpp +4 -4
  243. data/ext/boost/mpl/eval_if.hpp +3 -3
  244. data/ext/boost/mpl/has_xxx.hpp +369 -3
  245. data/ext/boost/optional/optional.hpp +3 -1
  246. data/ext/boost/optional/optional_fwd.hpp +1 -1
  247. data/ext/boost/preprocessor/repetition/enum_trailing_params.hpp +38 -0
  248. data/ext/boost/range/algorithm/equal.hpp +188 -0
  249. data/ext/boost/range/as_literal.hpp +15 -15
  250. data/ext/boost/range/concepts.hpp +331 -0
  251. data/ext/boost/range/const_iterator.hpp +7 -4
  252. data/ext/boost/range/detail/extract_optional_type.hpp +52 -0
  253. data/ext/boost/range/detail/implementation_help.hpp +7 -7
  254. data/ext/boost/range/detail/misc_concept.hpp +33 -0
  255. data/ext/boost/range/iterator.hpp +32 -32
  256. data/ext/boost/range/iterator_range.hpp +8 -651
  257. data/ext/boost/range/iterator_range_core.hpp +542 -0
  258. data/ext/boost/range/iterator_range_io.hpp +93 -0
  259. data/ext/boost/range/mutable_iterator.hpp +7 -4
  260. data/ext/boost/range/size.hpp +1 -1
  261. data/ext/boost/range/size_type.hpp +2 -1
  262. data/ext/boost/shared_array.hpp +19 -0
  263. data/ext/boost/smart_ptr/detail/sp_convertible.hpp +2 -2
  264. data/ext/boost/smart_ptr/detail/yield_k.hpp +1 -1
  265. data/ext/boost/smart_ptr/make_shared.hpp +508 -0
  266. data/ext/boost/smart_ptr/shared_array.hpp +147 -0
  267. data/ext/boost/src/pthread/thread.cpp +16 -21
  268. data/ext/boost/src/pthread/timeconv.inl +7 -4
  269. data/ext/boost/thread/barrier.hpp +2 -1
  270. data/ext/boost/thread/detail/config.hpp +7 -1
  271. data/ext/boost/thread/detail/platform.hpp +1 -1
  272. data/ext/boost/thread/detail/thread.hpp +62 -18
  273. data/ext/boost/thread/detail/thread_group.hpp +5 -2
  274. data/ext/boost/thread/detail/tss_hooks.hpp +8 -25
  275. data/ext/boost/thread/future.hpp +45 -34
  276. data/ext/boost/thread/locks.hpp +184 -55
  277. data/ext/boost/thread/pthread/condition_variable.hpp +7 -7
  278. data/ext/boost/thread/pthread/condition_variable_fwd.hpp +4 -2
  279. data/ext/boost/thread/pthread/mutex.hpp +29 -17
  280. data/ext/boost/thread/pthread/once.hpp +5 -0
  281. data/ext/boost/thread/pthread/recursive_mutex.hpp +97 -18
  282. data/ext/boost/thread/pthread/shared_mutex.hpp +1 -1
  283. data/ext/boost/thread/pthread/thread_heap_alloc.hpp +1 -1
  284. data/ext/boost/thread/tss.hpp +2 -0
  285. data/ext/boost/throw_exception.hpp +21 -5
  286. data/ext/boost/token_functions.hpp +111 -91
  287. data/ext/boost/type_traits/add_reference.hpp +19 -1
  288. data/ext/boost/type_traits/function_traits.hpp +2 -2
  289. data/ext/boost/type_traits/is_const.hpp +24 -5
  290. data/ext/boost/type_traits/is_convertible.hpp +1 -1
  291. data/ext/boost/type_traits/is_function.hpp +3 -0
  292. data/ext/boost/type_traits/is_lvalue_reference.hpp +118 -0
  293. data/ext/boost/type_traits/is_reference.hpp +8 -81
  294. data/ext/boost/type_traits/is_rvalue_reference.hpp +29 -0
  295. data/ext/boost/type_traits/is_same.hpp +2 -2
  296. data/ext/boost/type_traits/is_volatile.hpp +26 -7
  297. data/ext/boost/type_traits/remove_const.hpp +12 -0
  298. data/ext/boost/type_traits/remove_cv.hpp +23 -1
  299. data/ext/boost/type_traits/remove_reference.hpp +21 -1
  300. data/ext/boost/type_traits/type_with_alignment.hpp +10 -10
  301. data/ext/boost/units/detail/utility.hpp +104 -0
  302. data/ext/boost/utility/compare_pointees.hpp +1 -1
  303. data/ext/common/AgentsStarter.hpp +151 -161
  304. data/ext/common/ApplicationPool/Pool.h +16 -4
  305. data/ext/common/Constants.h +1 -1
  306. data/ext/common/EventedClient.h +130 -26
  307. data/ext/common/Exceptions.h +15 -2
  308. data/ext/common/FileDescriptor.h +76 -12
  309. data/ext/common/IniFile.h +488 -0
  310. data/ext/common/LoggingAgent/LoggingServer.h +2 -2
  311. data/ext/common/LoggingAgent/RemoteSender.h +15 -6
  312. data/ext/common/MessageChannel.h +17 -101
  313. data/ext/common/PoolOptions.h +1 -0
  314. data/ext/common/ResourceLocator.h +78 -28
  315. data/ext/common/SafeLibev.h +149 -0
  316. data/ext/common/ServerInstanceDir.h +11 -7
  317. data/ext/common/Session.h +1 -1
  318. data/ext/common/SpawnManager.h +14 -14
  319. data/ext/common/StaticString.h +75 -0
  320. data/ext/common/Utils.cpp +304 -12
  321. data/ext/common/Utils.h +17 -0
  322. data/ext/common/Utils/BufferedIO.h +196 -0
  323. data/ext/common/Utils/IOUtils.cpp +159 -0
  324. data/ext/common/Utils/IOUtils.h +118 -1
  325. data/ext/common/Utils/ProcessMetricsCollector.h +184 -56
  326. data/ext/common/Utils/StrIntUtils.cpp +45 -11
  327. data/ext/common/Utils/StrIntUtils.h +8 -5
  328. data/ext/common/Utils/Timer.h +22 -0
  329. data/ext/common/Utils/utf8.h +35 -0
  330. data/ext/common/Utils/utf8/checked.h +324 -0
  331. data/ext/common/Utils/utf8/core.h +359 -0
  332. data/ext/common/Utils/utf8/unchecked.h +229 -0
  333. data/ext/common/Watchdog.cpp +52 -85
  334. data/ext/libev/config.h +122 -0
  335. data/ext/nginx/Configuration.c +7 -1
  336. data/ext/nginx/HelperAgent.cpp +16 -18
  337. data/ext/nginx/config +6 -4
  338. data/ext/oxt/system_calls.cpp +10 -0
  339. data/ext/oxt/system_calls.hpp +2 -0
  340. data/lib/phusion_passenger.rb +6 -11
  341. data/lib/phusion_passenger/dependencies.rb +2 -0
  342. data/lib/phusion_passenger/packaging.rb +5 -5
  343. data/lib/phusion_passenger/platform_info.rb +88 -0
  344. data/lib/phusion_passenger/platform_info/binary_compatibility.rb +3 -17
  345. data/lib/phusion_passenger/platform_info/compiler.rb +14 -32
  346. data/lib/phusion_passenger/platform_info/curl.rb +6 -1
  347. data/lib/phusion_passenger/platform_info/operating_system.rb +107 -0
  348. data/lib/phusion_passenger/public_api.rb +2 -2
  349. data/lib/phusion_passenger/rails3_extensions/init.rb +5 -2
  350. data/lib/phusion_passenger/standalone/command.rb +6 -2
  351. data/lib/phusion_passenger/standalone/package_runtime_command.rb +2 -2
  352. data/lib/phusion_passenger/standalone/runtime_installer.rb +17 -5
  353. data/lib/phusion_passenger/standalone/start_command.rb +12 -12
  354. data/lib/phusion_passenger/standalone/stop_command.rb +3 -3
  355. data/lib/phusion_passenger/standalone/utils.rb +6 -2
  356. data/lib/phusion_passenger/templates/standalone/config.erb +37 -5
  357. data/lib/phusion_passenger/utils.rb +4 -7
  358. data/resources/mime.types +73 -0
  359. data/{misc → resources}/union_station_gateway.crt +0 -0
  360. data/test/cxx/BufferedIOTest.cpp +364 -0
  361. data/test/cxx/EventedClientTest.cpp +150 -13
  362. data/test/cxx/IOUtilsTest.cpp +399 -1
  363. data/test/cxx/MessageChannelTest.cpp +5 -120
  364. data/test/cxx/ProcessMetricsCollectorTest.cpp +121 -0
  365. data/test/cxx/StaticStringTest.cpp +134 -0
  366. data/test/cxx/UtilsTest.cpp +16 -46
  367. data/test/stub/rails_apps/2.3/mycook/public/dispatch.cgi +2 -2
  368. data/test/stub/rails_apps/2.3/mycook/public/dispatch.fcgi +1 -1
  369. data/test/stub/rails_apps/2.3/mycook/public/dispatch.rb +1 -1
  370. data/test/stub/rails_apps/3.0/empty/Gemfile.lock +73 -0
  371. data/test/support/allocate_memory.c +14 -0
  372. data/test/support/test_helper.rb +3 -0
  373. metadata +57 -174
  374. data/bin/passenger-stress-test +0 -345
  375. data/debian/postinst +0 -24
  376. data/doc/rdoc/classes/ConditionVariable.html +0 -215
  377. data/doc/rdoc/classes/Exception.html +0 -120
  378. data/doc/rdoc/classes/GC.html +0 -113
  379. data/doc/rdoc/classes/IO.html +0 -221
  380. data/doc/rdoc/classes/PhusionPassenger.html +0 -397
  381. data/doc/rdoc/classes/PhusionPassenger/AbstractInstaller.html +0 -180
  382. data/doc/rdoc/classes/PhusionPassenger/AbstractRequestHandler.html +0 -647
  383. data/doc/rdoc/classes/PhusionPassenger/AbstractServer.html +0 -654
  384. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/InvalidPassword.html +0 -92
  385. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerAlreadyStarted.html +0 -97
  386. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerError.html +0 -96
  387. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerNotStarted.html +0 -97
  388. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/UnknownMessage.html +0 -96
  389. data/doc/rdoc/classes/PhusionPassenger/AbstractServerCollection.html +0 -619
  390. data/doc/rdoc/classes/PhusionPassenger/AdminTools.html +0 -142
  391. data/doc/rdoc/classes/PhusionPassenger/AdminTools/MemoryStats.html +0 -368
  392. data/doc/rdoc/classes/PhusionPassenger/AdminTools/MemoryStats/Process.html +0 -231
  393. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance.html +0 -588
  394. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/CorruptedDirectoryError.html +0 -92
  395. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/GenerationsAbsentError.html +0 -92
  396. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Group.html +0 -147
  397. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Process.html +0 -279
  398. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/RoleDeniedError.html +0 -92
  399. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/StaleDirectoryError.html +0 -92
  400. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Stats.html +0 -123
  401. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/UnsupportedGenerationStructureVersionError.html +0 -92
  402. data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger.html +0 -341
  403. data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger/Log.html +0 -294
  404. data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger/SharedData.html +0 -199
  405. data/doc/rdoc/classes/PhusionPassenger/AppInitError.html +0 -155
  406. data/doc/rdoc/classes/PhusionPassenger/AppProcess.html +0 -367
  407. data/doc/rdoc/classes/PhusionPassenger/ClassicRails.html +0 -95
  408. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/ApplicationSpawner.html +0 -351
  409. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/ApplicationSpawner/Error.html +0 -98
  410. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/CGIFixed.html +0 -200
  411. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/FrameworkSpawner.html +0 -410
  412. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/FrameworkSpawner/Error.html +0 -98
  413. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/RequestHandler.html +0 -156
  414. data/doc/rdoc/classes/PhusionPassenger/ClassicRailsExtensions.html +0 -115
  415. data/doc/rdoc/classes/PhusionPassenger/ClassicRailsExtensions/AnalyticsLogging.html +0 -202
  416. data/doc/rdoc/classes/PhusionPassenger/ConsoleTextTemplate.html +0 -172
  417. data/doc/rdoc/classes/PhusionPassenger/DebugLogging.html +0 -273
  418. data/doc/rdoc/classes/PhusionPassenger/FrameworkInitError.html +0 -145
  419. data/doc/rdoc/classes/PhusionPassenger/HTMLTemplate.html +0 -162
  420. data/doc/rdoc/classes/PhusionPassenger/InitializationError.html +0 -141
  421. data/doc/rdoc/classes/PhusionPassenger/InvalidPath.html +0 -92
  422. data/doc/rdoc/classes/PhusionPassenger/MessageChannel.html +0 -673
  423. data/doc/rdoc/classes/PhusionPassenger/MessageChannel/InvalidHashError.html +0 -92
  424. data/doc/rdoc/classes/PhusionPassenger/MessageClient.html +0 -415
  425. data/doc/rdoc/classes/PhusionPassenger/NativeSupportLoader.html +0 -134
  426. data/doc/rdoc/classes/PhusionPassenger/Packaging.html +0 -129
  427. data/doc/rdoc/classes/PhusionPassenger/PlatformInfo.html +0 -1809
  428. data/doc/rdoc/classes/PhusionPassenger/Plugin.html +0 -237
  429. data/doc/rdoc/classes/PhusionPassenger/Rack.html +0 -91
  430. data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner.html +0 -312
  431. data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner/Error.html +0 -98
  432. data/doc/rdoc/classes/PhusionPassenger/Rack/RequestHandler.html +0 -218
  433. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions.html +0 -114
  434. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging.html +0 -256
  435. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ACExtension.html +0 -139
  436. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ASBenchmarkableExtension.html +0 -118
  437. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ExceptionLogger.html +0 -135
  438. data/doc/rdoc/classes/PhusionPassenger/SpawnManager.html +0 -378
  439. data/doc/rdoc/classes/PhusionPassenger/Standalone.html +0 -111
  440. data/doc/rdoc/classes/PhusionPassenger/Standalone/AppFinder.html +0 -252
  441. data/doc/rdoc/classes/PhusionPassenger/Standalone/Command.html +0 -161
  442. data/doc/rdoc/classes/PhusionPassenger/Standalone/ConfigFile.html +0 -368
  443. data/doc/rdoc/classes/PhusionPassenger/Standalone/ConfigFile/DisallowedContextError.html +0 -132
  444. data/doc/rdoc/classes/PhusionPassenger/Standalone/HelpCommand.html +0 -151
  445. data/doc/rdoc/classes/PhusionPassenger/Standalone/Main.html +0 -189
  446. data/doc/rdoc/classes/PhusionPassenger/Standalone/PackageRuntimeCommand.html +0 -177
  447. data/doc/rdoc/classes/PhusionPassenger/Standalone/RuntimeInstaller.html +0 -341
  448. data/doc/rdoc/classes/PhusionPassenger/Standalone/StartCommand.html +0 -203
  449. data/doc/rdoc/classes/PhusionPassenger/Standalone/StatusCommand.html +0 -156
  450. data/doc/rdoc/classes/PhusionPassenger/Standalone/StopCommand.html +0 -168
  451. data/doc/rdoc/classes/PhusionPassenger/Standalone/Utils.html +0 -86
  452. data/doc/rdoc/classes/PhusionPassenger/Standalone/VersionCommand.html +0 -135
  453. data/doc/rdoc/classes/PhusionPassenger/UnknownError.html +0 -125
  454. data/doc/rdoc/classes/PhusionPassenger/Utils.html +0 -1550
  455. data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher.html +0 -204
  456. data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher/DirInfo.html +0 -171
  457. data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher/FileInfo.html +0 -140
  458. data/doc/rdoc/classes/PhusionPassenger/Utils/HostsFileParser.html +0 -260
  459. data/doc/rdoc/classes/PhusionPassenger/Utils/PseudoIO.html +0 -169
  460. data/doc/rdoc/classes/PhusionPassenger/Utils/RewindableInput.html +0 -265
  461. data/doc/rdoc/classes/PhusionPassenger/Utils/RewindableInput/Tempfile.html +0 -120
  462. data/doc/rdoc/classes/PhusionPassenger/Utils/UnseekableSocket.html +0 -561
  463. data/doc/rdoc/classes/PhusionPassenger/VersionNotFound.html +0 -140
  464. data/doc/rdoc/classes/PhusionPassenger/WSGI.html +0 -89
  465. data/doc/rdoc/classes/PhusionPassenger/WSGI/ApplicationSpawner.html +0 -182
  466. data/doc/rdoc/classes/Process.html +0 -115
  467. data/doc/rdoc/classes/Signal.html +0 -139
  468. data/doc/rdoc/created.rid +0 -1
  469. data/doc/rdoc/files/DEVELOPERS_TXT.html +0 -276
  470. data/doc/rdoc/files/README.html +0 -157
  471. data/doc/rdoc/files/lib/phusion_passenger/abstract_installer_rb.html +0 -130
  472. data/doc/rdoc/files/lib/phusion_passenger/abstract_request_handler_rb.html +0 -135
  473. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_collection_rb.html +0 -126
  474. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_rb.html +0 -128
  475. data/doc/rdoc/files/lib/phusion_passenger/admin_tools/memory_stats_rb.html +0 -126
  476. data/doc/rdoc/files/lib/phusion_passenger/admin_tools/server_instance_rb.html +0 -132
  477. data/doc/rdoc/files/lib/phusion_passenger/admin_tools_rb.html +0 -122
  478. data/doc/rdoc/files/lib/phusion_passenger/analytics_logger_rb.html +0 -129
  479. data/doc/rdoc/files/lib/phusion_passenger/app_process_rb.html +0 -127
  480. data/doc/rdoc/files/lib/phusion_passenger/classic_rails/application_spawner_rb.html +0 -141
  481. data/doc/rdoc/files/lib/phusion_passenger/classic_rails/cgi_fixed_rb.html +0 -126
  482. data/doc/rdoc/files/lib/phusion_passenger/classic_rails/framework_spawner_rb.html +0 -146
  483. data/doc/rdoc/files/lib/phusion_passenger/classic_rails/request_handler_rb.html +0 -125
  484. data/doc/rdoc/files/lib/phusion_passenger/classic_rails_extensions/init_rb.html +0 -132
  485. data/doc/rdoc/files/lib/phusion_passenger/console_text_template_rb.html +0 -126
  486. data/doc/rdoc/files/lib/phusion_passenger/constants_rb.html +0 -122
  487. data/doc/rdoc/files/lib/phusion_passenger/debug_logging_rb.html +0 -122
  488. data/doc/rdoc/files/lib/phusion_passenger/dependencies_rb.html +0 -147
  489. data/doc/rdoc/files/lib/phusion_passenger/exceptions_rb.html +0 -122
  490. data/doc/rdoc/files/lib/phusion_passenger/html_template_rb.html +0 -127
  491. data/doc/rdoc/files/lib/phusion_passenger/message_channel_rb.html +0 -120
  492. data/doc/rdoc/files/lib/phusion_passenger/message_client_rb.html +0 -127
  493. data/doc/rdoc/files/lib/phusion_passenger/native_support_rb.html +0 -132
  494. data/doc/rdoc/files/lib/phusion_passenger/packaging_rb.html +0 -122
  495. data/doc/rdoc/files/lib/phusion_passenger/platform_info/apache_rb.html +0 -127
  496. data/doc/rdoc/files/lib/phusion_passenger/platform_info/binary_compatibility_rb.html +0 -129
  497. data/doc/rdoc/files/lib/phusion_passenger/platform_info/compiler_rb.html +0 -126
  498. data/doc/rdoc/files/lib/phusion_passenger/platform_info/curl_rb.html +0 -126
  499. data/doc/rdoc/files/lib/phusion_passenger/platform_info/documentation_tools_rb.html +0 -126
  500. data/doc/rdoc/files/lib/phusion_passenger/platform_info/linux_rb.html +0 -126
  501. data/doc/rdoc/files/lib/phusion_passenger/platform_info/operating_system_rb.html +0 -127
  502. data/doc/rdoc/files/lib/phusion_passenger/platform_info/ruby_rb.html +0 -128
  503. data/doc/rdoc/files/lib/phusion_passenger/platform_info/zlib_rb.html +0 -126
  504. data/doc/rdoc/files/lib/phusion_passenger/platform_info_rb.html +0 -122
  505. data/doc/rdoc/files/lib/phusion_passenger/plugin_rb.html +0 -127
  506. data/doc/rdoc/files/lib/phusion_passenger/public_api_rb.html +0 -127
  507. data/doc/rdoc/files/lib/phusion_passenger/rack/application_spawner_rb.html +0 -137
  508. data/doc/rdoc/files/lib/phusion_passenger/rack/request_handler_rb.html +0 -125
  509. data/doc/rdoc/files/lib/phusion_passenger/rails3_extensions/init_rb.html +0 -127
  510. data/doc/rdoc/files/lib/phusion_passenger/simple_benchmarking_rb.html +0 -122
  511. data/doc/rdoc/files/lib/phusion_passenger/spawn_manager_rb.html +0 -160
  512. data/doc/rdoc/files/lib/phusion_passenger/standalone/app_finder_rb.html +0 -127
  513. data/doc/rdoc/files/lib/phusion_passenger/standalone/command_rb.html +0 -135
  514. data/doc/rdoc/files/lib/phusion_passenger/standalone/config_file_rb.html +0 -126
  515. data/doc/rdoc/files/lib/phusion_passenger/standalone/help_command_rb.html +0 -126
  516. data/doc/rdoc/files/lib/phusion_passenger/standalone/main_rb.html +0 -126
  517. data/doc/rdoc/files/lib/phusion_passenger/standalone/package_runtime_command_rb.html +0 -127
  518. data/doc/rdoc/files/lib/phusion_passenger/standalone/runtime_installer_rb.html +0 -133
  519. data/doc/rdoc/files/lib/phusion_passenger/standalone/start_command_rb.html +0 -136
  520. data/doc/rdoc/files/lib/phusion_passenger/standalone/status_command_rb.html +0 -126
  521. data/doc/rdoc/files/lib/phusion_passenger/standalone/stop_command_rb.html +0 -126
  522. data/doc/rdoc/files/lib/phusion_passenger/standalone/utils_rb.html +0 -126
  523. data/doc/rdoc/files/lib/phusion_passenger/standalone/version_command_rb.html +0 -127
  524. data/doc/rdoc/files/lib/phusion_passenger/utils/file_system_watcher_rb.html +0 -126
  525. data/doc/rdoc/files/lib/phusion_passenger/utils/hosts_file_parser_rb.html +0 -120
  526. data/doc/rdoc/files/lib/phusion_passenger/utils/rewindable_input_rb.html +0 -100
  527. data/doc/rdoc/files/lib/phusion_passenger/utils/tmpdir_rb.html +0 -122
  528. data/doc/rdoc/files/lib/phusion_passenger/utils/unseekable_socket_rb.html +0 -126
  529. data/doc/rdoc/files/lib/phusion_passenger/utils_rb.html +0 -179
  530. data/doc/rdoc/files/lib/phusion_passenger/wsgi/application_spawner_rb.html +0 -132
  531. data/doc/rdoc/fr_class_index.html +0 -138
  532. data/doc/rdoc/fr_file_index.html +0 -108
  533. data/doc/rdoc/fr_method_index.html +0 -430
  534. data/doc/rdoc/index.html +0 -26
  535. data/doc/rdoc/rdoc-style.css +0 -187
  536. data/ext/apache2/LICENSE-CNRI.TXT +0 -79
  537. data/ext/common/Utils/BlockingScalar.h +0 -50
  538. data/ext/common/Utils/FileHandleGuard.h +0 -81
@@ -22,18 +22,11 @@
22
22
  # THE SOFTWARE.
23
23
 
24
24
  require 'phusion_passenger/platform_info'
25
+ require 'phusion_passenger/platform_info/operating_system'
25
26
 
26
27
  module PhusionPassenger
27
28
 
28
29
  module PlatformInfo
29
- def self.cc
30
- return ENV['CC'] || "gcc"
31
- end
32
-
33
- def self.cxx
34
- return ENV['CXX'] || "g++"
35
- end
36
-
37
30
  def self.gnu_make
38
31
  gmake = find_command('gmake')
39
32
  if !gmake
@@ -78,6 +71,11 @@ module PlatformInfo
78
71
  end
79
72
  memoize :compiler_visibility_flag_generates_warnings?, true
80
73
 
74
+ def self.has_math_library?
75
+ return try_link(:c, "int main() { return 0; }\n", '-lmath')
76
+ end
77
+ memoize :has_math_library?, true
78
+
81
79
  # Compiler flags that should be used for compiling every C/C++ program,
82
80
  # for portability reasons. These flags should be specified as last
83
81
  # when invoking the compiler.
@@ -139,6 +137,10 @@ module PlatformInfo
139
137
  # http://groups.google.com/group/phusion-passenger/browse_thread/thread/aad4bd9d8d200561
140
138
  flags << '-DBOOST_SP_USE_PTHREADS'
141
139
  end
140
+
141
+ flags << '-DHAS_SFENCE' if supports_sfence_instruction?
142
+ flags << '-DHAS_LFENCE' if supports_lfence_instruction?
143
+
142
144
  return flags.compact.join(" ").strip
143
145
  end
144
146
  memoize :portability_cflags, true
@@ -148,10 +150,12 @@ module PlatformInfo
148
150
  # when invoking the linker.
149
151
  def self.portability_ldflags
150
152
  if RUBY_PLATFORM =~ /solaris/
151
- return '-lxnet -lrt -lsocket -lnsl -lpthread'
153
+ result = '-lxnet -lrt -lsocket -lnsl -lpthread'
152
154
  else
153
- return '-lpthread'
155
+ result = '-lpthread'
154
156
  end
157
+ flags << ' -lmath' if has_math_library?
158
+ return result
155
159
  end
156
160
  memoize :portability_ldflags
157
161
 
@@ -174,28 +178,6 @@ module PlatformInfo
174
178
  return nil
175
179
  end
176
180
  end
177
-
178
- private
179
- def self.try_compile(language, source, flags = nil)
180
- if language == :c
181
- compiler = cc
182
- elsif language == :cxx
183
- compiler = cxx
184
- else
185
- raise ArgumentError,"Unsupported language '#{language}'"
186
- end
187
- filename = File.join("/tmp/passenger-compile-check-#{Process.pid}.c")
188
- File.open(filename, "w") do |f|
189
- f.puts(source)
190
- end
191
- begin
192
- return system("(#{compiler} #{flags} -c '#{filename}' -o '#{filename}.o') >/dev/null 2>/dev/null")
193
- ensure
194
- File.unlink(filename) rescue nil
195
- File.unlink("#{filename}.o") rescue nil
196
- end
197
- end
198
- private_class_method :try_compile
199
181
  end
200
182
 
201
183
  end # module PhusionPassenger
@@ -31,6 +31,11 @@ module PlatformInfo
31
31
  if result.empty?
32
32
  return nil
33
33
  else
34
+ version = `curl-config --vernum`.strip
35
+ if version >= '070c01'
36
+ # Curl >= 7.12.1 supports curl_easy_reset()
37
+ result << " -DHAS_CURL_EASY_RESET"
38
+ end
34
39
  return result
35
40
  end
36
41
  end
@@ -47,7 +52,7 @@ module PlatformInfo
47
52
  memoize :curl_libs
48
53
 
49
54
  def self.curl_supports_ssl?
50
- features = `(curl-config --features) 2>/dev/null`
55
+ features = `(curl-config --feature) 2>/dev/null`
51
56
  return features =~ /SSL/
52
57
  end
53
58
  memoize :curl_supports_ssl?
@@ -46,6 +46,113 @@ module PlatformInfo
46
46
  return "so"
47
47
  end
48
48
  end
49
+
50
+ # Returns a list of all CPU architecture names that the current machine CPU
51
+ # supports. If there are multiple such architectures then the first item in
52
+ # the result denotes that OS runtime's main/preferred architecture.
53
+ #
54
+ # This function normalizes some names. For example x86 is always reported
55
+ # as "x86" regardless of whether the OS reports it as "i386" or "i686".
56
+ # x86_64 is always reported as "x86_64" even if the OS reports it as "amd64".
57
+ #
58
+ # Please note that even if the CPU supports multiple architectures, the
59
+ # operating system might not. For example most x86 CPUs nowadays also
60
+ # support x86_64, but x86_64 Linux systems require various x86 compatibility
61
+ # libraries to be installed before x86 executables can be run. This function
62
+ # does not detect whether these compatibility libraries are installed.
63
+ # The only guarantee that you have is that the OS can run executables in
64
+ # the architecture denoted by the first item in the result.
65
+ #
66
+ # For example, on x86_64 Linux this function can return ["x86_64", "x86"].
67
+ # This indicates that the CPU supports both of these architectures, and that
68
+ # the OS's main/preferred architecture is x86_64. Most executables on the
69
+ # system are thus be x86_64. It is guaranteed that the OS can run x86_64
70
+ # executables, but not x86 executables per se.
71
+ #
72
+ # Another example: on MacOS X this function can return either
73
+ # ["x86_64", "x86"] or ["x86", "x86_64"]. The former result indicates
74
+ # OS X 10.6 (Snow Leopard) and beyond because starting from that version
75
+ # everything is 64-bit by default. The latter result indicates an OS X
76
+ # version older than 10.6.
77
+ def self.cpu_architectures
78
+ if os_name == "macosx"
79
+ arch = `uname -p`.strip
80
+ if arch == "i386"
81
+ # Macs have been x86 since around 2007. I think all of them come with
82
+ # a recent enough Intel CPU that supports both x86 and x86_64, and I
83
+ # think every OS X version has both the x86 and x86_64 runtime installed.
84
+ major, minor, *rest = `sw_vers -productVersion`.strip.split(".")
85
+ major = major.to_i
86
+ minor = minor.to_i
87
+ if major >= 10 || (major == 10 && minor >= 6)
88
+ # Since Snow Leopard x86_64 is the default.
89
+ ["x86_64", "x86"]
90
+ else
91
+ # Before Snow Leopard x86 was the default.
92
+ ["x86", "x86_64"]
93
+ end
94
+ else
95
+ arch
96
+ end
97
+ else
98
+ arch = `uname -p`.strip
99
+ # On some systems 'uname -p' returns something like
100
+ # 'Intel(R) Pentium(R) M processor 1400MHz'.
101
+ if arch == "unknown" || arch =~ / /
102
+ arch = `uname -m`.strip
103
+ end
104
+ if arch =~ /^i.86$/
105
+ arch = "x86"
106
+ elsif arch == "amd64"
107
+ arch = "x86_64"
108
+ end
109
+
110
+ if arch == "x86"
111
+ # Most x86 operating systems nowadays are probably running on
112
+ # a CPU that supports both x86 and x86_64, but we're not gonna
113
+ # go through the trouble of checking that. The main architecture
114
+ # is what we usually care about.
115
+ ["x86"]
116
+ elsif arch == "x86_64"
117
+ # I don't think there's a single x86_64 CPU out there
118
+ # that doesn't support x86 as well.
119
+ ["x86_64", "x86"]
120
+ else
121
+ [arch]
122
+ end
123
+ end
124
+ end
125
+ memoize :cpu_architectures, true
126
+
127
+ # Returns whether the OS's main CPU architecture supports the
128
+ # x86/x86_64 sfence instruction.
129
+ def self.supports_sfence_instruction?
130
+ arch = cpu_architectures[0]
131
+ return arch == "x86_64" || (arch == "x86" &&
132
+ try_compile_and_run(:c, %Q{
133
+ int
134
+ main() {
135
+ __asm__ __volatile__ ("sfence" ::: "memory");
136
+ return 0;
137
+ }
138
+ }))
139
+ end
140
+ memoize :supports_sfence_instruction?, true
141
+
142
+ # Returns whether the OS's main CPU architecture supports the
143
+ # x86/x86_64 lfence instruction.
144
+ def self.supports_lfence_instruction?
145
+ arch = cpu_architectures[0]
146
+ return arch == "x86_64" || (arch == "x86" &&
147
+ try_compile_and_run(:c, %Q{
148
+ int
149
+ main() {
150
+ __asm__ __volatile__ ("lfence" ::: "memory");
151
+ return 0;
152
+ }
153
+ }))
154
+ end
155
+ memoize :supports_lfence_instruction?, true
49
156
  end
50
157
 
51
158
  end # module PhusionPassenger
@@ -41,11 +41,11 @@ class << self
41
41
  end
42
42
  end
43
43
 
44
- def install_framework_extensions!
44
+ def install_framework_extensions!(*args)
45
45
  require 'rails/version' if defined?(::Rails) && !defined?(::Rails::VERSION)
46
46
  if defined?(::Rails) && ::Rails::VERSION::MAJOR == 3
47
47
  require 'phusion_passenger/rails3_extensions/init'
48
- Rails3Extensions.init!(_spawn_options)
48
+ Rails3Extensions.init!(_spawn_options, *args)
49
49
  end
50
50
  end
51
51
 
@@ -55,7 +55,7 @@ class AnalyticsLogging < ActiveSupport::LogSubscriber
55
55
  end
56
56
 
57
57
  if defined?(ActionDispatch::ShowExceptions)
58
- Rails::Application.middleware.insert_after(
58
+ Rails.application.middleware.insert_after(
59
59
  ActionDispatch::ShowExceptions,
60
60
  ExceptionLogger, analytics_logger)
61
61
  end
@@ -78,7 +78,10 @@ class AnalyticsLogging < ActiveSupport::LogSubscriber
78
78
 
79
79
  def process_action(event)
80
80
  log = Thread.current[PASSENGER_ANALYTICS_WEB_LOG]
81
- log.message("View rendering time: #{(event.payload[:view_runtime] * 1000).to_i}") if log
81
+ if log
82
+ view_runtime = event.payload[:view_runtime]
83
+ log.message("View rendering time: #{(view_runtime * 1000).to_i}") if view_runtime
84
+ end
82
85
  end
83
86
 
84
87
  def sql(event)
@@ -171,6 +171,9 @@ private
171
171
  end
172
172
 
173
173
  def write_nginx_config_file
174
+ require 'phusion_passenger/platform_info/ruby'
175
+ ensure_directory_exists(@temp_dir)
176
+
174
177
  File.open(@config_filename, 'w') do |f|
175
178
  f.chmod(0644)
176
179
  template_filename = File.join(TEMPLATES_DIR, "standalone", "config.erb")
@@ -195,7 +198,7 @@ private
195
198
  else
196
199
  nginx_bin = "#{nginx_dir}/sbin/nginx"
197
200
  end
198
- return "#{nginx_bin} -c '#{@config_filename}'"
201
+ return "#{nginx_bin} -c '#{@config_filename}' -p '#{@temp_dir}/'"
199
202
  end
200
203
 
201
204
  # Returns the port on which to ping Nginx.
@@ -218,7 +221,8 @@ private
218
221
 
219
222
  def create_nginx_controller(extra_options = {})
220
223
  require_daemon_controller
221
- @config_filename = "/tmp/passenger-standalone.#{$$}.conf"
224
+ @temp_dir = "/tmp/passenger-standalone.#{$$}"
225
+ @config_filename = "#{@temp_dir}/config"
222
226
  opts = {
223
227
  :identifier => 'Nginx',
224
228
  :before_start => method(:write_nginx_config_file),
@@ -33,8 +33,8 @@ class PackageRuntimeCommand < Command
33
33
  def run
34
34
  destdir = File.expand_path("passenger-standalone")
35
35
  description =
36
- "Package the Phusion Passenger Standalone runtime into the specified directory. If\n" <<
37
- "DIRECTORY is not given then #{destdir} will be used."
36
+ "Package the Phusion Passenger Standalone runtime into the specified directory.\n" <<
37
+ "If DIRECTORY is not given then #{destdir} will be used."
38
38
  parse_options!("package [directory]", description) do |opts|
39
39
  opts.on("--nginx-version VERSION", String,
40
40
  wrap_desc("Nginx version to use as core (default: #{@options[:nginx_version]})")) do |value|
@@ -420,7 +420,7 @@ private
420
420
  # Then compile it.
421
421
  yield(0, 1, 2, "Preparing Phusion Passenger...")
422
422
  Dir.chdir(@support_dir) do
423
- run_rake_task!("nginx CACHING=no") do |progress, total|
423
+ run_rake_task!("nginx RELEASE=yes") do |progress, total|
424
424
  yield(progress, total, 2, "Compiling Phusion Passenger...")
425
425
  end
426
426
  end
@@ -429,7 +429,16 @@ private
429
429
  def install_nginx_from_source(source_dir)
430
430
  require 'phusion_passenger/platform_info/compiler'
431
431
  Dir.chdir(source_dir) do
432
- command = "sh ./configure '--prefix=#{@nginx_dir}' --without-pcre " <<
432
+ # RPM thinks it's being smart by scanning binaries for
433
+ # paths and refusing to create package if it detects any
434
+ # hardcoded thats that point to /usr or other important
435
+ # locations. For Phusion Passenger Standalone we do not
436
+ # care at all what the Nginx configured prefix is because
437
+ # we pass it its resource locations during runtime, so
438
+ # work around the problem by configure Nginx with prefix
439
+ # /tmp.
440
+ command = "sh ./configure --prefix=/tmp " <<
441
+ "--without-pcre " <<
433
442
  "--without-http_rewrite_module " <<
434
443
  "--without-http_fastcgi_module " <<
435
444
  "'--add-module=#{@support_dir}/ext/nginx'"
@@ -455,9 +464,12 @@ private
455
464
  exit 1
456
465
  end
457
466
 
458
- command = "#{PlatformInfo.gnu_make} install"
459
- run_command_with_throbber(command, "Copying files...") do |status_text|
460
- yield(1, 1, status_text)
467
+ yield(1, 1, 'Copying files...')
468
+ if !system("mkdir -p '#{@nginx_dir}/sbin'") ||
469
+ !system("cp -pR objs/nginx '#{@nginx_dir}/sbin/'")
470
+ STDERR.puts
471
+ STDERR.puts "*** ERROR: unable to copy Nginx binaries."
472
+ exit 1
461
473
  end
462
474
  end
463
475
  end
@@ -98,8 +98,8 @@ class StartCommand < Command
98
98
  stop_threads
99
99
  end
100
100
  ensure
101
- if @config_filename
102
- File.unlink(@config_filename) rescue nil
101
+ if @temp_dir
102
+ FileUtils.rm_rf(@temp_dir) rescue nil
103
103
  end
104
104
  @plugin.call_hook(:cleanup)
105
105
  end
@@ -157,13 +157,17 @@ private
157
157
  wrap_desc("The spawn method to use (default: #{@options[:spawn_method]})")) do |value|
158
158
  @options[:spawn_method] = value
159
159
  end
160
- opts.on("--analytics",
161
- wrap_desc("Enable analytics support")) do
162
- @options[:analytics] = true
160
+ opts.on("--union-station-gateway HOST:PORT", String,
161
+ wrap_desc("Specify Union Station Gateway host and port")) do |value|
162
+ host, port = value.split(":", 2)
163
+ port = port.to_i
164
+ port = 443 if port == 0
165
+ @options[:union_station_gateway_address] = host
166
+ @options[:union_station_gateway_port] = port.to_i
163
167
  end
164
- opts.on("--debugger",
165
- wrap_desc("Enable debugger support")) do
166
- @options[:debugger] = true
168
+ opts.on("--union-station-key KEY", String,
169
+ wrap_desc("Specify Union Station key")) do |value|
170
+ @options[:union_station_key] = value
167
171
  end
168
172
 
169
173
  opts.separator ""
@@ -320,10 +324,6 @@ private
320
324
  end
321
325
  end
322
326
  end
323
-
324
- nginx_version = @options[:nginx_version]
325
- @temp_dir = "#{home}/#{LOCAL_DIR}/standalone/#{runtime_version_string}/nginx-#{nginx_version}/temp"
326
- ensure_directory_exists(@temp_dir)
327
327
  end
328
328
 
329
329
  def ensure_directory_exists(dir)
@@ -58,9 +58,9 @@ class StopCommand < Command
58
58
  STDERR.puts "If you know that Phusion Passenger Standalone *is* running then one of these"
59
59
  STDERR.puts "might be the cause of this error:"
60
60
  STDERR.puts
61
- STDERR.puts " * The Phusion Passenger Standalone instance that you want to stop isn't running on"
62
- STDERR.puts " port #{@options[:port]}, but on another port. If this is the case then you should"
63
- STDERR.puts " specify the right port with --port."
61
+ STDERR.puts " * The Phusion Passenger Standalone instance that you want to stop isn't running"
62
+ STDERR.puts " on port #{@options[:port]}, but on another port. If this is the case then you"
63
+ STDERR.puts " should specify the right port with --port."
64
64
  STDERR.puts " If the instance is listening on a Unix socket file instead of a TCP port,"
65
65
  STDERR.puts " then please specify the PID file's filename with --pid-file."
66
66
  STDERR.puts " * The instance that you want to stop has stored its PID file in a non-standard"
@@ -33,8 +33,12 @@ private
33
33
  end
34
34
 
35
35
  def runtime_version_string
36
- require_platform_info_binary_compatibility
37
- return "#{VERSION_STRING}-#{PlatformInfo.passenger_binary_compatibility_id}"
36
+ if PhusionPassenger.natively_packaged?
37
+ return "natively-packaged"
38
+ else
39
+ require_platform_info_binary_compatibility
40
+ return "#{VERSION_STRING}-#{PlatformInfo.passenger_binary_compatibility_id}"
41
+ end
38
42
  end
39
43
  end
40
44
 
@@ -1,3 +1,29 @@
1
+ #####################################################
2
+ #
3
+ # !!!!!!! WARNING, READ THIS !!!!!!!
4
+ #
5
+ #
6
+ # The fact that Phusion Passenger uses Nginx
7
+ # internally is considered to be an implementation
8
+ # detail that the user should not bother with.
9
+ # We may arbitrarily replace the Nginx core with
10
+ # something else in the future.
11
+ #
12
+ # As such, we do not support any kind of custom
13
+ # Nginx configuration in Phusion Passenger Standalone.
14
+ # If you need additional Nginx modules or if you need
15
+ # special Nginx configuration or whatever then you
16
+ # should use Phusion Passenger for Nginx, NOT
17
+ # Phusion Passenger Standalone.
18
+ #
19
+ # You are strongly discouraged from editing this file
20
+ # and treating Phusion Passenger Standalone as an easy
21
+ # way to start Nginx. We will not provide any support
22
+ # for this.
23
+ #
24
+ #####################################################
25
+
26
+
1
27
  master_process on;
2
28
  worker_processes 1;
3
29
  daemon on;
@@ -10,9 +36,7 @@ events {
10
36
  }
11
37
 
12
38
  http {
13
- include '<%= nginx_dir %>/conf/mime.types';
14
- client_body_temp_path '<%= @temp_dir %>/client';
15
- proxy_temp_path '<%= @temp_dir %>/proxy';
39
+ include '<%= PhusionPassenger::RESOURCES_DIR %>/mime.types';
16
40
  passenger_ruby <%= PlatformInfo.ruby_command %>;
17
41
  passenger_root '<%= passenger_root %>';
18
42
  passenger_abort_on_startup_error on;
@@ -21,6 +45,12 @@ http {
21
45
  passenger_min_instances <%= @options[:min_instances] %>;
22
46
  <% if @options[:user] %>passenger_default_user <%= @options[:user] %>;<% end %>
23
47
 
48
+ <% if @options[:union_station_gateway_address] %>
49
+ union_station_gateway_address <%= @options[:union_station_gateway_address] %>;
50
+ union_station_gateway_port <%= @options[:union_station_gateway_port] %>;
51
+ union_station_gateway_cert -;
52
+ <% end %>
53
+
24
54
  default_type application/octet-stream;
25
55
  client_max_body_size 50m;
26
56
  access_log off;
@@ -55,8 +85,10 @@ http {
55
85
  rails_env <%= app[:env] %>;
56
86
  passenger_spawn_method <%= app[:spawn_method] %>;
57
87
  <% if app[:min_instances] %>passenger_min_instances <%= app[:min_instances] %>;<% end %>
58
- <% if app[:analytics] %>passenger_analytics on;<% end %>
59
- <% if app[:debugger] %>passenger_debugger on;<% end %>
88
+ <% if app[:union_station_key] %>
89
+ passenger_analytics on;
90
+ union_station_key <%= app[:union_station_key] %>;
91
+ <% end %>
60
92
  }
61
93
  <% end %>
62
94
  }