passenger 2.0.6 → 2.1.2

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 (497) hide show
  1. data/DEVELOPERS.TXT +10 -4
  2. data/LICENSE +1 -1
  3. data/NEWS +0 -0
  4. data/Rakefile +183 -117
  5. data/benchmark/dispatcher.rb +5 -9
  6. data/bin/passenger-install-apache2-module +52 -18
  7. data/bin/passenger-memory-stats +67 -13
  8. data/bin/passenger-spawn-server +8 -4
  9. data/bin/passenger-status +21 -46
  10. data/bin/passenger-stress-test +5 -5
  11. data/debian/postinst +1 -1
  12. data/doc/ApplicationPool algorithm.txt +180 -128
  13. data/doc/Architectural overview.html +1 -778
  14. data/doc/Security of user switching support.html +1 -643
  15. data/doc/Users guide Apache.html +3127 -0
  16. data/doc/Users guide Nginx.html +1458 -0
  17. data/doc/Users guide.html +1404 -467
  18. data/doc/Users guide.txt +843 -105
  19. data/doc/cxxapi/ApplicationPoolServer_8h-source.html +751 -641
  20. data/doc/cxxapi/ApplicationPool_8h-source.html +168 -171
  21. data/doc/cxxapi/Application_8h-source.html +494 -394
  22. data/doc/cxxapi/Bucket_8h-source.html +21 -15
  23. data/doc/cxxapi/CachedFileStat_8h-source.html +191 -0
  24. data/doc/cxxapi/Configuration_8h-source.html +311 -149
  25. data/doc/cxxapi/DirectoryMapper_8h-source.html +309 -0
  26. data/doc/cxxapi/DummySpawnManager_8h-source.html +3 -4
  27. data/doc/cxxapi/Exceptions_8h-source.html +182 -165
  28. data/doc/cxxapi/FileChecker_8h-source.html +130 -0
  29. data/doc/cxxapi/Hooks_8h-source.html +2 -3
  30. data/doc/cxxapi/Logging_8h-source.html +92 -89
  31. data/doc/cxxapi/MessageChannel_8h-source.html +585 -477
  32. data/doc/cxxapi/PoolOptions_8h-source.html +305 -0
  33. data/doc/cxxapi/SpawnManager_8h-source.html +515 -540
  34. data/doc/cxxapi/StandardApplicationPool_8h-source.html +779 -679
  35. data/doc/cxxapi/SystemTime_8h-source.html +104 -0
  36. data/doc/cxxapi/Utils_8h-source.html +331 -227
  37. data/doc/cxxapi/annotated.html +6 -7
  38. data/doc/cxxapi/classClient-members.html +1 -2
  39. data/doc/cxxapi/classClient.html +1 -2
  40. data/doc/cxxapi/classHooks-members.html +5 -2
  41. data/doc/cxxapi/classHooks.html +112 -2
  42. data/doc/cxxapi/classPassenger_1_1Application-members.html +2 -3
  43. data/doc/cxxapi/classPassenger_1_1Application.html +8 -9
  44. data/doc/cxxapi/classPassenger_1_1ApplicationPool-members.html +4 -4
  45. data/doc/cxxapi/classPassenger_1_1ApplicationPool.html +42 -81
  46. data/doc/cxxapi/classPassenger_1_1ApplicationPoolServer-members.html +1 -2
  47. data/doc/cxxapi/classPassenger_1_1ApplicationPoolServer.html +3 -4
  48. data/doc/cxxapi/classPassenger_1_1ApplicationPool__inherit__graph.png +0 -0
  49. data/doc/cxxapi/classPassenger_1_1Application_1_1Session-members.html +3 -2
  50. data/doc/cxxapi/classPassenger_1_1Application_1_1Session.html +74 -3
  51. data/doc/cxxapi/classPassenger_1_1BusyException-members.html +1 -2
  52. data/doc/cxxapi/classPassenger_1_1BusyException.html +2 -3
  53. data/doc/cxxapi/classPassenger_1_1ConfigurationException-members.html +1 -2
  54. data/doc/cxxapi/classPassenger_1_1ConfigurationException.html +2 -3
  55. data/doc/cxxapi/classPassenger_1_1DirectoryMapper-members.html +38 -0
  56. data/doc/cxxapi/classPassenger_1_1DirectoryMapper.html +256 -0
  57. data/doc/cxxapi/classPassenger_1_1DummySpawnManager-members.html +1 -2
  58. data/doc/cxxapi/classPassenger_1_1DummySpawnManager.html +2 -3
  59. data/doc/cxxapi/{classPassenger_1_1Thread-members.html → classPassenger_1_1FileChecker-members.html} +4 -5
  60. data/doc/cxxapi/classPassenger_1_1FileChecker.html +121 -0
  61. data/doc/cxxapi/classPassenger_1_1FileNotFoundException-members.html +1 -2
  62. data/doc/cxxapi/classPassenger_1_1FileNotFoundException.html +2 -3
  63. data/doc/cxxapi/classPassenger_1_1FileNotFoundException__inherit__graph.png +0 -0
  64. data/doc/cxxapi/classPassenger_1_1FileSystemException-members.html +2 -3
  65. data/doc/cxxapi/classPassenger_1_1FileSystemException.html +2 -3
  66. data/doc/cxxapi/classPassenger_1_1FileSystemException__inherit__graph.png +0 -0
  67. data/doc/cxxapi/classPassenger_1_1IOException-members.html +1 -2
  68. data/doc/cxxapi/classPassenger_1_1IOException.html +2 -3
  69. data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.png +0 -0
  70. data/doc/cxxapi/classPassenger_1_1MessageChannel-members.html +5 -2
  71. data/doc/cxxapi/classPassenger_1_1MessageChannel.html +155 -5
  72. data/doc/cxxapi/{classboost_1_1this__thread_1_1enable__syscall__interruption-members.html → classPassenger_1_1RuntimeException-members.html} +2 -3
  73. data/doc/cxxapi/{classboost_1_1this__thread_1_1enable__syscall__interruption.html → classPassenger_1_1RuntimeException.html} +10 -8
  74. data/doc/cxxapi/classPassenger_1_1SpawnException-members.html +1 -2
  75. data/doc/cxxapi/classPassenger_1_1SpawnException.html +2 -3
  76. data/doc/cxxapi/classPassenger_1_1SpawnManager-members.html +2 -3
  77. data/doc/cxxapi/classPassenger_1_1SpawnManager.html +15 -56
  78. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool-members.html +5 -4
  79. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool.html +20 -81
  80. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool__inherit__graph.png +0 -0
  81. data/doc/cxxapi/classPassenger_1_1SystemException-members.html +2 -3
  82. data/doc/cxxapi/classPassenger_1_1SystemException.html +9 -10
  83. data/doc/cxxapi/classPassenger_1_1SystemException__inherit__graph.png +0 -0
  84. data/doc/cxxapi/{classboost_1_1this__thread_1_1disable__syscall__interruption-members.html → classPassenger_1_1SystemTime-members.html} +5 -3
  85. data/doc/cxxapi/classPassenger_1_1SystemTime.html +86 -0
  86. data/doc/cxxapi/classPassenger_1_1TempFile-members.html +2 -3
  87. data/doc/cxxapi/classPassenger_1_1TempFile.html +17 -9
  88. data/doc/cxxapi/definitions_8h-source.html +1 -2
  89. data/doc/cxxapi/files.html +6 -3
  90. data/doc/cxxapi/functions.html +98 -35
  91. data/doc/cxxapi/functions_func.html +60 -32
  92. data/doc/cxxapi/functions_type.html +1 -2
  93. data/doc/cxxapi/functions_vars.html +27 -2
  94. data/doc/cxxapi/graph_legend.html +1 -2
  95. data/doc/cxxapi/graph_legend.png +0 -0
  96. data/doc/cxxapi/group__Configuration.html +3 -4
  97. data/doc/cxxapi/group__Configuration.png +0 -0
  98. data/doc/cxxapi/group__Core.html +3 -4
  99. data/doc/cxxapi/group__Core.png +0 -0
  100. data/doc/cxxapi/group__Exceptions.html +4 -2
  101. data/doc/cxxapi/group__Hooks.html +1 -6
  102. data/doc/cxxapi/group__Hooks.png +0 -0
  103. data/doc/cxxapi/group__Support.html +259 -36
  104. data/doc/cxxapi/hierarchy.html +6 -7
  105. data/doc/cxxapi/inherit__graph__0.map +1 -1
  106. data/doc/cxxapi/inherit__graph__0.md5 +1 -1
  107. data/doc/cxxapi/inherit__graph__0.png +0 -0
  108. data/doc/cxxapi/inherit__graph__1.map +1 -1
  109. data/doc/cxxapi/inherit__graph__1.md5 +1 -1
  110. data/doc/cxxapi/inherit__graph__1.png +0 -0
  111. data/doc/cxxapi/inherit__graph__10.map +1 -1
  112. data/doc/cxxapi/inherit__graph__10.md5 +1 -1
  113. data/doc/cxxapi/inherit__graph__10.png +0 -0
  114. data/doc/cxxapi/inherit__graph__11.map +1 -1
  115. data/doc/cxxapi/inherit__graph__11.md5 +1 -1
  116. data/doc/cxxapi/inherit__graph__11.png +0 -0
  117. data/doc/cxxapi/inherit__graph__12.map +2 -1
  118. data/doc/cxxapi/inherit__graph__12.md5 +1 -1
  119. data/doc/cxxapi/inherit__graph__12.png +0 -0
  120. data/doc/cxxapi/inherit__graph__13.map +1 -1
  121. data/doc/cxxapi/inherit__graph__13.md5 +1 -1
  122. data/doc/cxxapi/inherit__graph__13.png +0 -0
  123. data/doc/cxxapi/inherit__graph__14.map +1 -2
  124. data/doc/cxxapi/inherit__graph__14.md5 +1 -1
  125. data/doc/cxxapi/inherit__graph__14.png +0 -0
  126. data/doc/cxxapi/inherit__graph__15.map +1 -1
  127. data/doc/cxxapi/inherit__graph__15.md5 +1 -1
  128. data/doc/cxxapi/inherit__graph__15.png +0 -0
  129. data/doc/cxxapi/inherit__graph__16.map +1 -1
  130. data/doc/cxxapi/inherit__graph__16.md5 +1 -1
  131. data/doc/cxxapi/inherit__graph__16.png +0 -0
  132. data/doc/cxxapi/inherit__graph__17.png +0 -0
  133. data/doc/cxxapi/inherit__graph__18.png +0 -0
  134. data/doc/cxxapi/inherit__graph__19.png +0 -0
  135. data/doc/cxxapi/inherit__graph__2.map +1 -1
  136. data/doc/cxxapi/inherit__graph__2.md5 +1 -1
  137. data/doc/cxxapi/inherit__graph__2.png +0 -0
  138. data/doc/cxxapi/inherit__graph__20.map +1 -1
  139. data/doc/cxxapi/inherit__graph__20.md5 +1 -1
  140. data/doc/cxxapi/inherit__graph__20.png +0 -0
  141. data/doc/cxxapi/inherit__graph__21.map +1 -1
  142. data/doc/cxxapi/inherit__graph__21.md5 +1 -1
  143. data/doc/cxxapi/inherit__graph__21.png +0 -0
  144. data/doc/cxxapi/inherit__graph__3.map +1 -1
  145. data/doc/cxxapi/inherit__graph__3.md5 +1 -1
  146. data/doc/cxxapi/inherit__graph__3.png +0 -0
  147. data/doc/cxxapi/inherit__graph__4.map +1 -1
  148. data/doc/cxxapi/inherit__graph__4.md5 +1 -1
  149. data/doc/cxxapi/inherit__graph__4.png +0 -0
  150. data/doc/cxxapi/inherit__graph__5.map +2 -1
  151. data/doc/cxxapi/inherit__graph__5.md5 +1 -1
  152. data/doc/cxxapi/inherit__graph__5.png +0 -0
  153. data/doc/cxxapi/inherit__graph__6.map +1 -1
  154. data/doc/cxxapi/inherit__graph__6.md5 +1 -1
  155. data/doc/cxxapi/inherit__graph__6.png +0 -0
  156. data/doc/cxxapi/inherit__graph__7.map +1 -1
  157. data/doc/cxxapi/inherit__graph__7.md5 +1 -1
  158. data/doc/cxxapi/inherit__graph__7.png +0 -0
  159. data/doc/cxxapi/inherit__graph__8.map +1 -1
  160. data/doc/cxxapi/inherit__graph__8.md5 +1 -1
  161. data/doc/cxxapi/inherit__graph__8.png +0 -0
  162. data/doc/cxxapi/inherit__graph__9.map +1 -2
  163. data/doc/cxxapi/inherit__graph__9.md5 +1 -1
  164. data/doc/cxxapi/inherit__graph__9.png +0 -0
  165. data/doc/cxxapi/inherits.html +30 -31
  166. data/doc/cxxapi/main.html +1 -2
  167. data/doc/cxxapi/modules.html +1 -2
  168. data/doc/cxxapi/structPassenger_1_1AnythingToString-members.html +1 -2
  169. data/doc/cxxapi/structPassenger_1_1AnythingToString.html +2 -3
  170. data/doc/cxxapi/structPassenger_1_1AnythingToString_3_01vector_3_01string_01_4_01_4-members.html +1 -2
  171. data/doc/cxxapi/structPassenger_1_1AnythingToString_3_01vector_3_01string_01_4_01_4.html +2 -3
  172. data/doc/cxxapi/structPassenger_1_1PoolOptions-members.html +49 -0
  173. data/doc/cxxapi/structPassenger_1_1PoolOptions.html +404 -0
  174. data/doc/cxxapi/tree.html +18 -20
  175. data/doc/images/conservative_spawning.png +0 -0
  176. data/doc/images/conservative_spawning.svg +248 -0
  177. data/doc/images/smart-lv2.png +0 -0
  178. data/doc/images/smart-lv2.svg +320 -0
  179. data/doc/rdoc/classes/ConditionVariable.html +68 -34
  180. data/doc/rdoc/classes/Exception.html +16 -16
  181. data/doc/rdoc/classes/GC.html +9 -9
  182. data/doc/rdoc/classes/IO.html +36 -17
  183. data/doc/rdoc/classes/PhusionPassenger.html +183 -0
  184. data/doc/rdoc/classes/PhusionPassenger/AbstractRequestHandler.html +511 -0
  185. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/AbstractServer.html +285 -242
  186. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/AbstractServer/ServerAlreadyStarted.html +3 -3
  187. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/AbstractServer/ServerError.html +3 -3
  188. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/AbstractServer/ServerNotStarted.html +3 -3
  189. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/AbstractServer/UnknownMessage.html +3 -3
  190. data/doc/rdoc/classes/PhusionPassenger/AbstractServerCollection.html +598 -0
  191. data/doc/rdoc/classes/PhusionPassenger/AdminTools.html +140 -0
  192. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess.html +247 -0
  193. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess/Instance.html +138 -0
  194. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/AppInitError.html +36 -19
  195. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/Application.html +81 -96
  196. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/ConsoleTextTemplate.html +18 -18
  197. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/FrameworkInitError.html +20 -18
  198. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/HTMLTemplate.html +18 -18
  199. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/InitializationError.html +9 -9
  200. data/doc/rdoc/classes/PhusionPassenger/InvalidPath.html +92 -0
  201. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/MessageChannel.html +93 -92
  202. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/NativeSupport.html +55 -25
  203. data/doc/rdoc/classes/PhusionPassenger/Rack.html +91 -0
  204. data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner.html +185 -0
  205. data/doc/rdoc/classes/PhusionPassenger/Rack/RequestHandler.html +182 -0
  206. data/doc/rdoc/classes/PhusionPassenger/Railz.html +95 -0
  207. data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner.html +424 -0
  208. data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner/Error.html +98 -0
  209. data/doc/rdoc/classes/PhusionPassenger/Railz/CGIFixed.html +200 -0
  210. data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner.html +444 -0
  211. data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner/Error.html +98 -0
  212. data/doc/rdoc/classes/PhusionPassenger/Railz/RequestHandler.html +154 -0
  213. data/doc/rdoc/classes/PhusionPassenger/SpawnManager.html +408 -0
  214. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/UnknownError.html +13 -13
  215. data/doc/rdoc/classes/PhusionPassenger/Utils.html +687 -0
  216. data/doc/rdoc/classes/{Passenger → PhusionPassenger}/VersionNotFound.html +8 -8
  217. data/doc/rdoc/classes/PhusionPassenger/WSGI.html +89 -0
  218. data/doc/rdoc/classes/PhusionPassenger/WSGI/ApplicationSpawner.html +188 -0
  219. data/doc/rdoc/classes/PlatformInfo.html +663 -159
  220. data/doc/rdoc/classes/RakeExtensions.html +4 -4
  221. data/doc/rdoc/classes/Signal.html +134 -0
  222. data/doc/rdoc/created.rid +1 -1
  223. data/doc/rdoc/files/DEVELOPERS_TXT.html +15 -10
  224. data/doc/rdoc/files/README.html +5 -7
  225. data/doc/rdoc/files/ext/{passenger → phusion_passenger}/native_support_c.html +2 -2
  226. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/abstract_request_handler_rb.html +7 -9
  227. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_collection_rb.html +120 -0
  228. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/abstract_server_rb.html +7 -10
  229. data/doc/rdoc/files/lib/phusion_passenger/admin_tools/control_process_rb.html +99 -0
  230. data/doc/rdoc/files/lib/phusion_passenger/admin_tools_rb.html +92 -0
  231. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/application_rb.html +6 -8
  232. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/console_text_template_rb.html +5 -7
  233. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/constants_rb.html +4 -5
  234. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/dependencies_rb.html +6 -8
  235. data/doc/rdoc/files/lib/phusion_passenger/events_rb.html +116 -0
  236. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/exceptions_rb.html +5 -7
  237. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/html_template_rb.html +5 -7
  238. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/message_channel_rb.html +5 -7
  239. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/platform_info_rb.html +6 -7
  240. data/doc/rdoc/files/lib/phusion_passenger/rack/application_spawner_rb.html +123 -0
  241. data/doc/rdoc/files/lib/phusion_passenger/rack/request_handler_rb.html +117 -0
  242. data/doc/rdoc/files/lib/{passenger/utils_rb.html → phusion_passenger/railz/application_spawner_rb.html} +24 -17
  243. data/doc/rdoc/files/lib/phusion_passenger/railz/cgi_fixed_rb.html +126 -0
  244. data/doc/rdoc/files/lib/phusion_passenger/railz/framework_spawner_rb.html +139 -0
  245. data/doc/rdoc/files/lib/phusion_passenger/railz/request_handler_rb.html +118 -0
  246. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/simple_benchmarking_rb.html +5 -7
  247. data/doc/rdoc/files/lib/{passenger → phusion_passenger}/spawn_manager_rb.html +40 -24
  248. data/doc/rdoc/files/lib/phusion_passenger/utils_rb.html +169 -0
  249. data/doc/rdoc/files/lib/phusion_passenger/wsgi/application_spawner_rb.html +120 -0
  250. data/doc/rdoc/files/lib/rake/extensions_rb.html +3 -4
  251. data/doc/rdoc/fr_class_index.html +37 -19
  252. data/doc/rdoc/fr_file_index.html +25 -14
  253. data/doc/rdoc/fr_method_index.html +145 -74
  254. data/ext/apache2/Application.h +145 -44
  255. data/ext/apache2/ApplicationPool.h +27 -29
  256. data/ext/apache2/ApplicationPoolServer.h +183 -72
  257. data/ext/apache2/ApplicationPoolServerExecutable.cpp +249 -42
  258. data/ext/apache2/Bucket.cpp +61 -9
  259. data/ext/apache2/Bucket.h +15 -8
  260. data/ext/apache2/CachedFileStat.cpp +114 -0
  261. data/ext/apache2/CachedFileStat.h +169 -0
  262. data/ext/apache2/Configuration.cpp +213 -22
  263. data/ext/apache2/Configuration.h +176 -13
  264. data/ext/apache2/DirectoryMapper.h +287 -0
  265. data/ext/apache2/Exceptions.h +30 -12
  266. data/ext/apache2/FileChecker.h +108 -0
  267. data/ext/apache2/Hooks.cpp +709 -493
  268. data/ext/apache2/LICENSE-CNRI.TXT +15 -0
  269. data/ext/apache2/Logging.h +26 -22
  270. data/ext/apache2/MessageChannel.h +124 -15
  271. data/ext/apache2/PoolOptions.h +283 -0
  272. data/ext/apache2/SpawnManager.h +75 -99
  273. data/ext/apache2/StandardApplicationPool.h +296 -195
  274. data/ext/apache2/SystemTime.cpp +28 -0
  275. data/ext/apache2/SystemTime.h +82 -0
  276. data/ext/apache2/Utils.cpp +172 -18
  277. data/ext/apache2/Utils.h +124 -19
  278. data/ext/boost/cstdint.hpp +4 -2
  279. data/ext/boost/current_function.hpp +67 -0
  280. data/ext/boost/detail/sp_counted_base.hpp +4 -4
  281. data/ext/boost/thread/exceptions.hpp +2 -1
  282. data/ext/boost/thread/pthread/thread.hpp +11 -3
  283. data/ext/boost/thread/pthread/thread_data.hpp +2 -1
  284. data/ext/oxt/backtrace.cpp +172 -0
  285. data/ext/oxt/backtrace.hpp +135 -0
  286. data/ext/oxt/detail/backtrace_disabled.hpp +39 -0
  287. data/ext/oxt/detail/backtrace_enabled.hpp +155 -0
  288. data/ext/oxt/detail/spin_lock_gcc_x86.hpp +82 -0
  289. data/ext/oxt/detail/spin_lock_portable.hpp +38 -0
  290. data/ext/oxt/detail/spin_lock_pthreads.hpp +97 -0
  291. data/ext/oxt/detail/tracable_exception_disabled.hpp +46 -0
  292. data/ext/oxt/detail/tracable_exception_enabled.hpp +48 -0
  293. data/ext/oxt/macros.hpp +58 -0
  294. data/ext/oxt/spin_lock.hpp +55 -0
  295. data/ext/{apache2/System.cpp → oxt/system_calls.cpp} +87 -52
  296. data/ext/oxt/system_calls.hpp +234 -0
  297. data/ext/oxt/thread.cpp +32 -0
  298. data/ext/oxt/thread.hpp +223 -0
  299. data/ext/oxt/tracable_exception.cpp +87 -0
  300. data/ext/oxt/tracable_exception.hpp +35 -0
  301. data/{lib/passenger/constants.rb → ext/phusion_passenger/extconf.rb} +14 -9
  302. data/ext/{passenger → phusion_passenger}/native_support.c +33 -6
  303. data/lib/{passenger → phusion_passenger}/abstract_request_handler.rb +209 -93
  304. data/lib/{passenger → phusion_passenger}/abstract_server.rb +23 -8
  305. data/lib/phusion_passenger/abstract_server_collection.rb +301 -0
  306. data/lib/phusion_passenger/admin_tools.rb +25 -0
  307. data/lib/phusion_passenger/admin_tools/control_process.rb +107 -0
  308. data/lib/{passenger → phusion_passenger}/application.rb +13 -16
  309. data/lib/{passenger → phusion_passenger}/console_text_template.rb +2 -2
  310. data/{ext/passenger/extconf.rb → lib/phusion_passenger/constants.rb} +5 -5
  311. data/lib/{passenger → phusion_passenger}/dependencies.rb +38 -32
  312. data/lib/phusion_passenger/events.rb +45 -0
  313. data/lib/{passenger → phusion_passenger}/exceptions.rb +12 -5
  314. data/lib/{passenger → phusion_passenger}/html_template.rb +2 -2
  315. data/lib/{passenger → phusion_passenger}/message_channel.rb +3 -2
  316. data/lib/phusion_passenger/platform_info.rb +500 -0
  317. data/lib/{passenger → phusion_passenger}/rack/application_spawner.rb +29 -22
  318. data/lib/{passenger → phusion_passenger}/rack/request_handler.rb +14 -9
  319. data/lib/{passenger → phusion_passenger}/railz/application_spawner.rb +94 -74
  320. data/lib/{passenger → phusion_passenger}/railz/cgi_fixed.rb +2 -2
  321. data/lib/{passenger → phusion_passenger}/railz/framework_spawner.rb +86 -98
  322. data/lib/{passenger → phusion_passenger}/railz/request_handler.rb +6 -6
  323. data/lib/{passenger → phusion_passenger}/simple_benchmarking.rb +0 -0
  324. data/lib/{passenger → phusion_passenger}/spawn_manager.rb +136 -128
  325. data/lib/{passenger → phusion_passenger}/templates/apache2_config_snippets.txt.erb +0 -0
  326. data/lib/{passenger → phusion_passenger}/templates/apache_must_be_compiled_with_compatible_mpm.txt.erb +0 -0
  327. data/lib/phusion_passenger/templates/app_exited_during_initialization.html.erb +38 -0
  328. data/lib/{passenger → phusion_passenger}/templates/app_init_error.html.erb +0 -0
  329. data/lib/{passenger → phusion_passenger}/templates/database_error.html.erb +0 -0
  330. data/lib/{passenger → phusion_passenger}/templates/deployment_example.txt.erb +1 -1
  331. data/lib/{passenger → phusion_passenger}/templates/error_layout.css +0 -0
  332. data/lib/{passenger → phusion_passenger}/templates/error_layout.html.erb +0 -0
  333. data/lib/{passenger → phusion_passenger}/templates/framework_init_error.html.erb +0 -0
  334. data/lib/{passenger → phusion_passenger}/templates/general_error.html.erb +0 -0
  335. data/lib/{passenger → phusion_passenger}/templates/invalid_app_root.html.erb +1 -1
  336. data/lib/{passenger → phusion_passenger}/templates/load_error.html.erb +0 -0
  337. data/lib/{passenger → phusion_passenger}/templates/no_write_permission_to_passenger_root.txt.erb +0 -0
  338. data/lib/{passenger → phusion_passenger}/templates/possible_solutions_for_compilation_and_installation_problems.txt.erb +0 -0
  339. data/lib/{passenger → phusion_passenger}/templates/run_installer_as_root.txt.erb +0 -0
  340. data/lib/{passenger → phusion_passenger}/templates/version_not_found.html.erb +0 -0
  341. data/lib/{passenger → phusion_passenger}/templates/welcome.txt.erb +0 -0
  342. data/lib/{passenger → phusion_passenger}/utils.rb +210 -44
  343. data/lib/{passenger → phusion_passenger}/wsgi/application_spawner.rb +18 -15
  344. data/lib/{passenger → phusion_passenger}/wsgi/request_handler.py +7 -1
  345. data/man/passenger-memory-stats.8 +1 -1
  346. data/misc/render_error_pages.rb +1 -1
  347. data/test/ApplicationPoolServerTest.cpp +0 -28
  348. data/test/ApplicationPoolServer_ApplicationPoolTest.cpp +4 -0
  349. data/test/ApplicationPoolTest.cpp +307 -69
  350. data/test/CachedFileStatTest.cpp +262 -0
  351. data/test/FileCheckerTest.cpp +79 -0
  352. data/test/MessageChannelTest.cpp +3 -3
  353. data/test/PoolOptionsTest.cpp +37 -0
  354. data/test/SpawnManagerTest.cpp +4 -4
  355. data/test/StandardApplicationPoolTest.cpp +4 -0
  356. data/test/SystemTimeTest.cpp +37 -0
  357. data/test/UtilsTest.cpp +137 -0
  358. data/test/integration_tests.rb +270 -23
  359. data/test/oxt/backtrace_test.cpp +128 -0
  360. data/test/oxt/oxt_test_main.cpp +25 -0
  361. data/test/oxt/syscall_interruption_test.cpp +50 -0
  362. data/test/ruby/abstract_request_handler_spec.rb +83 -0
  363. data/test/ruby/abstract_server_collection_spec.rb +246 -0
  364. data/test/ruby/application_spec.rb +3 -3
  365. data/test/ruby/message_channel_spec.rb +2 -2
  366. data/test/ruby/rack/application_spawner_spec.rb +3 -5
  367. data/test/ruby/rails/application_spawner_spec.rb +54 -15
  368. data/test/ruby/rails/framework_spawner_spec.rb +6 -8
  369. data/test/ruby/rails/minimal_spawner_spec.rb +29 -0
  370. data/test/ruby/rails/spawner_error_handling_spec.rb +1 -1
  371. data/test/ruby/rails/spawner_privilege_lowering_spec.rb +3 -3
  372. data/test/ruby/spawn_manager_spec.rb +23 -12
  373. data/test/ruby/utils_spec.rb +36 -2
  374. data/test/ruby/wsgi/application_spawner_spec.rb +47 -0
  375. data/test/stub/apache2/httpd.conf.erb +3 -5
  376. data/test/stub/message_channel.rb +2 -2
  377. data/test/stub/message_channel_2.rb +2 -2
  378. data/test/stub/message_channel_3.rb +3 -3
  379. data/test/stub/minimal-railsapp/README +0 -0
  380. data/test/stub/minimal-railsapp/config/application.rb +0 -0
  381. data/test/stub/minimal-railsapp/config/environment.rb +0 -0
  382. data/test/stub/minimal-railsapp/vendor/rails/actionmailer/lib/action_mailer.rb +0 -0
  383. data/test/stub/minimal-railsapp/vendor/rails/actionpack/lib/action_controller.rb +0 -0
  384. data/test/stub/minimal-railsapp/vendor/rails/actionpack/lib/action_pack.rb +0 -0
  385. data/test/stub/minimal-railsapp/vendor/rails/actionpack/lib/action_view.rb +0 -0
  386. data/test/stub/minimal-railsapp/vendor/rails/activerecord/lib/active_record.rb +0 -0
  387. data/test/stub/minimal-railsapp/vendor/rails/activeresource/lib/active_resource.rb +0 -0
  388. data/test/stub/minimal-railsapp/vendor/rails/activesupport/lib/active_support.rb +0 -0
  389. data/test/stub/minimal-railsapp/vendor/rails/activesupport/lib/active_support/whiny_nil.rb +0 -0
  390. data/test/stub/minimal-railsapp/vendor/rails/railties/lib/dispatcher.rb +0 -0
  391. data/test/stub/minimal-railsapp/vendor/rails/railties/lib/initializer.rb +0 -0
  392. data/test/stub/minimal-railsapp/vendor/rails/railties/lib/ruby_version_check.rb +0 -0
  393. data/test/stub/rails_apps/foobar/app/controllers/foo_controller.rb +8 -0
  394. data/test/stub/rails_apps/foobar/config/environments/development.rb +1 -2
  395. data/test/stub/rails_apps/mycook/app/controllers/welcome_controller.rb +21 -1
  396. data/test/stub/rails_apps/mycook/sites/some.site/public/uploads.html +26 -0
  397. data/test/stub/rails_apps/mycook/sites/some.site/public/welcome/cached.html +26 -0
  398. data/test/stub/railsapp/app/controllers/application.rb +0 -0
  399. data/test/stub/railsapp/app/controllers/bar_controller_1.rb +0 -0
  400. data/test/stub/railsapp/app/controllers/bar_controller_2.rb +1 -1
  401. data/test/stub/railsapp/app/controllers/foo_controller.rb +4 -0
  402. data/test/stub/railsapp/app/helpers/application_helper.rb +0 -0
  403. data/test/stub/railsapp/config/boot.rb +0 -0
  404. data/test/stub/railsapp/config/database.yml +0 -0
  405. data/test/stub/railsapp/config/environment.rb +0 -0
  406. data/test/stub/railsapp/config/environments/development.rb +0 -0
  407. data/test/stub/railsapp/config/environments/production.rb +0 -0
  408. data/test/stub/railsapp/config/initializers/inflections.rb +0 -0
  409. data/test/stub/railsapp/config/initializers/mime_types.rb +0 -0
  410. data/test/stub/railsapp/config/routes.rb +0 -0
  411. data/test/stub/railsapp/public/useless.txt +0 -0
  412. data/test/stub/spawn_server.rb +3 -4
  413. data/test/stub/wsgi/passenger_wsgi.pyc +0 -0
  414. data/test/support/apache2_controller.rb +57 -7
  415. data/test/support/tut.h +15 -0
  416. data/vendor/README +12 -0
  417. data/vendor/README_FOR_PACKAGERS +1 -0
  418. data/vendor/rack-0.9.1/AUTHORS +8 -0
  419. data/vendor/rack-0.9.1/COPYING +18 -0
  420. data/vendor/rack-0.9.1/ChangeLog +1423 -0
  421. data/vendor/rack-0.9.1/KNOWN-ISSUES +18 -0
  422. data/vendor/rack-0.9.1/README +306 -0
  423. data/vendor/rack-0.9.1/Rakefile +188 -0
  424. data/vendor/rack-0.9.1/SPEC +129 -0
  425. data/vendor/rack-0.9.1/lib/rack.rb +86 -0
  426. data/vendor/rack-0.9.1/lib/rack/adapter/camping.rb +22 -0
  427. data/vendor/rack-0.9.1/lib/rack/auth/abstract/handler.rb +28 -0
  428. data/vendor/rack-0.9.1/lib/rack/auth/abstract/request.rb +37 -0
  429. data/vendor/rack-0.9.1/lib/rack/auth/basic.rb +58 -0
  430. data/vendor/rack-0.9.1/lib/rack/auth/digest/md5.rb +124 -0
  431. data/vendor/rack-0.9.1/lib/rack/auth/digest/nonce.rb +51 -0
  432. data/vendor/rack-0.9.1/lib/rack/auth/digest/params.rb +55 -0
  433. data/vendor/rack-0.9.1/lib/rack/auth/digest/request.rb +40 -0
  434. data/vendor/rack-0.9.1/lib/rack/auth/openid.rb +438 -0
  435. data/vendor/rack-0.9.1/lib/rack/builder.rb +67 -0
  436. data/vendor/rack-0.9.1/lib/rack/cascade.rb +36 -0
  437. data/vendor/rack-0.9.1/lib/rack/commonlogger.rb +61 -0
  438. data/vendor/rack-0.9.1/lib/rack/conditionalget.rb +43 -0
  439. data/vendor/rack-0.9.1/lib/rack/content_length.rb +25 -0
  440. data/vendor/rack-0.9.1/lib/rack/deflater.rb +87 -0
  441. data/vendor/rack-0.9.1/lib/rack/directory.rb +150 -0
  442. data/vendor/rack-0.9.1/lib/rack/file.rb +85 -0
  443. data/vendor/rack-0.9.1/lib/rack/handler.rb +48 -0
  444. data/vendor/rack-0.9.1/lib/rack/handler/cgi.rb +57 -0
  445. data/vendor/rack-0.9.1/lib/rack/handler/evented_mongrel.rb +8 -0
  446. data/vendor/rack-0.9.1/lib/rack/handler/fastcgi.rb +86 -0
  447. data/vendor/rack-0.9.1/lib/rack/handler/lsws.rb +52 -0
  448. data/vendor/rack-0.9.1/lib/rack/handler/mongrel.rb +82 -0
  449. data/vendor/rack-0.9.1/lib/rack/handler/scgi.rb +57 -0
  450. data/vendor/rack-0.9.1/lib/rack/handler/swiftiplied_mongrel.rb +8 -0
  451. data/vendor/rack-0.9.1/lib/rack/handler/thin.rb +15 -0
  452. data/vendor/rack-0.9.1/lib/rack/handler/webrick.rb +61 -0
  453. data/vendor/rack-0.9.1/lib/rack/head.rb +19 -0
  454. data/vendor/rack-0.9.1/lib/rack/lint.rb +465 -0
  455. data/vendor/rack-0.9.1/lib/rack/lobster.rb +65 -0
  456. data/vendor/rack-0.9.1/lib/rack/methodoverride.rb +27 -0
  457. data/vendor/rack-0.9.1/lib/rack/mime.rb +204 -0
  458. data/vendor/rack-0.9.1/lib/rack/mock.rb +160 -0
  459. data/vendor/rack-0.9.1/lib/rack/recursive.rb +57 -0
  460. data/vendor/rack-0.9.1/lib/rack/reloader.rb +64 -0
  461. data/vendor/rack-0.9.1/lib/rack/request.rb +218 -0
  462. data/vendor/rack-0.9.1/lib/rack/response.rb +171 -0
  463. data/vendor/rack-0.9.1/lib/rack/session/abstract/id.rb +153 -0
  464. data/vendor/rack-0.9.1/lib/rack/session/cookie.rb +89 -0
  465. data/vendor/rack-0.9.1/lib/rack/session/memcache.rb +97 -0
  466. data/vendor/rack-0.9.1/lib/rack/session/pool.rb +73 -0
  467. data/vendor/rack-0.9.1/lib/rack/showexceptions.rb +348 -0
  468. data/vendor/rack-0.9.1/lib/rack/showstatus.rb +106 -0
  469. data/vendor/rack-0.9.1/lib/rack/static.rb +38 -0
  470. data/vendor/rack-0.9.1/lib/rack/urlmap.rb +48 -0
  471. data/vendor/rack-0.9.1/lib/rack/utils.rb +347 -0
  472. metadata +1197 -1055
  473. data/doc/cxxapi/System_8h-source.html +0 -251
  474. data/doc/cxxapi/classDirectoryMapper-members.html +0 -38
  475. data/doc/cxxapi/classDirectoryMapper.html +0 -203
  476. data/doc/cxxapi/classPassenger_1_1Thread.html +0 -100
  477. data/doc/cxxapi/classboost_1_1this__thread_1_1disable__syscall__interruption.html +0 -46
  478. data/doc/cxxapi/classboost_1_1this__thread_1_1restore__syscall__interruption-members.html +0 -33
  479. data/doc/cxxapi/classboost_1_1this__thread_1_1restore__syscall__interruption.html +0 -44
  480. data/doc/cxxapi/namespacePassenger.html +0 -208
  481. data/doc/cxxapi/namespacePassenger_1_1InterruptableCalls.html +0 -43
  482. data/doc/cxxapi/namespacemembers.html +0 -70
  483. data/doc/cxxapi/namespacemembers_func.html +0 -66
  484. data/doc/cxxapi/namespacemembers_type.html +0 -46
  485. data/doc/cxxapi/namespaces.html +0 -35
  486. data/doc/rdoc/classes/Passenger.html +0 -136
  487. data/doc/rdoc/classes/Passenger/AbstractRequestHandler.html +0 -402
  488. data/doc/rdoc/classes/Passenger/SpawnManager.html +0 -379
  489. data/doc/rdoc/classes/Passenger/Utils.html +0 -578
  490. data/ext/apache2/System.h +0 -228
  491. data/lib/passenger/platform_info.rb +0 -302
  492. data/lib/passenger/templates/app_exited_during_initialization.html.erb +0 -19
  493. data/test/stub/apache2/httpd.conf +0 -75
  494. data/test/stub/rails_apps/foobar/config/environments/test.rb +0 -22
  495. data/test/stub/rails_apps/mycook/config/environments/test.rb +0 -22
  496. data/test/stub/railsapp/config/environments/test.rb +0 -22
  497. data/test/stub/railsapp2/config/environments/test.rb +0 -22
