passenger 4.0.30 → 4.0.31

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 (409) hide show
  1. data.tar.gz.asc +7 -7
  2. data/NEWS +31 -0
  3. data/bin/passenger +5 -5
  4. data/bin/passenger-config +6 -126
  5. data/bin/passenger-install-apache2-module +108 -26
  6. data/bin/passenger-install-nginx-module +81 -27
  7. data/bin/passenger-memory-stats +7 -6
  8. data/bin/passenger-status +13 -10
  9. data/build/agents.rb +8 -12
  10. data/build/apache2.rb +12 -7
  11. data/build/basics.rb +28 -20
  12. data/build/common_library.rb +4 -4
  13. data/build/cplusplus_support.rb +4 -4
  14. data/build/cxx_tests.rb +5 -3
  15. data/build/debian.rb +1 -2
  16. data/build/integration_tests.rb +25 -9
  17. data/build/misc.rb +2 -2
  18. data/build/oxt_tests.rb +5 -6
  19. data/build/packaging.rb +72 -40
  20. data/build/ruby_tests.rb +5 -1
  21. data/build/test_basics.rb +1 -2
  22. data/debian.template/locations.ini.template +1 -0
  23. data/debian.template/rules.template +2 -1
  24. data/dev/install_scripts_bootstrap_code.rb +42 -0
  25. data/dev/run_travis.sh +1 -0
  26. data/dev/runner +27 -0
  27. data/doc/Packaging.txt.md +5 -10
  28. data/doc/Users guide Apache.idmap.txt +3 -1
  29. data/doc/Users guide Apache.txt +5 -3
  30. data/doc/Users guide Nginx.idmap.txt +9 -5
  31. data/doc/Users guide Nginx.txt +47 -17
  32. data/doc/users_guide_snippets/environment_variables.txt +2 -2
  33. data/doc/users_guide_snippets/installation.txt +6 -2
  34. data/doc/users_guide_snippets/tips.txt +4 -0
  35. data/ext/apache2/Hooks.cpp +16 -3
  36. data/ext/common/Account.h +6 -5
  37. data/ext/common/AgentsStarter.h +1 -1
  38. data/ext/common/ApplicationPool2/Common.h +72 -0
  39. data/ext/common/ApplicationPool2/Group.h +263 -148
  40. data/ext/common/ApplicationPool2/Implementation.cpp +66 -44
  41. data/ext/common/ApplicationPool2/Options.h +1 -7
  42. data/ext/common/ApplicationPool2/Pool.h +96 -72
  43. data/ext/common/ApplicationPool2/Process.h +12 -17
  44. data/ext/common/ApplicationPool2/Socket.h +4 -4
  45. data/ext/common/ApplicationPool2/SuperGroup.h +20 -17
  46. data/ext/common/Constants.h +15 -1
  47. data/ext/common/MessageServer.h +22 -0
  48. data/ext/common/Utils.cpp +4 -1
  49. data/ext/common/Utils.h +3 -1
  50. data/ext/common/Utils/StrIntUtils.h +1 -0
  51. data/ext/common/Utils/Timer.h +15 -1
  52. data/ext/common/Utils/utf8/checked.h +0 -0
  53. data/ext/common/Utils/utf8/core.h +0 -0
  54. data/ext/common/Utils/utf8/unchecked.h +0 -0
  55. data/ext/common/agents/Base.cpp +59 -35
  56. data/ext/common/agents/HelperAgent/Main.cpp +23 -12
  57. data/ext/common/agents/HelperAgent/RequestHandler.h +10 -1
  58. data/ext/common/agents/LoggingAgent/FilterSupport.h +9 -5
  59. data/ext/common/agents/TempDirToucher.c +12 -3
  60. data/ext/common/agents/Watchdog/Main.cpp +8 -2
  61. data/ext/nginx/ConfigurationCommands.c +10 -0
  62. data/ext/nginx/ConfigurationFields.h +2 -0
  63. data/ext/nginx/ContentHandler.c +32 -19
  64. data/ext/nginx/CreateLocationConfig.c +5 -0
  65. data/ext/nginx/MergeLocationConfig.c +6 -0
  66. data/ext/nginx/config +13 -6
  67. data/ext/ruby/passenger_native_support.c +61 -2
  68. data/helper-scripts/classic-rails-loader.rb +9 -10
  69. data/helper-scripts/classic-rails-preloader.rb +10 -11
  70. data/helper-scripts/node-loader.js +3 -2
  71. data/helper-scripts/rack-loader.rb +8 -9
  72. data/helper-scripts/rack-preloader.rb +9 -10
  73. data/lib/phusion_passenger.rb +36 -7
  74. data/lib/phusion_passenger/abstract_installer.rb +16 -15
  75. data/lib/phusion_passenger/active_support3_extensions/init.rb +1 -1
  76. data/lib/phusion_passenger/admin_tools/memory_stats.rb +2 -2
  77. data/lib/phusion_passenger/admin_tools/server_instance.rb +5 -5
  78. data/lib/phusion_passenger/analytics_logger.rb +3 -3
  79. data/lib/phusion_passenger/classic_rails/thread_handler_extension.rb +1 -1
  80. data/lib/phusion_passenger/config.rb +125 -0
  81. data/lib/phusion_passenger/config/about_command.rb +183 -0
  82. data/lib/phusion_passenger/config/command.rb +57 -0
  83. data/lib/phusion_passenger/config/restart_app_command.rb +146 -0
  84. data/lib/phusion_passenger/config/utils.rb +108 -0
  85. data/lib/phusion_passenger/console_text_template.rb +2 -1
  86. data/lib/phusion_passenger/constants.rb +7 -2
  87. data/lib/phusion_passenger/loader_shared_helpers.rb +12 -21
  88. data/lib/phusion_passenger/message_client.rb +15 -4
  89. data/lib/phusion_passenger/native_support.rb +116 -98
  90. data/lib/phusion_passenger/nginx/config_options.rb +5 -0
  91. data/lib/phusion_passenger/platform_info.rb +1 -1
  92. data/lib/phusion_passenger/platform_info/apache.rb +9 -5
  93. data/lib/phusion_passenger/platform_info/apache_detector.rb +5 -6
  94. data/lib/phusion_passenger/platform_info/binary_compatibility.rb +3 -3
  95. data/lib/phusion_passenger/platform_info/compiler.rb +29 -11
  96. data/lib/phusion_passenger/platform_info/curl.rb +1 -1
  97. data/lib/phusion_passenger/platform_info/cxx_portability.rb +30 -16
  98. data/lib/phusion_passenger/platform_info/depcheck.rb +6 -6
  99. data/lib/phusion_passenger/platform_info/linux.rb +2 -2
  100. data/lib/phusion_passenger/platform_info/operating_system.rb +25 -5
  101. data/lib/phusion_passenger/platform_info/ruby.rb +7 -4
  102. data/lib/phusion_passenger/platform_info/zlib.rb +1 -1
  103. data/lib/phusion_passenger/plugin.rb +0 -1
  104. data/lib/phusion_passenger/preloader_shared_helpers.rb +1 -1
  105. data/lib/phusion_passenger/public_api.rb +1 -1
  106. data/lib/phusion_passenger/rack/thread_handler_extension.rb +1 -1
  107. data/lib/phusion_passenger/request_handler.rb +8 -9
  108. data/lib/phusion_passenger/request_handler/thread_handler.rb +21 -9
  109. data/lib/phusion_passenger/ruby_core_enhancements.rb +1 -1
  110. data/lib/phusion_passenger/standalone/app_finder.rb +2 -2
  111. data/lib/phusion_passenger/standalone/command.rb +10 -8
  112. data/lib/phusion_passenger/standalone/help_command.rb +1 -1
  113. data/lib/phusion_passenger/standalone/main.rb +3 -3
  114. data/lib/phusion_passenger/standalone/package_runtime_command.rb +2 -2
  115. data/lib/phusion_passenger/standalone/runtime_installer.rb +55 -13
  116. data/lib/phusion_passenger/standalone/runtime_locator.rb +3 -3
  117. data/lib/phusion_passenger/standalone/start_command.rb +6 -7
  118. data/lib/phusion_passenger/standalone/status_command.rb +1 -1
  119. data/lib/phusion_passenger/standalone/stop_command.rb +1 -1
  120. data/lib/phusion_passenger/standalone/utils.rb +1 -1
  121. data/lib/phusion_passenger/standalone/version_command.rb +2 -3
  122. data/lib/phusion_passenger/utils.rb +1 -1
  123. data/lib/phusion_passenger/utils/download.rb +1 -2
  124. data/lib/phusion_passenger/utils/file_system_watcher.rb +1 -1
  125. data/lib/phusion_passenger/utils/hosts_file_parser.rb +1 -1
  126. data/lib/phusion_passenger/utils/tee_input.rb +1 -1
  127. data/lib/phusion_passenger/utils/terminal_choice_menu.rb +217 -0
  128. data/lib/phusion_passenger/utils/unseekable_socket.rb +1 -1
  129. data/resources/templates/apache2/config_snippets.txt.erb +2 -3
  130. data/resources/templates/apache2/deployment_example.txt.erb +2 -2
  131. data/resources/templates/apache2/notify_apache_module_installed.txt.erb +3 -0
  132. data/resources/templates/nginx/config_snippets.txt.erb +1 -1
  133. data/resources/templates/nginx/deployment_example.txt.erb +2 -2
  134. data/resources/templates/nginx/nginx_module_sources_not_available.txt.erb +11 -5
  135. data/rpm/Vagrantfile +1 -0
  136. data/test/cxx/ApplicationPool2/PoolTest.cpp +224 -35
  137. data/test/cxx/ApplicationPool2/ProcessTest.cpp +6 -6
  138. data/test/cxx/MessagePassingTest.cpp +1 -1
  139. data/test/cxx/RequestHandlerTest.cpp +26 -26
  140. data/test/integration_tests/apache2_tests.rb +162 -243
  141. data/test/integration_tests/native_packaging_spec.rb +10 -10
  142. data/test/integration_tests/nginx_tests.rb +87 -107
  143. data/test/integration_tests/shared/example_webapp_tests.rb +246 -0
  144. data/test/integration_tests/source_packaging_test.rb +2 -1
  145. data/test/integration_tests/standalone_tests.rb +34 -19
  146. data/test/ruby/admin_tools_spec.rb +4 -4
  147. data/test/ruby/analytics_logger_spec.rb +1 -1
  148. data/test/ruby/debug_logging_spec.rb +2 -2
  149. data/test/ruby/message_channel_spec.rb +1 -1
  150. data/test/ruby/request_handler_spec.rb +171 -64
  151. data/test/ruby/shared/loader_sharedspec.rb +5 -5
  152. data/test/ruby/shared/rails/analytics_logging_extensions_sharedspec.rb +2 -2
  153. data/test/ruby/spec_helper.rb +4 -4
  154. data/test/ruby/standalone/runtime_installer_spec.rb +1 -1
  155. data/test/ruby/standalone/runtime_locator_spec.rb +1 -1
  156. data/test/ruby/utils/file_system_watcher_spec.rb +1 -1
  157. data/test/ruby/utils/hosts_file_parser.rb +1 -1
  158. data/test/ruby/utils/unseekable_socket_spec.rb +1 -1
  159. data/test/ruby/utils_spec.rb +4 -4
  160. data/test/stub/apache2/httpd.conf.erb +5 -0
  161. data/test/stub/index.html +1 -0
  162. data/test/stub/rack/config.ru +80 -33
  163. data/test/stub/{rails_apps/1.2/empty/app/models → rack/public}/.gitignore +0 -0
  164. data/test/stub/{rails_apps/1.2/empty → rails2.3-mycook}/Rakefile +0 -0
  165. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/controllers/application_controller.rb +0 -0
  166. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/controllers/recipes_controller.rb +0 -0
  167. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/controllers/uploads_controller.rb +0 -0
  168. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/controllers/welcome_controller.rb +0 -0
  169. data/test/stub/{rails_apps/1.2/empty → rails2.3-mycook}/app/helpers/application_helper.rb +0 -0
  170. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/helpers/recipes_helper.rb +0 -0
  171. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/helpers/test_helper.rb +0 -0
  172. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/helpers/uploads_helper.rb +0 -0
  173. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/helpers/welcome_helper.rb +0 -0
  174. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/views/layouts/default.rhtml +0 -0
  175. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/views/recipes/create.rhtml +0 -0
  176. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/views/recipes/index.rhtml +0 -0
  177. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/views/recipes/new.rhtml +0 -0
  178. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/views/uploads/index.rhtml +0 -0
  179. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/views/uploads/new.html.erb +0 -0
  180. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/views/welcome/cached.rhtml +0 -0
  181. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/views/welcome/index.rhtml +0 -0
  182. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/config/boot.rb +0 -0
  183. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/config/database.yml +0 -0
  184. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/config/environment.rb +0 -0
  185. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/config/environments/development.rb +0 -0
  186. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/config/environments/production.rb +0 -0
  187. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/config/initializers/inflections.rb +0 -0
  188. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/config/initializers/mime_types.rb +0 -0
  189. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/config/routes.rb +0 -0
  190. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/log/useless.txt +0 -0
  191. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/public/.htaccess +0 -0
  192. data/test/stub/{rails_apps/1.2/empty → rails2.3-mycook}/public/404.html +0 -0
  193. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/public/422.html +0 -0
  194. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/public/500.html +0 -0
  195. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/public/dispatch.cgi +0 -0
  196. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/public/dispatch.fcgi +0 -0
  197. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/public/dispatch.rb +0 -0
  198. data/test/stub/{rails_apps/1.2/empty → rails2.3-mycook}/public/favicon.ico +0 -0
  199. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/public/images/angrywizard.gif +0 -0
  200. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/public/images/cookbook.gif +0 -0
  201. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/public/images/header.png +0 -0
  202. data/test/stub/{rails_apps/1.2/empty → rails2.3-mycook}/public/images/rails.png +0 -0
  203. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/public/robots.txt +0 -0
  204. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/public/uploads.html +0 -0
  205. data/test/stub/{rails_apps/1.2/empty/db → rails2.3-mycook/public/uploads}/.gitignore +0 -0
  206. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/public/welcome/cached.html +0 -0
  207. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/script/about +0 -0
  208. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/script/console +0 -0
  209. data/test/stub/{rails_apps/2.2/empty → rails2.3-mycook}/script/dbconsole +0 -0
  210. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/script/destroy +0 -0
  211. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/script/generate +0 -0
  212. data/test/stub/{rails_apps/1.2/empty → rails2.3-mycook}/script/performance/benchmarker +0 -0
  213. data/test/stub/{rails_apps/1.2/empty → rails2.3-mycook}/script/performance/profiler +0 -0
  214. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/script/performance/request +0 -0
  215. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/script/plugin +0 -0
  216. data/test/stub/{rails_apps/1.2/empty → rails2.3-mycook}/script/process/inspector +0 -0
  217. data/test/stub/{rails_apps/1.2/empty → rails2.3-mycook}/script/process/reaper +0 -0
  218. data/test/stub/{rails_apps/1.2/empty → rails2.3-mycook}/script/process/spawner +0 -0
  219. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/script/runner +0 -0
  220. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/script/server +0 -0
  221. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/sites/some.site/public/uploads.html +0 -0
  222. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/sites/some.site/public/welcome/cached.html +0 -0
  223. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/tmp/cache/useless.txt +0 -0
  224. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/tmp/pids/useless.txt +0 -0
  225. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/tmp/sessions/useless.txt +0 -0
  226. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/tmp/sockets/useless.txt +0 -0
  227. data/test/stub/rails2.3/app/controllers/foo_controller.rb +1 -1
  228. data/test/stub/rails2.3/config/routes.rb +1 -2
  229. data/test/stub/wsgi/passenger_wsgi.py +47 -8
  230. data/test/stub/{rails_apps/1.2/empty/public/stylesheets → wsgi/public}/.gitignore +0 -0
  231. data/test/support/apache2_controller.rb +2 -2
  232. data/test/support/nginx_controller.rb +11 -5
  233. data/test/support/placebo-preloader.rb +2 -2
  234. data/test/support/test_helper.rb +26 -7
  235. metadata +78 -240
  236. metadata.gz.asc +7 -7
  237. data/debian.template/repack.sh +0 -42
  238. data/debian.template/watch +0 -3
  239. data/test/integration_tests/cgi_environment_spec.rb +0 -36
  240. data/test/integration_tests/hello_world_rack_spec.rb +0 -43
  241. data/test/integration_tests/hello_world_wsgi_spec.rb +0 -41
  242. data/test/integration_tests/mycook_spec.rb +0 -166
  243. data/test/stub/rack/public/rack.jpg +0 -0
  244. data/test/stub/rails_apps/1.2/empty/.gitignore +0 -3
  245. data/test/stub/rails_apps/1.2/empty/app/controllers/application.rb +0 -7
  246. data/test/stub/rails_apps/1.2/empty/config/boot.rb +0 -108
  247. data/test/stub/rails_apps/1.2/empty/config/database.yml +0 -31
  248. data/test/stub/rails_apps/1.2/empty/config/environment.rb +0 -66
  249. data/test/stub/rails_apps/1.2/empty/config/environments/development.rb +0 -21
  250. data/test/stub/rails_apps/1.2/empty/config/environments/production.rb +0 -18
  251. data/test/stub/rails_apps/1.2/empty/config/environments/staging.rb +0 -18
  252. data/test/stub/rails_apps/1.2/empty/config/environments/test.rb +0 -19
  253. data/test/stub/rails_apps/1.2/empty/config/routes.rb +0 -23
  254. data/test/stub/rails_apps/1.2/empty/doc/README_FOR_APP +0 -2
  255. data/test/stub/rails_apps/1.2/empty/public/.htaccess +0 -40
  256. data/test/stub/rails_apps/1.2/empty/public/500.html +0 -30
  257. data/test/stub/rails_apps/1.2/empty/public/dispatch.cgi +0 -10
  258. data/test/stub/rails_apps/1.2/empty/public/dispatch.fcgi +0 -24
  259. data/test/stub/rails_apps/1.2/empty/public/dispatch.rb +0 -10
  260. data/test/stub/rails_apps/1.2/empty/public/robots.txt +0 -1
  261. data/test/stub/rails_apps/1.2/empty/script/about +0 -3
  262. data/test/stub/rails_apps/1.2/empty/script/breakpointer +0 -3
  263. data/test/stub/rails_apps/1.2/empty/script/console +0 -3
  264. data/test/stub/rails_apps/1.2/empty/script/destroy +0 -3
  265. data/test/stub/rails_apps/1.2/empty/script/generate +0 -3
  266. data/test/stub/rails_apps/1.2/empty/script/plugin +0 -3
  267. data/test/stub/rails_apps/1.2/empty/script/runner +0 -3
  268. data/test/stub/rails_apps/1.2/empty/script/server +0 -3
  269. data/test/stub/rails_apps/1.2/empty/test/test_helper.rb +0 -28
  270. data/test/stub/rails_apps/2.0/empty/.gitignore +0 -3
  271. data/test/stub/rails_apps/2.0/empty/Rakefile +0 -10
  272. data/test/stub/rails_apps/2.0/empty/app/controllers/application.rb +0 -10
  273. data/test/stub/rails_apps/2.0/empty/app/helpers/application_helper.rb +0 -3
  274. data/test/stub/rails_apps/2.0/empty/app/models/.gitignore +0 -0
  275. data/test/stub/rails_apps/2.0/empty/config/boot.rb +0 -108
  276. data/test/stub/rails_apps/2.0/empty/config/database.yml +0 -31
  277. data/test/stub/rails_apps/2.0/empty/config/environment.rb +0 -59
  278. data/test/stub/rails_apps/2.0/empty/config/environments/production.rb +0 -18
  279. data/test/stub/rails_apps/2.0/empty/config/environments/staging.rb +0 -18
  280. data/test/stub/rails_apps/2.0/empty/config/environments/test.rb +0 -22
  281. data/test/stub/rails_apps/2.0/empty/config/routes.rb +0 -35
  282. data/test/stub/rails_apps/2.0/empty/db/.gitignore +0 -0
  283. data/test/stub/rails_apps/2.0/empty/doc/README_FOR_APP +0 -2
  284. data/test/stub/rails_apps/2.0/empty/public/.htaccess +0 -40
  285. data/test/stub/rails_apps/2.0/empty/public/404.html +0 -30
  286. data/test/stub/rails_apps/2.0/empty/public/dispatch.cgi +0 -10
  287. data/test/stub/rails_apps/2.0/empty/public/dispatch.fcgi +0 -24
  288. data/test/stub/rails_apps/2.0/empty/public/dispatch.rb +0 -10
  289. data/test/stub/rails_apps/2.0/empty/public/favicon.ico +0 -0
  290. data/test/stub/rails_apps/2.0/empty/public/images/rails.png +0 -0
  291. data/test/stub/rails_apps/2.0/empty/public/stylesheets/.gitignore +0 -0
  292. data/test/stub/rails_apps/2.0/empty/script/performance/benchmarker +0 -3
  293. data/test/stub/rails_apps/2.0/empty/script/performance/profiler +0 -3
  294. data/test/stub/rails_apps/2.0/empty/script/process/inspector +0 -3
  295. data/test/stub/rails_apps/2.0/empty/script/process/reaper +0 -3
  296. data/test/stub/rails_apps/2.0/empty/script/process/spawner +0 -3
  297. data/test/stub/rails_apps/2.0/empty/test/test_helper.rb +0 -38
  298. data/test/stub/rails_apps/2.2/empty/.gitignore +0 -3
  299. data/test/stub/rails_apps/2.2/empty/Rakefile +0 -10
  300. data/test/stub/rails_apps/2.2/empty/app/controllers/application.rb +0 -15
  301. data/test/stub/rails_apps/2.2/empty/app/helpers/application_helper.rb +0 -3
  302. data/test/stub/rails_apps/2.2/empty/app/models/.gitignore +0 -0
  303. data/test/stub/rails_apps/2.2/empty/config/boot.rb +0 -109
  304. data/test/stub/rails_apps/2.2/empty/config/database.yml +0 -31
  305. data/test/stub/rails_apps/2.2/empty/config/environment.rb +0 -75
  306. data/test/stub/rails_apps/2.2/empty/config/environments/development.rb +0 -17
  307. data/test/stub/rails_apps/2.2/empty/config/environments/production.rb +0 -24
  308. data/test/stub/rails_apps/2.2/empty/config/environments/staging.rb +0 -24
  309. data/test/stub/rails_apps/2.2/empty/config/environments/test.rb +0 -22
  310. data/test/stub/rails_apps/2.2/empty/config/initializers/inflections.rb +0 -10
  311. data/test/stub/rails_apps/2.2/empty/config/initializers/mime_types.rb +0 -5
  312. data/test/stub/rails_apps/2.2/empty/config/initializers/new_rails_defaults.rb +0 -17
  313. data/test/stub/rails_apps/2.2/empty/config/locales/en.yml +0 -5
  314. data/test/stub/rails_apps/2.2/empty/config/routes.rb +0 -43
  315. data/test/stub/rails_apps/2.2/empty/db/.gitignore +0 -0
  316. data/test/stub/rails_apps/2.2/empty/doc/README_FOR_APP +0 -5
  317. data/test/stub/rails_apps/2.2/empty/public/404.html +0 -30
  318. data/test/stub/rails_apps/2.2/empty/public/422.html +0 -30
  319. data/test/stub/rails_apps/2.2/empty/public/500.html +0 -33
  320. data/test/stub/rails_apps/2.2/empty/public/dispatch.cgi +0 -10
  321. data/test/stub/rails_apps/2.2/empty/public/dispatch.fcgi +0 -24
  322. data/test/stub/rails_apps/2.2/empty/public/dispatch.rb +0 -10
  323. data/test/stub/rails_apps/2.2/empty/public/favicon.ico +0 -0
  324. data/test/stub/rails_apps/2.2/empty/public/images/rails.png +0 -0
  325. data/test/stub/rails_apps/2.2/empty/public/robots.txt +0 -5
  326. data/test/stub/rails_apps/2.2/empty/public/stylesheets/.gitignore +0 -0
  327. data/test/stub/rails_apps/2.2/empty/script/about +0 -4
  328. data/test/stub/rails_apps/2.2/empty/script/console +0 -3
  329. data/test/stub/rails_apps/2.2/empty/script/destroy +0 -3
  330. data/test/stub/rails_apps/2.2/empty/script/generate +0 -3
  331. data/test/stub/rails_apps/2.2/empty/script/performance/benchmarker +0 -3
  332. data/test/stub/rails_apps/2.2/empty/script/performance/profiler +0 -3
  333. data/test/stub/rails_apps/2.2/empty/script/performance/request +0 -3
  334. data/test/stub/rails_apps/2.2/empty/script/plugin +0 -3
  335. data/test/stub/rails_apps/2.2/empty/script/process/inspector +0 -3
  336. data/test/stub/rails_apps/2.2/empty/script/process/reaper +0 -3
  337. data/test/stub/rails_apps/2.2/empty/script/process/spawner +0 -3
  338. data/test/stub/rails_apps/2.2/empty/script/runner +0 -3
  339. data/test/stub/rails_apps/2.2/empty/script/server +0 -3
  340. data/test/stub/rails_apps/2.2/empty/test/performance/browsing_test.rb +0 -9
  341. data/test/stub/rails_apps/2.2/empty/test/test_helper.rb +0 -38
  342. data/test/stub/rails_apps/2.3/empty/.gitignore +0 -3
  343. data/test/stub/rails_apps/2.3/empty/Rakefile +0 -10
  344. data/test/stub/rails_apps/2.3/empty/app/controllers/application_controller.rb +0 -10
  345. data/test/stub/rails_apps/2.3/empty/app/helpers/application_helper.rb +0 -3
  346. data/test/stub/rails_apps/2.3/empty/app/models/.gitignore +0 -0
  347. data/test/stub/rails_apps/2.3/empty/config/boot.rb +0 -110
  348. data/test/stub/rails_apps/2.3/empty/config/database.yml +0 -31
  349. data/test/stub/rails_apps/2.3/empty/config/environment.rb +0 -41
  350. data/test/stub/rails_apps/2.3/empty/config/environments/development.rb +0 -17
  351. data/test/stub/rails_apps/2.3/empty/config/environments/production.rb +0 -28
  352. data/test/stub/rails_apps/2.3/empty/config/environments/staging.rb +0 -28
  353. data/test/stub/rails_apps/2.3/empty/config/environments/test.rb +0 -28
  354. data/test/stub/rails_apps/2.3/empty/config/initializers/backtrace_silencers.rb +0 -7
  355. data/test/stub/rails_apps/2.3/empty/config/initializers/inflections.rb +0 -10
  356. data/test/stub/rails_apps/2.3/empty/config/initializers/mime_types.rb +0 -5
  357. data/test/stub/rails_apps/2.3/empty/config/initializers/new_rails_defaults.rb +0 -21
  358. data/test/stub/rails_apps/2.3/empty/config/initializers/session_store.rb +0 -15
  359. data/test/stub/rails_apps/2.3/empty/config/locales/en.yml +0 -5
  360. data/test/stub/rails_apps/2.3/empty/config/routes.rb +0 -43
  361. data/test/stub/rails_apps/2.3/empty/db/.gitignore +0 -0
  362. data/test/stub/rails_apps/2.3/empty/db/seeds.rb +0 -7
  363. data/test/stub/rails_apps/2.3/empty/doc/README_FOR_APP +0 -2
  364. data/test/stub/rails_apps/2.3/empty/public/404.html +0 -30
  365. data/test/stub/rails_apps/2.3/empty/public/422.html +0 -30
  366. data/test/stub/rails_apps/2.3/empty/public/500.html +0 -30
  367. data/test/stub/rails_apps/2.3/empty/public/favicon.ico +0 -0
  368. data/test/stub/rails_apps/2.3/empty/public/images/rails.png +0 -0
  369. data/test/stub/rails_apps/2.3/empty/public/robots.txt +0 -5
  370. data/test/stub/rails_apps/2.3/empty/public/stylesheets/.gitignore +0 -0
  371. data/test/stub/rails_apps/2.3/empty/script/about +0 -4
  372. data/test/stub/rails_apps/2.3/empty/script/console +0 -3
  373. data/test/stub/rails_apps/2.3/empty/script/dbconsole +0 -3
  374. data/test/stub/rails_apps/2.3/empty/script/destroy +0 -3
  375. data/test/stub/rails_apps/2.3/empty/script/generate +0 -3
  376. data/test/stub/rails_apps/2.3/empty/script/performance/benchmarker +0 -3
  377. data/test/stub/rails_apps/2.3/empty/script/performance/profiler +0 -3
  378. data/test/stub/rails_apps/2.3/empty/script/plugin +0 -3
  379. data/test/stub/rails_apps/2.3/empty/script/runner +0 -3
  380. data/test/stub/rails_apps/2.3/empty/script/server +0 -3
  381. data/test/stub/rails_apps/2.3/empty/test/performance/browsing_test.rb +0 -9
  382. data/test/stub/rails_apps/2.3/empty/test/test_helper.rb +0 -38
  383. data/test/stub/rails_apps/2.3/mycook/Rakefile +0 -10
  384. data/test/stub/rails_apps/2.3/mycook/app/helpers/application_helper.rb +0 -3
  385. data/test/stub/rails_apps/2.3/mycook/config/environments/development.rb +0 -18
  386. data/test/stub/rails_apps/2.3/mycook/config/initializers/inflections.rb +0 -10
  387. data/test/stub/rails_apps/2.3/mycook/config/initializers/mime_types.rb +0 -5
  388. data/test/stub/rails_apps/2.3/mycook/public/404.html +0 -30
  389. data/test/stub/rails_apps/2.3/mycook/public/422.html +0 -30
  390. data/test/stub/rails_apps/2.3/mycook/public/500.html +0 -30
  391. data/test/stub/rails_apps/2.3/mycook/public/favicon.ico +0 -0
  392. data/test/stub/rails_apps/2.3/mycook/public/images/rails.png +0 -0
  393. data/test/stub/rails_apps/2.3/mycook/public/robots.txt +0 -5
  394. data/test/stub/rails_apps/2.3/mycook/public/uploads/.gitignore +0 -0
  395. data/test/stub/rails_apps/2.3/mycook/script/about +0 -3
  396. data/test/stub/rails_apps/2.3/mycook/script/console +0 -3
  397. data/test/stub/rails_apps/2.3/mycook/script/dbconsole +0 -3
  398. data/test/stub/rails_apps/2.3/mycook/script/destroy +0 -3
  399. data/test/stub/rails_apps/2.3/mycook/script/generate +0 -3
  400. data/test/stub/rails_apps/2.3/mycook/script/performance/benchmarker +0 -3
  401. data/test/stub/rails_apps/2.3/mycook/script/performance/profiler +0 -3
  402. data/test/stub/rails_apps/2.3/mycook/script/performance/request +0 -3
  403. data/test/stub/rails_apps/2.3/mycook/script/plugin +0 -3
  404. data/test/stub/rails_apps/2.3/mycook/script/process/inspector +0 -3
  405. data/test/stub/rails_apps/2.3/mycook/script/process/reaper +0 -3
  406. data/test/stub/rails_apps/2.3/mycook/script/process/spawner +0 -3
  407. data/test/stub/rails_apps/2.3/mycook/script/runner +0 -3
  408. data/test/stub/rails_apps/2.3/mycook/script/server +0 -3
  409. data/test/stub/wsgi/public/wsgi-snake.jpg +0 -0