@@ -10,7 +10,6 @@
10
10
  <ul>
11
11
  <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
12
12
  <li><a href="modules.html"><span>Modules</span></a></li>
13
- <li><a href="namespaces.html"><span>Namespaces</span></a></li>
14
13
  <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
15
14
  <li><a href="files.html"><span>Files</span></a></li>
16
15
  </ul>
@@ -24,9 +23,9 @@
24
23
  </div>
25
24
  </div>
26
25
  <div class="contents">
27
- <h1>boost::this_thread::enable_syscall_interruption Member List</h1>This is the complete list of members for <a class="el" href="classboost_1_1this__thread_1_1enable__syscall__interruption.html">boost::this_thread::enable_syscall_interruption</a>, including all inherited members.<p><table>
26
+ <h1>Passenger::RuntimeException Member List</h1>This is the complete list of members for <a class="el" href="classPassenger_1_1RuntimeException.html">Passenger::RuntimeException</a>, including all inherited members.<p><table>
28
27
  </table></div>
29
- <hr size="1"><address style="text-align: right;"><small>Generated on Mon Dec 15 15:27:25 2008 for Passenger by&nbsp;
28
+ <hr size="1"><address style="text-align: right;"><small>Generated on Fri Mar 13 19:24:35 2009 for Passenger by&nbsp;
30
29
  <a href="http://www.doxygen.org/index.html">
31
30
  <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
32
31
  </body>
@@ -1,6 +1,6 @@
1
1
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
2
  <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3
- <title>Passenger: boost::this_thread::enable_syscall_interruption Class Reference</title>
3
+ <title>Passenger: Passenger::RuntimeException Class Reference</title>
4
4
  <link href="doxygen.css" rel="stylesheet" type="text/css">
5
5
  <link href="tabs.css" rel="stylesheet" type="text/css">
6
6
  </head><body>
@@ -10,7 +10,6 @@
10
10
  <ul>
11
11
  <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
12
12
  <li><a href="modules.html"><span>Modules</span></a></li>
13
- <li><a href="namespaces.html"><span>Namespaces</span></a></li>
14
13
  <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
15
14
  <li><a href="files.html"><span>Files</span></a></li>
16
15
  </ul>
@@ -22,22 +21,25 @@
22
21
  <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
23
22
  </ul>
24
23
  </div>
25
- <div class="navpath"><b>boost</b>::<b>this_thread</b>::<a class="el" href="classboost_1_1this__thread_1_1enable__syscall__interruption.html">enable_syscall_interruption</a>
24
+ <div class="navpath"><b>Passenger</b>::<a class="el" href="classPassenger_1_1RuntimeException.html">RuntimeException</a>
26
25
  </div>