data.tar.gz.asc CHANGED
@@ -2,11 +2,11 @@
2
2
  Version: GnuPG/MacGPG2 v2.0.17 (Darwin)
3
3
  Comment: GPGTools - http://gpgtools.org
4
4
 
5
- iQEcBAABAgAGBQJSwdn6AAoJECrHRaUKISqMAv4H/iti9mO5AKDQjhzkjIACLUzI
6
- 1eKK+17FK8AUKf6KblJCVznxuhR4yHpxnmxZ2twm9M6VJEKygTELiT+3Lb/FZmVA
7
- 1evpYzx9I5nxic/604o0GmObGiXrGjdVC+o77l9AX8tZtVGv0+pnSe0WlpI1nqgC
8
- F4SJVrctf14NcGiIVPPwdzeSM/goDQOJe/T4CsXdQyaXiQOzgkNiJoTd+zD3f0Gl
9
- W/SuPNHZqhUuZH3T9FMnjzzvhN0iPdLuWtl8LzlczoQrPjMqDAmh/hMSC4lHaBFd
10
- y5T/7qrWgVtoqPBNz9MU/84hDSR2M5Hx8x3muo7+LeMyIeRa0EGkVHbcyrKa8Hs=
11
- =kfV3
5
+ iQEcBAABAgAGBQJSxKiOAAoJECrHRaUKISqMerYH/iVcRRuAKssMiGFLbLIk3UwW
6
+ CXa/+ccArp4JBe6Zzo1SWh41LtE6WDO3seaFje7N1oSsaU7FVhEHLp7yFWHrLF0V
7
+ CgT0yi2gKcig57L7r4hkT5SP0O1vrmPXlkmSDbRgd/ZkrMmjU75OusNUWimXFSVe
8
+ mlBAPhk6ysJKsmBFr4dfhWFfO6NwXLE7WxniISBQUK5oEfWW8jcPN6+/zMUepkhj
9
+ AAxbkOV0qA+QIXCH3h8XBiG6piADmIJYLo2P17tV9RnJY6auoix1lBX/qyYTJWPd
10
+ 33wk4zNBol06CCk1CCr1qvEoK8F9sO4yVUc1yVe30N80NNWvLzaVCMcv8gNxjmA=
11
+ =WFaL
12
12
  -----END PGP SIGNATURE-----
data/NEWS CHANGED
@@ -1,3 +1,34 @@
1
+ Release 4.0.31
2
+ --------------
3
+
4
+ * Introduced a new tool: `passenger-config restart-app`. With this command you
5
+ can initiate an application restart without touching restart.txt.
6
+ Unlike touching restart.txt, this tool initiates the restart immediately
7
+ instead of on the next request.
8
+ * Fixed some problems in process spawning and request handling.
9
+ * Fixed some problems with the handling of HTTP chunked transfer encoding
10
+ bodies. These problems only occurred in Ruby.
11
+ * Fixed the HelperAgent, upon shutdown, not correctly waiting 5 seconds until
12
+ all clients have disconnected. Fixes issue #884.
13
+ * Fixed compilation problems on FreeBSD.
14
+ * Fixed some C++ strict aliasing problems.
15
+ * Fixed some problems with spawning applications that print messages without
16
+ newline during startup. Fixes issue #1039.
17
+ * Fixed potential hangs on JRuby when Ctrl-C is used to shutdown the server.
18
+ Fixes issue #1035.
19
+ * When Phusion Passenger is installed through the Debian package,
20
+ passenger-install-apache2-module now checks whether the Apache
21
+ module package (libapache2-mod-passenger) is properly installed,
22
+ and installs it using apt-get if it's not installed. Fixes
23
+ issue #1031.
24
+ * The `passenger-status --show=xml` command no longer prints the non-XML
25
+ preamble, such as the version number and the time. Fixes issue #1037.
26
+ * The Ruby native extension check whether it's loaded against the right Ruby
27
+ version, to prevent problems when people upgrade Ruby without recompiling
28
+ their native extensions.
29
+ * Various other minor Debian packaging improvements.
30
+
31
+
1
32
  Release 4.0.30