27
26
  </div>
28
27
  <div class="contents">
29
- <h1>boost::this_thread::enable_syscall_interruption Class Reference</h1><!-- doxytag: class="boost::this_thread::enable_syscall_interruption" --><code>#include &lt;<a class="el" href="System_8h-source.html">System.h</a>&gt;</code>
28
+ <h1>Passenger::RuntimeException Class Reference<br>
29
+ <small>
30
+ [<a class="el" href="group__Exceptions.html">Exceptions</a>]</small>
31
+ </h1><!-- doxytag: class="Passenger::RuntimeException" --><code>#include &lt;<a class="el" href="Exceptions_8h-source.html">Exceptions.h</a>&gt;</code>
30
32
  <p>
31
33
 
32
34
  <p>
33
- <a href="classboost_1_1this__thread_1_1enable__syscall__interruption-members.html">List of all members.</a><hr><a name="_details"></a><h2>Detailed Description</h2>
34
- Create this struct on the stack to temporarily enable system call interruption, until the object goes out of scope. <table border="0" cellpadding="0" cellspacing="0">
35
+ <a href="classPassenger_1_1RuntimeException-members.html">List of all members.</a><hr><a name="_details"></a><h2>Detailed Description</h2>
36
+ A generic runtime exception. <table border="0" cellpadding="0" cellspacing="0">
35
37
  <tr><td></td></tr>
36
38
  </table>
37
39
  <hr>The documentation for this class was generated from the following file:<ul>
38
- <li><a class="el" href="System_8h-source.html">System.h</a></ul>
40
+ <li><a class="el" href="Exceptions_8h-source.html">Exceptions.h</a></ul>
39
41
  </div>
40
- <hr size="1"><address style="text-align: right;"><small>Generated on Mon Dec 15 15:27:25 2008 for Passenger by&nbsp;
42
+ <hr size="1"><address style="text-align: right;"><small>Generated on Fri Mar 13 19:24:35 2009 for Passenger by&nbsp;
41
43
  <a href="http://www.doxygen.org/index.html">
42
44
  <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
43
45
  </body>
@@ -10,7 +10,6 @@
10
10
  <ul>
11
11
  <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
12
12
  <li><a href="modules.html"><span>Modules</span></a></li>
13
- <li><a href="namespaces.html"><span>Namespaces</span></a></li>
14
13
  <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
15
14
  <li><a href="files.html"><span>Files</span></a></li>
16
15
  </ul>
@@ -28,7 +27,7 @@
28
27
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1SpawnException.html#6f675a37edd7070875d0744e7dd010a1">getErrorPage</a>() const </td><td><a class="el" href="classPassenger_1_1SpawnException.html">Passenger::SpawnException</a></td><td><code> [inline]</code></td></tr>
29
28
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1SpawnException.html#e65dc272e183fd9e5637a4091cc6bbf4">hasErrorPage</a>() const </td><td><a class="el" href="classPassenger_1_1SpawnException.html">Passenger::SpawnException</a></td><td><code> [inline]</code></td></tr>
30
29
  </table></div>
31
- <hr size="1"><address style="text-align: right;"><small>Generated on Mon Dec 15 15:27:25 2008 for Passenger by&nbsp;
30
+ <hr size="1"><address style="text-align: right;"><small>Generated on Fri Mar 13 19:24:35 2009 for Passenger by&nbsp;
32
31
  <a href="http://www.doxygen.org/index.html">
33
32
  <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
34
33
  </body>
@@ -10,7 +10,6 @@
10
10
  <ul>
11
11
  <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
12
12
  <li><a href="modules.html"><span>Modules</span></a></li>
13
- <li><a href="namespaces.html"><span>Namespaces</span></a></li>
14
13
  <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
15
14
  <li><a href="files.html"><span>Files</span></a></li>
16
15
  </ul>
@@ -22,7 +21,7 @@
22
21
  <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
23
22
  </ul>
24
23
  </div>
25
- <div class="navpath"><a class="el" href="namespacePassenger.html">Passenger</a>::<a class="el" href="classPassenger_1_1SpawnException.html">SpawnException</a>
24
+ <div class="navpath"><b>Passenger</b>::<a class="el" href="classPassenger_1_1SpawnException.html">SpawnException</a>
26
25
  </div>
27
26
  </div>
28
27
  <div class="contents">
@@ -70,7 +69,7 @@ Return the error page content.
70
69
  <hr>The documentation for this class was generated from the following file:<ul>
71
70
  <li><a class="el" href="Exceptions_8h-source.html">Exceptions.h</a></ul>
72
71
  </div>
73
- <hr size="1"><address style="text-align: right;"><small>Generated on Mon Dec 15 15:27:25 2008 for Passenger by&nbsp;
72
+ <hr size="1"><address style="text-align: right;"><small>Generated on Fri Mar 13 19:24:35 2009 for Passenger by&nbsp;
74
73
  <a href="http://www.doxygen.org/index.html">
75
74
  <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
76
75
  </body>
@@ -10,7 +10,6 @@
10
10
  <ul>
11
11
  <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
12
12
  <li><a href="modules.html"><span>Modules</span></a></li>
13
- <li><a href="namespaces.html"><span>Namespaces</span></a></li>
14
13
  <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
15
14
  <li><a href="files.html"><span>Files</span></a></li>
16
15
  </ul>
@@ -27,10 +26,10 @@
27
26
  <h1>Passenger::SpawnManager Member List</h1>This is the complete list of members for <a class="el" href="classPassenger_1_1SpawnManager.html">Passenger::SpawnManager</a>, including all inherited members.<p><table>
28
27
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1SpawnManager.html#1f77e2e7e6cb464028c13a29f983ad8e">getServerPid</a>() const </td><td><a class="el" href="classPassenger_1_1SpawnManager.html">Passenger::SpawnManager</a></td><td><code> [inline]</code></td></tr>
29
28
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1SpawnManager.html#2e85c43042b9556ca2fd74b8d28956ce">reload</a>(const string &amp;appRoot)</td><td><a class="el" href="classPassenger_1_1SpawnManager.html">Passenger::SpawnManager</a></td><td><code> [inline]</code></td></tr>
30
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1SpawnManager.html#1bafa97204ea49a88b66272be3377d53">spawn</a>(const string &amp;appRoot, bool lowerPrivilege=true, const string &amp;lowestUser=&quot;nobody&quot;, const string &amp;environment=&quot;production&quot;, const string &amp;spawnMethod=&quot;smart&quot;, const string &amp;appType=&quot;rails&quot;)</td><td><a class="el" href="classPassenger_1_1SpawnManager.html">Passenger::SpawnManager</a></td><td><code> [inline]</code></td></tr>
29
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1SpawnManager.html#af035d564cc4e6683508939c9d6dbb64">spawn</a>(const PoolOptions &amp;PoolOptions)</td><td><a class="el" href="classPassenger_1_1SpawnManager.html">Passenger::SpawnManager</a></td><td><code> [inline]</code></td></tr>
31
30
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1SpawnManager.html#fdefbbbad39833912ae7f9f106083099">SpawnManager</a>(const string &amp;spawnServerCommand, const string &amp;logFile=&quot;&quot;, const string &amp;rubyCommand=&quot;ruby&quot;, const string &amp;user=&quot;&quot;)</td><td><a class="el" href="classPassenger_1_1SpawnManager.html">Passenger::SpawnManager</a></td><td><code> [inline]</code></td></tr>
32
31
  </table></div>
33
- <hr size="1"><address style="text-align: right;"><small>Generated on Mon Dec 15 15:27:25 2008 for Passenger by&nbsp;
32
+ <hr size="1"><address style="text-align: right;"><small>Generated on Fri Mar 13 19:24:35 2009 for Passenger by&nbsp;
34
33
  <a href="http://www.doxygen.org/index.html">
35
34
  <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
36
35
  </body>
@@ -10,7 +10,6 @@
10
10
  <ul>
11
11
  <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
12
12
  <li><a href="modules.html"><span>Modules</span></a></li>
13
- <li><a href="namespaces.html"><span>Namespaces</span></a></li>
14
13
  <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
15
14
  <li><a href="files.html"><span>Files</span></a></li>
16
15
  </ul>
@@ -22,7 +21,7 @@
22
21
  <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
23
22
  </ul>
24
23
  </div>
25
- <div class="navpath"><a class="el" href="namespacePassenger.html">Passenger</a>::<a class="el" href="classPassenger_1_1SpawnManager.html">SpawnManager</a>
24
+ <div class="navpath"><b>Passenger</b>::<a class="el" href="classPassenger_1_1SpawnManager.html">SpawnManager</a>
26
25
  </div>
27
26
  </div>
28
27
  <div class="contents">
@@ -36,12 +35,12 @@
36
35
  <a href="classPassenger_1_1SpawnManager-members.html">List of all members.</a><hr><a name="_details"></a><h2>Detailed Description</h2>
37
36
  Spawning of Ruby on Rails/Rack application instances.
38
37
  <p>
39
- This class is responsible for spawning new instances of Ruby on Rails or Rack applications. Use the <a class="el" href="classPassenger_1_1SpawnManager.html#1bafa97204ea49a88b66272be3377d53" title="Spawn a new instance of a Ruby on Rails or Rack application.">spawn()</a> method to do so.<p>
38
+ This class is responsible for spawning new instances of Ruby on Rails or Rack applications. Use the <a class="el" href="classPassenger_1_1SpawnManager.html#af035d564cc4e6683508939c9d6dbb64" title="Spawn a new instance of an application.">spawn()</a> method to do so.<p>
40
39
  <dl class="note" compact><dt><b>Note:</b></dt><dd>This class is fully thread-safe.</dd></dl>
41
40
  <h2>Implementation details</h2>
42
41
  <p>
43
42
  Internally, this class makes use of a spawn server, which is written in Ruby. This server is automatically started when a <a class="el" href="classPassenger_1_1SpawnManager.html" title="Spawning of Ruby on Rails/Rack application instances.">SpawnManager</a> instance is created, and automatically shutdown when that instance is destroyed. The existance of the spawn server is almost totally transparent to users of this class. Spawn requests are sent to the server, and details about the spawned process is returned.<p>
44
- If the spawn server dies during the middle of an operation, it will be restarted. See <a class="el" href="classPassenger_1_1SpawnManager.html#1bafa97204ea49a88b66272be3377d53" title="Spawn a new instance of a Ruby on Rails or Rack application.">spawn()</a> for full details.<p>
43
+ If the spawn server dies during the middle of an operation, it will be restarted. See <a class="el" href="classPassenger_1_1SpawnManager.html#af035d564cc4e6683508939c9d6dbb64" title="Spawn a new instance of an application.">spawn()</a> for full details.<p>
45
44
  The communication channel with the server is anonymous, i.e. no other processes can access the communication channel, so communication is guaranteed to be safe (unless, of course, if the spawn server itself is a trojan).<p>
46
45
  The server will try to keep the spawning time as small as possible, by keeping corresponding Ruby on Rails frameworks and application code in memory. So the second time an instance of the same application is spawned, the spawn time is significantly lower than the first time. Nevertheless, spawning is a relatively expensive operation (compared to the processing of a typical HTTP request/response), and so should be avoided whenever possible.<p>
47
46
  See the documentation of the spawn server for full implementation details. <table border="0" cellpadding="0" cellspacing="0">
@@ -50,9 +49,9 @@ See the documentation of the spawn server for full implementation details. <tabl
50
49
  <tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1SpawnManager.html#fdefbbbad39833912ae7f9f106083099">SpawnManager</a> (const string &amp;spawnServerCommand, const string &amp;logFile=&quot;&quot;, const string &amp;rubyCommand=&quot;ruby&quot;, const string &amp;user=&quot;&quot;)</td></tr>
51
50
 
52
51
  <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct a new <a class="el" href="classPassenger_1_1SpawnManager.html" title="Spawning of Ruby on Rails/Rack application instances.">SpawnManager</a>. <a href="#fdefbbbad39833912ae7f9f106083099"></a><br></td></tr>
53
- <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="namespacePassenger.html#6a15fd5e8765802a0b8b077e15297e18">ApplicationPtr</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1SpawnManager.html#1bafa97204ea49a88b66272be3377d53">spawn</a> (const string &amp;appRoot, bool lowerPrivilege=true, const string &amp;lowestUser=&quot;nobody&quot;, const string &amp;environment=&quot;production&quot;, const string &amp;spawnMethod=&quot;smart&quot;, const string &amp;appType=&quot;rails&quot;)</td></tr>
52
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">ApplicationPtr&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1SpawnManager.html#af035d564cc4e6683508939c9d6dbb64">spawn</a> (const <a class="el" href="structPassenger_1_1PoolOptions.html">PoolOptions</a> &amp;<a class="el" href="structPassenger_1_1PoolOptions.html">PoolOptions</a>)</td></tr>
54
53
 
55
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Spawn a new instance of a Ruby on Rails or Rack application. <a href="#1bafa97204ea49a88b66272be3377d53"></a><br></td></tr>
54
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Spawn a new instance of an application. <a href="#af035d564cc4e6683508939c9d6dbb64"></a><br></td></tr>
56
55
  <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1SpawnManager.html#2e85c43042b9556ca2fd74b8d28956ce">reload</a> (const string &amp;appRoot)</td></tr>