2
33
  --------------
3
34
 
@@ -22,15 +22,15 @@
22
22
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
23
  # THE SOFTWARE.
24
24
 
25
- ## Magic comment: set locations.ini ##
26
-
25
+ ## Magic comment: begin bootstrap ##
27
26
  source_root = File.expand_path("..", File.dirname(__FILE__))
28
27
  $LOAD_PATH.unshift("#{source_root}/lib")
28
+ require 'rubygems' rescue nil
29
29
  require 'phusion_passenger'
30
- PhusionPassenger.locate_directories
30
+ ## Magic comment: end bootstrap ##
31
31
 
32
- require 'rubygems' rescue nil
33
- require 'phusion_passenger/standalone/main'
32
+ PhusionPassenger.locate_directories
33
+ PhusionPassenger.require_passenger_lib 'standalone/main'
34
34
 
35
35
  STDOUT.sync = STDERR.sync = true
36
36
  PhusionPassenger::Standalone::Main.run!(ARGV)
@@ -22,133 +22,13 @@
22
22
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
23
  # THE SOFTWARE.
24
24
 
25
- ## Magic comment: set locations.ini ##
26
-
25
+ ## Magic comment: begin bootstrap ##
27
26
  source_root = File.expand_path("..", File.dirname(__FILE__))