57
56
 
58
57
  <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Remove the cached application instances at the given application root. <a href="#2e85c43042b9556ca2fd74b8d28956ce"></a><br></td></tr>
@@ -119,70 +118,30 @@ Construct a new <a class="el" href="classPassenger_1_1SpawnManager.html" title="
119
118
  </div>
120
119
  </div><p>
121
120
  <hr><h2>Member Function Documentation</h2>
122
- <a class="anchor" name="1bafa97204ea49a88b66272be3377d53"></a><!-- doxytag: member="Passenger::SpawnManager::spawn" ref="1bafa97204ea49a88b66272be3377d53" args="(const string &amp;appRoot, bool lowerPrivilege=true, const string &amp;lowestUser=&quot;nobody&quot;, const string &amp;environment=&quot;production&quot;, const string &amp;spawnMethod=&quot;smart&quot;, const string &amp;appType=&quot;rails&quot;)" -->
121
+ <a class="anchor" name="af035d564cc4e6683508939c9d6dbb64"></a><!-- doxytag: member="Passenger::SpawnManager::spawn" ref="af035d564cc4e6683508939c9d6dbb64" args="(const PoolOptions &amp;PoolOptions)" -->
123
122
  <div class="memitem">
124
123
  <div class="memproto">
125
124
  <table class="memname">
126
125
  <tr>
127
- <td class="memname"><a class="el" href="namespacePassenger.html#6a15fd5e8765802a0b8b077e15297e18">ApplicationPtr</a> Passenger::SpawnManager::spawn </td>
126
+ <td class="memname">ApplicationPtr Passenger::SpawnManager::spawn </td>
128
127
  <td>(</td>
129
- <td class="paramtype">const string &amp;&nbsp;</td>
130
- <td class="paramname"> <em>appRoot</em>, </td>
131
- </tr>
132
- <tr>
133
- <td class="paramkey"></td>
134
- <td></td>
135
- <td class="paramtype">bool&nbsp;</td>
136
- <td class="paramname"> <em>lowerPrivilege</em> = <code>true</code>, </td>
137
- </tr>
138
- <tr>
139
- <td class="paramkey"></td>
140
- <td></td>
141
- <td class="paramtype">const string &amp;&nbsp;</td>
142
- <td class="paramname"> <em>lowestUser</em> = <code>&quot;nobody&quot;</code>, </td>
143
- </tr>
144
- <tr>
145
- <td class="paramkey"></td>
146
- <td></td>
147
- <td class="paramtype">const string &amp;&nbsp;</td>
148
- <td class="paramname"> <em>environment</em> = <code>&quot;production&quot;</code>, </td>
149
- </tr>
150
- <tr>
151
- <td class="paramkey"></td>
152
- <td></td>
153
- <td class="paramtype">const string &amp;&nbsp;</td>
154
- <td class="paramname"> <em>spawnMethod</em> = <code>&quot;smart&quot;</code>, </td>
155
- </tr>
156
- <tr>
157
- <td class="paramkey"></td>
158
- <td></td>
159
- <td class="paramtype">const string &amp;&nbsp;</td>
160
- <td class="paramname"> <em>appType</em> = <code>&quot;rails&quot;</code></td><td>&nbsp;</td>
161
- </tr>
162
- <tr>
163
- <td></td>
164
- <td>)</td>
165
- <td></td><td></td><td width="100%"><code> [inline]</code></td>
128
+ <td class="paramtype">const <a class="el" href="structPassenger_1_1PoolOptions.html">PoolOptions</a> &amp;&nbsp;</td>
129
+ <td class="paramname"> <em>PoolOptions</em> </td>
130
+ <td>&nbsp;)&nbsp;</td>
131
+ <td width="100%"><code> [inline]</code></td>
166
132
  </tr>
167
133
  </table>
168
134
  </div>
169
135
  <div class="memdoc">
170
136
 
171
137
  <p>
172
- Spawn a new instance of a Ruby on Rails or Rack application.
138
+ Spawn a new instance of an application.
173
139
  <p>
140
+ Spawning details are to be passed via the <code><a class="el" href="structPassenger_1_1PoolOptions.html" title="This struct encapsulates information for ApplicationPool::get() and for SpawnManager::spawn()...">PoolOptions</a></code> parameter.<p>
174
141
  If the spawn server died during the spawning process, then the server will be automatically restarted, and another spawn attempt will be made. If restarting the server fails, or if the second spawn attempt fails, then an exception will be thrown.<p>