28
27
  $LOAD_PATH.unshift("#{source_root}/lib")
28
+ require 'rubygems' rescue nil
29
29
  require 'phusion_passenger'
30
- PhusionPassenger.locate_directories
31
-
32
- require 'phusion_passenger/platform_info'
33
- require 'phusion_passenger/platform_info/compiler'
34
-
35
- def help
36
- puts "Tool for showing Passenger configuration information."
37
- puts "Usage: passenger-config <OPTION>"
38
- puts
39
- puts "Options:"
40
- puts " --root Show Phusion Passenger's root directory."
41
- puts " --includedir Show the Nginx runtime library headers directory."
42
- puts " --nginx-addon-dir Show the Phusion Passenger Nginx addon directory."
43
- puts " --nginx-libs Show Nginx runtime library flags."
44
- puts " --compiled Check whether runtime libraries are compiled."
45
- puts " --natively-packaged Check whether Phusion Passenger is natively packged."
46
- puts " --installed-from-release-package Check whether this installation came from an official release package."
47
- puts " --make-locations-ini Generate a locations.ini based on the current install paths."
48
- puts " --detect-apache2 Autodetect Apache installations."
49
- puts " --ruby-command Print the correct command for invoking the Ruby interpreter."
50
- puts " --ruby-libdir Show Phusion Passenger's Ruby library directory."
51
- puts " --rubyext-compat-id Print the Ruby extension binary compatibility ID."
52
- puts " --cxx-compat-id Print the C++ binary compatibility ID."
53
- puts " --version Show version number."
54
- end
30
+ ## Magic comment: end bootstrap ##
55
31
 
56
- def common_library
57
- require 'phusion_passenger/common_library'
58
- return COMMON_LIBRARY.
59
- only(*NGINX_LIBS_SELECTOR).
60
- set_output_dir("#{PhusionPassenger.lib_dir}/common/libpassenger_common")
61
- end
62
-
63
- case ARGV[0]
64
- when "--root"
65
- puts PhusionPassenger.source_root
66
- when "--includedir"
67
- puts PhusionPassenger.include_dir
68
- when "--nginx-addon-dir"
69
- puts PhusionPassenger.nginx_module_source_dir
70
- when "--nginx-libs"
71
- puts "#{common_library.link_objects_as_string} #{PhusionPassenger.lib_dir}/common/libboost_oxt.a"
72
- when "--compiled"
73
- common_library.link_objects.each do |filename|
74
- if !File.exist?(filename)
75
- exit 1
76
- end
77
- end
78
- if File.exist?("#{PhusionPassenger.lib_dir}/common/libboost_oxt.a")
79
- exit 0
80
- else
81
- exit 1
82
- end
83
- when "--natively-packaged"
84
- if PhusionPassenger.natively_packaged?
85
- exit 0
86
- else
87
- exit 1
88
- end
89
- when "--installed-from-release-package"
90
- if PhusionPassenger.installed_from_release_package?
91
- exit 0
92
- else
93
- exit 1
94
- end
95
- when "--make-locations-ini"
96
- puts "[locations]"
97
- puts "natively_packaged=true"
98
- PhusionPassenger::REQUIRED_LOCATIONS_INI_FIELDS.each do |field|
99
- puts "#{field}=#{PhusionPassenger.send(field)}"
100
- end
101
- when "--detect-apache2"
102
- require 'phusion_passenger/platform_info/apache_detector'
103
- detector = PhusionPassenger::PlatformInfo::ApacheDetector.new(STDOUT)
104
- begin
105
- detector.detect_all
106
- detector.report
107
- ensure
108
- detector.finish
109
- end
110
- when "--ruby-command"
111
- require 'phusion_passenger/platform_info/ruby'
112
- ruby = PhusionPassenger::PlatformInfo.ruby_command
113
- puts "passenger-config was invoked through the following Ruby interpreter:"
114
- puts " Command: #{ruby}"
115
- STDOUT.write " Version: "
116
- STDOUT.flush
117
- system("/bin/sh -c '#{ruby} -v'")
118
- puts " To use in Apache: PassengerRuby #{ruby}"
119
- puts " To use in Nginx : passenger_ruby #{ruby}"
120
- puts " To use with Standalone: #{ruby} #{PhusionPassenger.bin_dir}/passenger start"
121
- puts
122
-
123
- ruby = PhusionPassenger::PlatformInfo.find_command('ruby')
124
- if ruby && !ruby.include?("rvm/rubies/")
125
- # If this is an RVM Ruby executable then we don't show it. We want people to
126
- # use the RVM wrapper scripts only.
127
- puts "The following Ruby interpreter was found first in $PATH:"
128
- puts " Command: #{ruby}"
129
- STDOUT.write " Version: "
130
- STDOUT.flush
131
- system("/bin/sh -c '#{ruby} -v'")
132
- puts " To use in Apache: PassengerRuby #{ruby}"
133
- puts " To use in Nginx : passenger_ruby #{ruby}"
134
- puts " To use with Standalone: #{ruby} #{PhusionPassenger.bin_dir}/passenger start"
135
- elsif !ruby.include?("rvm/rubies/")
136
- puts "No Ruby interpreter found in $PATH."
137
- end
138
- puts
139
- puts "## Notes for RVM users"
140
- puts "Do you want to know which command to use for a different Ruby interpreter? 'rvm use' that Ruby interpreter, then re-run 'passenger-config --ruby-command'."
141
- when "--ruby-libdir"
142
- puts PhusionPassenger.ruby_libdir
143
- when "--rubyext-compat-id"
144
- require 'phusion_passenger/platform_info/binary_compatibility'
145
- puts PhusionPassenger::PlatformInfo.ruby_extension_binary_compatibility_id
146
- when "--cxx-compat-id"
147
- require 'phusion_passenger/platform_info/binary_compatibility'
148
- puts PhusionPassenger::PlatformInfo.cxx_binary_compatibility_id
149
- when "--version"
150
- puts PhusionPassenger::VERSION_STRING
151
- else
152
- help
153
- exit 1
154
- end
32
+ PhusionPassenger.locate_directories
33
+ PhusionPassenger.require_passenger_lib 'config'
34
+ PhusionPassenger::Config.run!(ARGV)
@@ -22,11 +22,13 @@
22
22
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
23
  # THE SOFTWARE.
24
24
 
25
- ## Magic comment: set locations.ini ##
26
-
27
- PASSENGER_ROOT = File.expand_path(File.dirname(__FILE__) + "/..")
28
- $LOAD_PATH.unshift("#{PASSENGER_ROOT}/lib")
25
+ ## Magic comment: begin bootstrap ##
26
+ source_root = File.expand_path("..", File.dirname(__FILE__))
27
+ $LOAD_PATH.unshift("#{source_root}/lib")
28
+ require 'rubygems' rescue nil
29
29
  require 'phusion_passenger'
30
+ ## Magic comment: end bootstrap ##
31
+
30
32
  PhusionPassenger.locate_directories
31
33
 
32
34
  # The Apache executable may be located in an 'sbin' folder. We add
@@ -37,14 +39,16 @@ ENV["PATH"] += ":/usr/sbin:/sbin:/usr/local/sbin"
37
39
 
38
40
  require 'optparse'
39
41
  require 'stringio'
40
- require 'phusion_passenger/constants'
41
- require 'phusion_passenger/platform_info/ruby'
42
- require 'phusion_passenger/platform_info/apache'
43
- require 'phusion_passenger/platform_info/apache_detector'
44
- require 'phusion_passenger/abstract_installer'
42
+ PhusionPassenger.require_passenger_lib 'constants'
43
+ PhusionPassenger.require_passenger_lib 'platform_info/ruby'
44
+ PhusionPassenger.require_passenger_lib 'platform_info/apache'
45
+ PhusionPassenger.require_passenger_lib 'platform_info/apache_detector'
46
+ PhusionPassenger.require_passenger_lib 'abstract_installer'
47
+ PhusionPassenger.require_passenger_lib 'utils/terminal_choice_menu'
45
48
 
46
49
  class Installer < PhusionPassenger::AbstractInstaller
47
50
  include PhusionPassenger
51
+ TerminalChoiceMenu = PhusionPassenger::Utils::TerminalChoiceMenu
48
52
 