175
- If <code>lowerPrivilege</code> is true, then it will be attempt to switch the spawned application instance to the user who owns the application's <code>config/environment.rb</code>, and to the default group of that user.<p>
176
- If that user doesn't exist on the system, or if that user is root, then it will be attempted to switch to the username given by <code>lowestUser</code> (and to the default group of that user). If <code>lowestUser</code> doesn't exist either, or if switching user failed (because the spawn server process does not have the privilege to do so), then the application will be spawned anyway, without reporting an error.<p>
177
- It goes without saying that lowering privilege is only possible if the spawn server is running as root (and thus, by induction, that <a class="el" href="namespacePassenger.html" title="Support for interruption of blocking system calls and C library calls.">Passenger</a> and Apache's control process are also running as root). Note that if Apache is listening on port 80, then its control process must be running as root. See "doc/Security of user switching.txt" for a detailed explanation.<p>
178
142
  <dl compact><dt><b>Parameters:</b></dt><dd>
179
143
  <table border="0" cellspacing="2" cellpadding="0">
180
- <tr><td valign="top"></td><td valign="top"><em>appRoot</em>&nbsp;</td><td>The application root of a RoR application, i.e. the folder that contains 'app/', 'public/', 'config/', etc. This must be a valid directory, but the path does not have to be absolute. </td></tr>
181
- <tr><td valign="top"></td><td valign="top"><em>lowerPrivilege</em>&nbsp;</td><td>Whether to lower the application's privileges. </td></tr>
182
- <tr><td valign="top"></td><td valign="top"><em>lowestUser</em>&nbsp;</td><td>The user to fallback to if lowering privilege fails. </td></tr>
183
- <tr><td valign="top"></td><td valign="top"><em>environment</em>&nbsp;</td><td>The RAILS_ENV/RACK_ENV environment that should be used. May not be empty. </td></tr>
184
- <tr><td valign="top"></td><td valign="top"><em>spawnMethod</em>&nbsp;</td><td>The spawn method to use. Either "smart" or "conservative". See the Ruby class <a class="el" href="classPassenger_1_1SpawnManager.html" title="Spawning of Ruby on Rails/Rack application instances.">SpawnManager</a> for details. </td></tr>
185
- <tr><td valign="top"></td><td valign="top"><em>appType</em>&nbsp;</td><td>The application type. Either "rails" or "rack". </td></tr>
144
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structPassenger_1_1PoolOptions.html" title="This struct encapsulates information for ApplicationPool::get() and for SpawnManager::spawn()...">PoolOptions</a></em>&nbsp;</td><td>An object containing the details for this spawn operation, such as which application to spawn. See <a class="el" href="structPassenger_1_1PoolOptions.html" title="This struct encapsulates information for ApplicationPool::get() and for SpawnManager::spawn()...">PoolOptions</a> for details. </td></tr>
186
145
  </table>
187
146
  </dl>
188
147
  <dl class="return" compact><dt><b>Returns:</b></dt><dd>A smart pointer to an <a class="el" href="classPassenger_1_1Application.html" title="Represents a single Ruby on Rails or Rack application instance.">Application</a> object, which represents the application instance that has been spawned. Use this object to communicate with the spawned application. </dd></dl>
@@ -248,7 +207,7 @@ This method is used in the unit tests and should not be used directly.
248
207
  <hr>The documentation for this class was generated from the following file:<ul>
249
208
  <li><a class="el" href="SpawnManager_8h-source.html">SpawnManager.h</a></ul>
250
209
  </div>
251
- <hr size="1"><address style="text-align: right;"><small>Generated on Mon Dec 15 15:27:25 2008 for Passenger by&nbsp;
210
+ <hr size="1"><address style="text-align: right;"><small>Generated on Fri Mar 13 19:24:35 2009 for Passenger by&nbsp;
252
211
  <a href="http://www.doxygen.org/index.html">
253
212
  <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
254
213
  </body>
@@ -10,7 +10,6 @@
10
10
  <ul>
11
11
  <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
12
12
  <li><a href="modules.html"><span>Modules</span></a></li>
13
- <li><a href="namespaces.html"><span>Namespaces</span></a></li>
14
13
  <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
15
14
  <li><a href="files.html"><span>Files</span></a></li>
16
15
  </ul>
@@ -26,17 +25,19 @@
26
25
  <div class="contents">
27
26
  <h1>Passenger::StandardApplicationPool Member List</h1>This is the complete list of members for <a class="el" href="classPassenger_1_1StandardApplicationPool.html">Passenger::StandardApplicationPool</a>, including all inherited members.<p><table>
28
27
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1StandardApplicationPool.html#bcf8faeb4f431ae07ea0e20270661d08">clear</a>()</td><td><a class="el" href="classPassenger_1_1StandardApplicationPool.html">Passenger::StandardApplicationPool</a></td><td><code> [inline, virtual]</code></td></tr>
29
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1StandardApplicationPool.html#0dcdd88c39d7f1a1d667e24c3cb9b243">get</a>(const string &amp;appRoot, bool lowerPrivilege=true, const string &amp;lowestUser=&quot;nobody&quot;, const string &amp;environment=&quot;production&quot;, const string &amp;spawnMethod=&quot;smart&quot;, const string &amp;appType=&quot;rails&quot;)</td><td><a class="el" href="classPassenger_1_1StandardApplicationPool.html">Passenger::StandardApplicationPool</a></td><td><code> [inline, virtual]</code></td></tr>
28
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1ApplicationPool.html#c811d261345fcf579f049a2377b4b56b">connected</a>() const </td><td><a class="el" href="classPassenger_1_1ApplicationPool.html">Passenger::ApplicationPool</a></td><td><code> [inline, virtual]</code></td></tr>
29
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1StandardApplicationPool.html#5a33f0766bbcfb2a48e08fc27bd1b684">get</a>(const string &amp;appRoot)</td><td><a class="el" href="classPassenger_1_1StandardApplicationPool.html">Passenger::StandardApplicationPool</a></td><td><code> [inline, virtual]</code></td></tr>
30
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1StandardApplicationPool.html#ffc8f3ef8b1d925d203794d191d7fef4">get</a>(const PoolOptions &amp;options)</td><td><a class="el" href="classPassenger_1_1StandardApplicationPool.html">Passenger::StandardApplicationPool</a></td><td><code> [inline, virtual]</code></td></tr>
30
31
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1StandardApplicationPool.html#7773c4a3dfbd88eac72401d063831788">getActive</a>() const </td><td><a class="el" href="classPassenger_1_1StandardApplicationPool.html">Passenger::StandardApplicationPool</a></td><td><code> [inline, virtual]</code></td></tr>
31
32
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1StandardApplicationPool.html#cdbfe2b9ffacdab4438c879c2411bf02">getCount</a>() const </td><td><a class="el" href="classPassenger_1_1StandardApplicationPool.html">Passenger::StandardApplicationPool</a></td><td><code> [inline, virtual]</code></td></tr>
32
33
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1StandardApplicationPool.html#6955152d237920988d20297d2fff5660">getSpawnServerPid</a>() const </td><td><a class="el" href="classPassenger_1_1StandardApplicationPool.html">Passenger::StandardApplicationPool</a></td><td><code> [inline, virtual]</code></td></tr>
33
34
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1StandardApplicationPool.html#04ef8c92da189520ad2022f4f82e9553">setMax</a>(unsigned int max)</td><td><a class="el" href="classPassenger_1_1StandardApplicationPool.html">Passenger::StandardApplicationPool</a></td><td><code> [inline, virtual]</code></td></tr>
34
35
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1StandardApplicationPool.html#3bafcda8d880f70561ad8a9da16e26ef">setMaxPerApp</a>(unsigned int maxPerApp)</td><td><a class="el" href="classPassenger_1_1StandardApplicationPool.html">Passenger::StandardApplicationPool</a></td><td><code> [inline, virtual]</code></td></tr>
35
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1StandardApplicationPool.html#e9c699b56f3a755ab10269c7fe585c2d">setUseGlobalQueue</a>(bool value)</td><td><a class="el" href="classPassenger_1_1StandardApplicationPool.html">Passenger::StandardApplicationPool</a></td><td><code> [inline, virtual]</code></td></tr>
36
36
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1StandardApplicationPool.html#f175704fc477f37ba1d387be09fa2e6b">StandardApplicationPool</a>(const string &amp;spawnServerCommand, const string &amp;logFile=&quot;&quot;, const string &amp;rubyCommand=&quot;ruby&quot;, const string &amp;user=&quot;&quot;)</td><td><a class="el" href="classPassenger_1_1StandardApplicationPool.html">Passenger::StandardApplicationPool</a></td><td><code> [inline]</code></td></tr>
37
37
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1StandardApplicationPool.html#22b4149ca8256c3042fc342e681b0383">toString</a>(bool lockMutex=true) const </td><td><a class="el" href="classPassenger_1_1StandardApplicationPool.html">Passenger::StandardApplicationPool</a></td><td><code> [inline, virtual]</code></td></tr>
38
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1StandardApplicationPool.html#d153c41a1d0aca91d17cf36ed6fdda19">toXml</a>() const </td><td><a class="el" href="classPassenger_1_1StandardApplicationPool.html">Passenger::StandardApplicationPool</a></td><td><code> [inline, virtual]</code></td></tr>
38
39
  </table></div>
39
- <hr size="1"><address style="text-align: right;"><small>Generated on Mon Dec 15 15:27:25 2008 for Passenger by&nbsp;
40
+ <hr size="1"><address style="text-align: right;"><small>Generated on Fri Mar 13 19:24:35 2009 for Passenger by&nbsp;
40
41
  <a href="http://www.doxygen.org/index.html">
41
42
  <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
42
43
  </body>
@@ -10,7 +10,6 @@
10
10
  <ul>
11
11
  <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
12
12
  <li><a href="modules.html"><span>Modules</span></a></li>
13
- <li><a href="namespaces.html"><span>Namespaces</span></a></li>
14
13
  <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
15
14
  <li><a href="files.html"><span>Files</span></a></li>
16
15
  </ul>
@@ -22,7 +21,7 @@
22
21
  <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
23
22
  </ul>
24
23
  </div>
25
- <div class="navpath"><a class="el" href="namespacePassenger.html">Passenger</a>::<a class="el" href="classPassenger_1_1StandardApplicationPool.html">StandardApplicationPool</a>
24
+ <div class="navpath"><b>Passenger</b>::<a class="el" href="classPassenger_1_1StandardApplicationPool.html">StandardApplicationPool</a>
26
25
  </div>
27
26
  </div>
28
27
  <div class="contents">
@@ -54,9 +53,13 @@ For multi-process environments, one should use <a class="el" href="classPassenge
54
53
  <tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1StandardApplicationPool.html#f175704fc477f37ba1d387be09fa2e6b">StandardApplicationPool</a> (const string &amp;spawnServerCommand, const string &amp;logFile=&quot;&quot;, const string &amp;rubyCommand=&quot;ruby&quot;, const string &amp;user=&quot;&quot;)</td></tr>
55
54
 
56
55
  <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create a new <a class="el" href="classPassenger_1_1StandardApplicationPool.html" title="A standard implementation of ApplicationPool for single-process environments.">StandardApplicationPool</a> object. <a href="#f175704fc477f37ba1d387be09fa2e6b"></a><br></td></tr>
57
- <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual <a class="el" href="classPassenger_1_1Application.html#d14f673494991460b16246a527ad8ad9">Application::SessionPtr</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1StandardApplicationPool.html#0dcdd88c39d7f1a1d667e24c3cb9b243">get</a> (const string &amp;appRoot, bool lowerPrivilege=true, const string &amp;lowestUser=&quot;nobody&quot;, const string &amp;environment=&quot;production&quot;, const string &amp;spawnMethod=&quot;smart&quot;, const string &amp;appType=&quot;rails&quot;)</td></tr>
56
+ <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5a33f0766bbcfb2a48e08fc27bd1b684"></a><!-- doxytag: member="Passenger::StandardApplicationPool::get" ref="5a33f0766bbcfb2a48e08fc27bd1b684" args="(const string &amp;appRoot)" -->
57
+ virtual <a class="el" href="classPassenger_1_1Application.html#d14f673494991460b16246a527ad8ad9">Application::SessionPtr</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1StandardApplicationPool.html#5a33f0766bbcfb2a48e08fc27bd1b684">get</a> (const string &amp;appRoot)</td></tr>
58
58
 
59
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Open a new session with the application specified by <code>appRoot</code>. <a href="#0dcdd88c39d7f1a1d667e24c3cb9b243"></a><br></td></tr>
59
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Convenience shortcut for calling <a class="el" href="classPassenger_1_1StandardApplicationPool.html#5a33f0766bbcfb2a48e08fc27bd1b684" title="Convenience shortcut for calling get() with default spawn options.">get()</a> with default spawn options. <br></td></tr>
60
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual <a class="el" href="classPassenger_1_1Application.html#d14f673494991460b16246a527ad8ad9">Application::SessionPtr</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1StandardApplicationPool.html#ffc8f3ef8b1d925d203794d191d7fef4">get</a> (const <a class="el" href="structPassenger_1_1PoolOptions.html">PoolOptions</a> &amp;options)</td></tr>
61
+
62
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Open a new session with the application specified by <code><a class="el" href="structPassenger_1_1PoolOptions.html#822039d204b48d9ed49184646734acf3" title="The root directory of the application to spawn.">PoolOptions.appRoot</a></code>. <a href="#ffc8f3ef8b1d925d203794d191d7fef4"></a><br></td></tr>
60
63
  <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1StandardApplicationPool.html#bcf8faeb4f431ae07ea0e20270661d08">clear</a> ()</td></tr>
61
64
 
62
65
  <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Clear all application instances that are currently in the pool. <a href="#bcf8faeb4f431ae07ea0e20270661d08"></a><br></td></tr>
@@ -72,9 +75,6 @@ For multi-process environments, one should use <a class="el" href="classPassenge
72
75
  <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1StandardApplicationPool.html#3bafcda8d880f70561ad8a9da16e26ef">setMaxPerApp</a> (unsigned int maxPerApp)</td></tr>
73
76
 
74
77
  <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set a hard limit on the number of application instances that a single application may spawn in this <a class="el" href="classPassenger_1_1ApplicationPool.html" title="A persistent pool of Applications.">ApplicationPool</a>. <a href="#3bafcda8d880f70561ad8a9da16e26ef"></a><br></td></tr>
75
- <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1StandardApplicationPool.html#e9c699b56f3a755ab10269c7fe585c2d">setUseGlobalQueue</a> (bool value)</td></tr>
76
-
77
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets whether to use a global queue instead of a per-backend process queue. <a href="#e9c699b56f3a755ab10269c7fe585c2d"></a><br></td></tr>
78
78
  <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual pid_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1StandardApplicationPool.html#6955152d237920988d20297d2fff5660">getSpawnServerPid</a> () const </td></tr>
79
79
 
80
80
  <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the process ID of the spawn server that is used. <a href="#6955152d237920988d20297d2fff5660"></a><br></td></tr>
@@ -82,6 +82,10 @@ For multi-process environments, one should use <a class="el" href="classPassenge
82
82
  virtual string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1StandardApplicationPool.html#22b4149ca8256c3042fc342e681b0383">toString</a> (bool lockMutex=true) const </td></tr>
83
83
 
84
84
  <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns a textual description of the internal state of the application pool. <br></td></tr>
85
+ <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d153c41a1d0aca91d17cf36ed6fdda19"></a><!-- doxytag: member="Passenger::StandardApplicationPool::toXml" ref="d153c41a1d0aca91d17cf36ed6fdda19" args="() const " -->
86
+ virtual string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1StandardApplicationPool.html#d153c41a1d0aca91d17cf36ed6fdda19">toXml</a> () const </td></tr>
87
+
88
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns an XML description of the internal state of the application pool. <br></td></tr>
85
89
  </table>
86
90
  <hr><h2>Constructor &amp; Destructor Documentation</h2>
87
91
  <a class="anchor" name="f175704fc477f37ba1d387be09fa2e6b"></a><!-- doxytag: member="Passenger::StandardApplicationPool::StandardApplicationPool" ref="f175704fc477f37ba1d387be09fa2e6b" args="(const string &amp;spawnServerCommand, const string &amp;logFile=&quot;&quot;, const string &amp;rubyCommand=&quot;ruby&quot;, const string &amp;user=&quot;&quot;)" -->
@@ -130,7 +134,6 @@ Create a new <a class="el" href="classPassenger_1_1StandardApplicationPool.html"
130
134
  <tr><td valign="top"></td><td valign="top"><em>logFile</em>&nbsp;</td><td>Specify a log file that the spawn server should use. Messages on its standard output and standard error channels will be written to this log file. If an empty string is specified, no log file will be used, and the spawn server will use the same standard output/error channels as the current process. </td></tr>
131
135
  <tr><td valign="top"></td><td valign="top"><em>rubyCommand</em>&nbsp;</td><td>The Ruby interpreter's command. </td></tr>
132
136
  <tr><td valign="top"></td><td valign="top"><em>user</em>&nbsp;</td><td>The user that the spawn manager should run as. This parameter only has effect if the current process is running as root. If the empty string is given, or if the <code>user</code> is not a valid username, then the spawn manager will be run as the current user. </td></tr>
133
- <tr><td valign="top"></td><td valign="top"><em>rubyCommand</em>&nbsp;</td><td>The Ruby interpreter's command. </td></tr>
134
137
  </table>
135
138
  </dl>
136
139
  <dl compact><dt><b>Exceptions:</b></dt><dd>
@@ -143,69 +146,30 @@ Create a new <a class="el" href="classPassenger_1_1StandardApplicationPool.html"
143
146
  </div>
144
147
  </div><p>
145
148
  <hr><h2>Member Function Documentation</h2>
146
- <a class="anchor" name="0dcdd88c39d7f1a1d667e24c3cb9b243"></a><!-- doxytag: member="Passenger::StandardApplicationPool::get" ref="0dcdd88c39d7f1a1d667e24c3cb9b243" args="(const string &amp;appRoot, bool lowerPrivilege=true, const string &amp;lowestUser=&quot;nobody&quot;, const string &amp;environment=&quot;production&quot;, const string &amp;spawnMethod=&quot;smart&quot;, const string &amp;appType=&quot;rails&quot;)" -->
149
+ <a class="anchor" name="ffc8f3ef8b1d925d203794d191d7fef4"></a><!-- doxytag: member="Passenger::StandardApplicationPool::get" ref="ffc8f3ef8b1d925d203794d191d7fef4" args="(const PoolOptions &amp;options)" -->
147
150
  <div class="memitem">
148
151
  <div class="memproto">
149
152
  <table class="memname">
150
153
  <tr>
151
154
  <td class="memname">virtual <a class="el" href="classPassenger_1_1Application.html#d14f673494991460b16246a527ad8ad9">Application::SessionPtr</a> Passenger::StandardApplicationPool::get </td>
152
155
  <td>(</td>
153
- <td class="paramtype">const string &amp;&nbsp;</td>
154
- <td class="paramname"> <em>appRoot</em>, </td>
155
- </tr>
156
- <tr>
157
- <td class="paramkey"></td>
158
- <td></td>
159
- <td class="paramtype">bool&nbsp;</td>
160
- <td class="paramname"> <em>lowerPrivilege</em> = <code>true</code>, </td>
161
- </tr>
162
- <tr>
163
- <td class="paramkey"></td>
164
- <td></td>
165
- <td class="paramtype">const string &amp;&nbsp;</td>
166
- <td class="paramname"> <em>lowestUser</em> = <code>&quot;nobody&quot;</code>, </td>
167
- </tr>
168
- <tr>
169
- <td class="paramkey"></td>
170
- <td></td>
171
- <td class="paramtype">const string &amp;&nbsp;</td>
172
- <td class="paramname"> <em>environment</em> = <code>&quot;production&quot;</code>, </td>
173
- </tr>
174
- <tr>
175
- <td class="paramkey"></td>
176
- <td></td>
177
- <td class="paramtype">const string &amp;&nbsp;</td>
178
- <td class="paramname"> <em>spawnMethod</em> = <code>&quot;smart&quot;</code>, </td>
179
- </tr>
180
- <tr>
181
- <td class="paramkey"></td>
182
- <td></td>
183
- <td class="paramtype">const string &amp;&nbsp;</td>
184
- <td class="paramname"> <em>appType</em> = <code>&quot;rails&quot;</code></td><td>&nbsp;</td>
185
- </tr>
186
- <tr>
187
- <td></td>
188
- <td>)</td>
189
- <td></td><td></td><td width="100%"><code> [inline, virtual]</code></td>
156
+ <td class="paramtype">const <a class="el" href="structPassenger_1_1PoolOptions.html">PoolOptions</a> &amp;&nbsp;</td>
157
+ <td class="paramname"> <em>options</em> </td>
158
+ <td>&nbsp;)&nbsp;</td>
159
+ <td width="100%"><code> [inline, virtual]</code></td>
190
160
  </tr>