49
53
  def dependencies
50
54
  specs = [
@@ -60,14 +64,18 @@ class Installer < PhusionPassenger::AbstractInstaller
60
64
  'libcurl-dev',
61
65
  'openssl-dev',
62
66
  'zlib-dev',
63
- PlatformInfo.passenger_needs_ruby_dev_header? ? 'ruby-dev' : nil,
64
- 'ruby-openssl',
65
- 'rubygems',
66
- 'rake',
67
- 'rack',
68
67
  'apache2',
69
- 'apache2-dev'
70
- ].compact
68
+ 'apache2-dev',
69
+ 'rake',
70
+ 'ruby-openssl',
71
+ 'rubygems'
72
+ ]
73
+ if @languages.include?("ruby")
74
+ if PlatformInfo.passenger_needs_ruby_dev_header?
75
+ ids << 'ruby-dev'
76
+ end
77
+ ids << 'rack'
78
+ end
71
79
  # Some broken servers don't have apr-config or apu-config installed.
72
80
  # Nevertheless, it is possible to compile Apache modules if Apache
73
81
  # was configured with --included-apr. So here we check whether
@@ -92,14 +100,18 @@ class Installer < PhusionPassenger::AbstractInstaller
92
100
 
93
101
  def run_steps
94
102
  if PhusionPassenger.natively_packaged?
95
- check_dependencies || exit(1)
96
- show_apache2_config_snippets
97
- show_deployment_example
103
+ if apache_module_available?
104
+ notify_apache_module_installed
105
+ show_deployment_example
106
+ else
107
+ install_apache_module_from_native_package || exit(1)
108
+ end
98
109
  exit
99
110
  end
100
111
 
101
- Dir.chdir(PASSENGER_ROOT)
112
+ Dir.chdir(PhusionPassenger.source_root)
102
113
  show_welcome_screen
114
+ query_interested_languages
103
115
  check_gem_install_permission_problems || exit(1)
104
116
  check_directory_accessible_by_web_server
105
117
  check_dependencies || exit(1)
@@ -123,6 +135,45 @@ private
123
135
  wait
124
136
  end
125
137
 
138
+ def query_interested_languages
139
+ menu = TerminalChoiceMenu.new(["Ruby", "Python", "Node.js", "Meteor"])
140
+ menu["Ruby"].checked = interesting_language?('ruby')
141
+ menu["Python"].checked = interesting_language?('python')
142
+ menu["Node.js"].checked = interesting_language?('nodejs', 'node')
143
+ menu["Meteor"].checked = interesting_language?('meteor')
144
+
145
+ new_screen
146
+ puts "<banner>Which languages are you interested in?</banner>"
147
+ puts
148
+ if interactive?
149
+ puts "Use <space> to select."
150
+ else
151
+ puts "Override selection with --languages."
152
+ end
153
+ puts
154
+
155
+ if interactive?
156
+ begin
157
+ menu.query
158
+ rescue Interrupt
159
+ raise Abort
160
+ end
161
+ else
162
+ menu.display_choices
163
+ puts
164
+ end
165
+
166
+ @languages = menu.selected_choices.map{ |x| x.downcase.gsub(/\./, '') }
167
+ end
168
+
169
+ def interesting_language?(name, command = nil)
170
+ if @languages
171
+ return @languages.include?(name)
172
+ else
173
+ return !!PlatformInfo.find_command(command || name)
174
+ end
175
+ end
176
+
126
177
  def check_whether_there_are_multiple_apache_installs
127
178
  new_screen
128
179
  puts '<banner>Sanity checking Apache installation...</banner>'
@@ -221,7 +272,7 @@ private
221
272
  puts
222
273
  line
223
274
  puts '<banner>Compiling and installing Apache 2 module...</banner>'
224
- puts "cd #{PASSENGER_ROOT}"
275
+ puts "cd #{PhusionPassenger.source_root}"
225
276
  if ENV['TRACE']
226
277
  puts "#{PlatformInfo.rake_command} --trace apache2:clean apache2 RELEASE=yes"
227
278
  return sh("#{PlatformInfo.rake_command} --trace apache2:clean apache2 RELEASE=yes")
@@ -252,13 +303,13 @@ private
252
303
  end
253
304
 
254
305
  def show_deployment_example
255
- puts
256
- line
306
+ new_screen
257
307
  render_template 'apache2/deployment_example',
258
308
  :users_guide_path => users_guide_path,
259
309
  :users_guide_url => users_guide_url,
260
310
  :phusion_website => PHUSION_WEBSITE,
261
- :passenger_website => PASSENGER_WEBSITE
311
+ :passenger_website => PASSENGER_WEBSITE,
312
+ :languages => @languages
262
313
  end
263
314
 
264
315
  def show_possible_solutions_for_compilation_and_installation_problems
@@ -268,6 +319,31 @@ private
268
319
  :users_guide_url => users_guide_url,
269
320
  :support_url => SUPPORT_URL
270
321
  end
322
+
323
+ def apache_module_available?
324
+ return File.exist?(PhusionPassenger.apache2_module_path)
325
+ end
326
+
327
+ def install_apache_module_from_native_package
328
+ case PhusionPassenger.native_packaging_method
329
+ when 'deb'
330
+ sh! "sudo apt-get update"
331
+ sh! "sudo apt-get install #{DEB_APACHE_MODULE_PACKAGE}"
332
+ return true
333
+ when 'rpm'
334
+ sh! "sudo yum install #{RPM_APACHE_MODULE_PACKAGE}"
335
+ return true
336
+ else
337
+ puts "<red>The #{PROGRAM_NAME} Apache module package is not installed.</red>"
338
+ puts "Please ask your operating system vendor how to install it."
339
+ return false
340
+ end
341
+ end
342
+
343
+ def notify_apache_module_installed
344
+ render_template 'apache2/notify_apache_module_installed'
345
+ wait
346
+ end
271
347
  end
272
348
 
273
349
  ORIG_ARGV = ARGV.dup
@@ -276,10 +352,11 @@ parser = OptionParser.new do |opts|
276
352
  opts.banner = "Usage: passenger-install-apache2-module [options]"
277
353
  opts.separator ""
278
354
 
355
+ indent = ' ' * 37
279
356
  opts.separator "Options:"
280
357
  opts.on("-a", "--auto", String, "Automatically build the Apache module,\n" <<
281
- "#{' ' * 37}without interactively asking for user\n" <<
282
- "#{' ' * 37}input.") do
358
+ "#{indent}without interactively asking for user\n" <<
359
+ "#{indent}input.") do
283
360
  options[:auto] = true
284
361
  end
285
362
  opts.on("--apxs2-path PATH", String, "Path to 'apxs2' command.") do |value|
@@ -288,6 +365,11 @@ parser = OptionParser.new do |opts|
288
365
  opts.on("--apr-config-path PATH", String, "Path to 'apr-config' command.") do |value|
289
366
  ENV['APR_CONFIG'] = value
290
367
  end
368
+ opts.on("--languages NAMES", "Comma-separated list of interested\n" <<
369
+ "#{indent}languages (e.g.\n" <<
370
+ "#{indent}'ruby,python,nodejs,meteor')") do |value|
371
+ options[:languages] = value.split(",")
372
+ end
291
373
  opts.on("--snippet", "Show just the Apache config snippet.") do
292
374
  options[:snippet] = true
293
375
  end
@@ -22,22 +22,26 @@
22
22
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
23
  # THE SOFTWARE.
24
24
 
25
- ## Magic comment: set locations.ini ##
26
-
25
+ ## Magic comment: begin bootstrap ##
27
26
  source_root = File.expand_path("..", File.dirname(__FILE__))
28
27
  $LOAD_PATH.unshift("#{source_root}/lib")
28
+ require 'rubygems' rescue nil
29
29
  require 'phusion_passenger'
30
+ ## Magic comment: end bootstrap ##
31
+
30
32
  PhusionPassenger.locate_directories
31
33
 
32
34
  require 'digest'
33
35
  require 'optparse'
34
36
  require 'fileutils'
35
- require 'phusion_passenger/platform_info/ruby'
36
- require 'phusion_passenger/abstract_installer'
37
- require 'phusion_passenger/utils/tmpio'
37
+ PhusionPassenger.require_passenger_lib 'platform_info/ruby'
38
+ PhusionPassenger.require_passenger_lib 'abstract_installer'
39
+ PhusionPassenger.require_passenger_lib 'utils/terminal_choice_menu'
40
+ PhusionPassenger.require_passenger_lib 'utils/tmpio'
38
41
 
39
42
  class Installer < PhusionPassenger::AbstractInstaller
40
43
  include PhusionPassenger
44
+ TerminalChoiceMenu = PhusionPassenger::Utils::TerminalChoiceMenu
41
45
 
42
46
  def dependencies
43
47
  specs = [
@@ -51,15 +55,19 @@ class Installer < PhusionPassenger::AbstractInstaller
51
55
  'cc',
52
56
  'c++',
53
57
  'download-tool',
54
- PlatformInfo.passenger_needs_ruby_dev_header? ? 'ruby-dev' : nil,
55
- 'ruby-openssl',
56
- 'rubygems',
57
- 'rake',
58
- 'rack',
59
58
  'libcurl-dev',
60
59
  'openssl-dev',
61
- 'zlib-dev'
62
- ].compact
60
+ 'zlib-dev',
61
+ 'rake',
62
+ 'ruby-openssl',
63
+ 'rubygems'
64
+ ]
65
+ if @languages.include?("ruby")
66
+ if PlatformInfo.passenger_needs_ruby_dev_header?
67
+ ids << 'ruby-dev'
68
+ end
69
+ ids << 'rack'
70
+ end
63
71
  return [specs, ids]
64
72
  end
65
73
 
@@ -75,8 +83,9 @@ class Installer < PhusionPassenger::AbstractInstaller
75
83
  # Make sure the configure script finds the correct
76
84
  # passenger-config command.
77
85
  ENV['PATH'] = PhusionPassenger.bin_dir + ":" + ENV['PATH']
78
-
86
+
79
87
  show_welcome_screen
88
+ query_interested_languages
80
89
  check_gem_install_permission_problems || exit(1)
81
90
  check_directory_accessible_by_web_server
82
91
  check_nginx_module_sources_available || exit(1)
@@ -148,6 +157,45 @@ private
148
157
  wait
149
158
  end
150
159
 
160
+ def query_interested_languages
161
+ menu = TerminalChoiceMenu.new(["Ruby", "Python", "Node.js", "Meteor"])
162
+ menu["Ruby"].checked = interesting_language?('ruby')
163
+ menu["Python"].checked = interesting_language?('python')
164
+ menu["Node.js"].checked = interesting_language?('nodejs', 'node')
165
+ menu["Meteor"].checked = interesting_language?('meteor')
166
+
167
+ new_screen
168
+ puts "<banner>Which languages are you interested in?</banner>"
169
+ puts
170
+ if interactive?
171
+ puts "Use <space> to select."
172
+ else
173
+ puts "Override selection with --languages."
174
+ end
175
+ puts
176
+
177
+ if interactive?
178
+ begin
179
+ menu.query
180
+ rescue Interrupt
181
+ raise Abort
182
+ end
183
+ else
184
+ menu.display_choices
185
+ puts
186
+ end
187
+
188
+ @languages = menu.selected_choices.map{ |x| x.downcase.gsub(/\./, '') }
189
+ end
190
+
191
+ def interesting_language?(name, command = nil)
192
+ if @languages
193
+ return @languages.include?(name)
194
+ else
195
+ return !!PlatformInfo.find_command(command || name)
196
+ end
197
+ end
198
+
151
199
  def check_nginx_module_sources_available
152
200
  if PhusionPassenger.natively_packaged? && !File.exist?(PhusionPassenger.nginx_module_source_dir)
153
201
  new_screen
@@ -494,36 +542,42 @@ parser = OptionParser.new do |opts|
494
542
  opts.banner = "Usage: passenger-install-nginx-module [options]"
495
543
  opts.separator ""
496
544
 
545
+ indent = ' ' * 37
497
546
  opts.separator "Options:"
498
547
  opts.on("--auto", "Automatically confirm 'Press ENTER to\n" <<
499
- "#{' ' * 37}continue' prompts.") do
548
+ "#{indent}continue' prompts.") do
500
549
  options[:auto] = true
501
550
  end
502
551
  opts.on("--prefix=DIR", String, "Use the given Nginx install prefix instead\n" <<
503
- "#{' ' * 37}of asking for it interactively.") do |dir|
552
+ "#{indent}of asking for it interactively.") do |dir|
504
553
  options[:prefix] = dir
505
554
  end
506
555
  opts.on("--auto-download", "Download and install Nginx automatically,\n" <<
507
- "#{' ' * 37}instead of asking interactively whether to\n" <<
508
- "#{' ' * 37}download+install or to use an existing\n" <<
509
- "#{' ' * 37}Nginx source directory.") do
556
+ "#{indent}instead of asking interactively whether to\n" <<
557
+ "#{indent}download+install or to use an existing\n" <<
558
+ "#{indent}Nginx source directory.") do
510
559
  options[:auto_download] = true
511
560
  end
512
561
  opts.on("--nginx-source-dir=DIR", String, "Compile and install Nginx using the given\n" <<
513
- "#{' ' * 37}Nginx source directory, instead of\n" <<
514
- "#{' ' * 37}interactively asking to download+install\n" <<
515
- "#{' ' * 37}or to use an existing Nginx source\n" <<
516
- "#{' ' * 37}directory. Conflicts with --auto-download.") do |dir|
562
+ "#{indent}Nginx source directory, instead of\n" <<
563
+ "#{indent}interactively asking to download+install\n" <<
564
+ "#{indent}or to use an existing Nginx source\n" <<
565
+ "#{indent}directory. Conflicts with --auto-download.") do |dir|
517
566
  options[:nginx_source_dir] = dir
518
567
  end
519
568
  opts.on("--extra-configure-flags=STRING", String, "Pass these extra flags to Nginx's\n" <<
520
- "#{' ' * 37}'configure' script, instead of asking for\n" <<
521
- "#{' ' * 37}it interactively. Specify 'none' if you\n" <<
522
- "#{' ' * 37}do not want to pass additional flags but do\n" <<
523
- "#{' ' * 37}not want this installer to ask\n" <<
524
- "#{' ' * 37}interactively either.") do |flags|
569
+ "#{indent}'configure' script, instead of asking for\n" <<
570
+ "#{indent}it interactively. Specify 'none' if you\n" <<
571
+ "#{indent}do not want to pass additional flags but do\n" <<
572
+ "#{indent}not want this installer to ask\n" <<
573
+ "#{indent}interactively either.") do |flags|
525
574
  options[:extra_configure_flags] = flags
526
575
  end
576
+ opts.on("--languages NAMES", "Comma-separated list of interested\n" <<
577
+ "#{indent}languages (e.g.\n" <<
578
+ "#{indent}'ruby,python,nodejs,meteor')") do |value|
579
+ options[:languages] = value.split(",")
580
+ end
527
581
  end
528
582
  begin
529
583
  parser.parse!