191
161
  </table>
192
162
  </div>
193
163
  <div class="memdoc">
194
164
 
195
165
  <p>
196
- Open a new session with the application specified by <code>appRoot</code>.
166
+ Open a new session with the application specified by <code><a class="el" href="structPassenger_1_1PoolOptions.html#822039d204b48d9ed49184646734acf3" title="The root directory of the application to spawn.">PoolOptions.appRoot</a></code>.
197
167
  <p>
198
168
  See the class description for <a class="el" href="classPassenger_1_1ApplicationPool.html" title="A persistent pool of Applications.">ApplicationPool</a>, as well as <a class="el" href="classPassenger_1_1Application.html#34636f796ff3924ad5ec142aaa581379" title="Connect to this application instance with the purpose of sending a request to the...">Application::connect()</a>, on how to use the returned session object.<p>
199
169
  Internally, this method may either spawn a new application instance, or use an existing one.<p>
200
- If <code>lowerPrivilege</code> is true, then any newly spawned application instances will have lower privileges. See <a class="el" href="classPassenger_1_1SpawnManager.html#fdefbbbad39833912ae7f9f106083099" title="Construct a new SpawnManager.">SpawnManager::SpawnManager()</a>'s description of <code>lowerPrivilege</code> and <code>lowestUser</code> for details.<p>
201
170
  <dl compact><dt><b>Parameters:</b></dt><dd>
202
171
  <table border="0" cellspacing="2" cellpadding="0">
203
- <tr><td valign="top"></td><td valign="top"><em>appRoot</em>&nbsp;</td><td>The application root of a RoR application, i.e. the folder that contains 'app/', 'public/', 'config/', etc. This must be a valid directory, but does not have to be an absolute path. </td></tr>
204
- <tr><td valign="top"></td><td valign="top"><em>lowerPrivilege</em>&nbsp;</td><td>Whether to lower the application's privileges. </td></tr>
205
- <tr><td valign="top"></td><td valign="top"><em>lowestUser</em>&nbsp;</td><td>The user to fallback to if lowering privilege fails. </td></tr>
206
- <tr><td valign="top"></td><td valign="top"><em>environment</em>&nbsp;</td><td>The RAILS_ENV/RACK_ENV environment that should be used. May not be empty. </td></tr>
207
- <tr><td valign="top"></td><td valign="top"><em>spawnMethod</em>&nbsp;</td><td>The spawn method to use. Either "smart" or "conservative". See the Ruby class <a class="el" href="classPassenger_1_1SpawnManager.html" title="Spawning of Ruby on Rails/Rack application instances.">SpawnManager</a> for details. </td></tr>
208
- <tr><td valign="top"></td><td valign="top"><em>appType</em>&nbsp;</td><td>The application type. Either "rails" or "rack". </td></tr>
172
+ <tr><td valign="top"></td><td valign="top"><em>options</em>&nbsp;</td><td>An object containing information on which application to open a session with, as well as spawning details. Spawning details will be used if the pool decides that spawning a new application instance is necessary. See <a class="el" href="classPassenger_1_1SpawnManager.html" title="Spawning of Ruby on Rails/Rack application instances.">SpawnManager</a> and <a class="el" href="structPassenger_1_1PoolOptions.html" title="This struct encapsulates information for ApplicationPool::get() and for SpawnManager::spawn()...">PoolOptions</a> for details. </td></tr>
209
173
  </table>
210
174
  </dl>
211
175
  <dl class="return" compact><dt><b>Returns:</b></dt><dd>A session object. </dd></dl>
@@ -219,7 +183,7 @@ If <code>lowerPrivilege</code> is true, then any newly spawned application insta
219
183
  </dl>
220
184
  <dl class="note" compact><dt><b>Note:</b></dt><dd>Applications are uniquely identified with the application root string. So although <code>appRoot</code> does not have to be absolute, it should be. If one calls <code>get("/home/foo")</code> and <code>get("/home/../home/foo")</code>, then <a class="el" href="classPassenger_1_1ApplicationPool.html" title="A persistent pool of Applications.">ApplicationPool</a> will think they're 2 different applications, and thus will spawn 2 application instances. </dd></dl>
221
185
 
222
- <p>Implements <a class="el" href="classPassenger_1_1ApplicationPool.html#9f486e1c0a4187f7fdb95d1382a85282">Passenger::ApplicationPool</a>.</p>
186
+ <p>Implements <a class="el" href="classPassenger_1_1ApplicationPool.html#0b206eb4eb2869423d75c042a0653c67">Passenger::ApplicationPool</a>.</p>
223
187
 
224
188
  </div>
225
189
  </div><p>
@@ -340,31 +304,6 @@ The exact behavior depends on the used algorithm, and is not specified by these
340
304
  It is allowed to set a limit lower than the current number of spawned applications.
341
305
  <p>Implements <a class="el" href="classPassenger_1_1ApplicationPool.html#b0437434c79b5444ac0faf768f1410e8">Passenger::ApplicationPool</a>.</p>
342
306
 
343
- </div>
344
- </div><p>
345
- <a class="anchor" name="e9c699b56f3a755ab10269c7fe585c2d"></a><!-- doxytag: member="Passenger::StandardApplicationPool::setUseGlobalQueue" ref="e9c699b56f3a755ab10269c7fe585c2d" args="(bool value)" -->
346
- <div class="memitem">
347
- <div class="memproto">
348
- <table class="memname">
349
- <tr>
350
- <td class="memname">virtual void Passenger::StandardApplicationPool::setUseGlobalQueue </td>
351
- <td>(</td>
352
- <td class="paramtype">bool&nbsp;</td>
353
- <td class="paramname"> <em>value</em> </td>
354
- <td>&nbsp;)&nbsp;</td>
355
- <td width="100%"><code> [inline, virtual]</code></td>
356
- </tr>
357
- </table>
358
- </div>
359
- <div class="memdoc">
360
-
361
- <p>
362
- Sets whether to use a global queue instead of a per-backend process queue.
363
- <p>
364
- If enabled, when all backend processes are active, <a class="el" href="classPassenger_1_1StandardApplicationPool.html#0dcdd88c39d7f1a1d667e24c3cb9b243" title="Open a new session with the application specified by appRoot.">get()</a> will wait until there's at least one backend process that's idle, instead of queuing the request into a random process's private queue. This is especially useful if a website has one or more long-running requests.<p>
365
- Defaults to false.
366
- <p>Implements <a class="el" href="classPassenger_1_1ApplicationPool.html#b5faf64421313e1387c187f80b95d0e7">Passenger::ApplicationPool</a>.</p>
367
-
368
307
  </div>
369
308
  </div><p>
370
309
  <a class="anchor" name="6955152d237920988d20297d2fff5660"></a><!-- doxytag: member="Passenger::StandardApplicationPool::getSpawnServerPid" ref="6955152d237920988d20297d2fff5660" args="() const " -->
@@ -393,7 +332,7 @@ This method exposes an implementation detail. It is used by unit tests to verify
393
332
  <hr>The documentation for this class was generated from the following file:<ul>
394
333
  <li><a class="el" href="StandardApplicationPool_8h-source.html">StandardApplicationPool.h</a></ul>
395
334
  </div>
396
- <hr size="1"><address style="text-align: right;"><small>Generated on Mon Dec 15 15:27:25 2008 for Passenger by&nbsp;
335
+ <hr size="1"><address style="text-align: right;"><small>Generated on Fri Mar 13 19:24:35 2009 for Passenger by&nbsp;
397
336
  <a href="http://www.doxygen.org/index.html">
398
337
  <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
399
338
  </body>