passenger 5.0.0.beta3 → 5.0.0.rc1

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 (218) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.asc +7 -7
  3. data.tar.gz.asc +7 -7
  4. data/.editorconfig +11 -5
  5. data/CHANGELOG +38 -0
  6. data/CONTRIBUTING.md +1 -4
  7. data/Gemfile +0 -1
  8. data/Gemfile.lock +0 -2
  9. data/Rakefile +33 -33
  10. data/bin/passenger +1 -1
  11. data/bin/passenger-config +1 -1
  12. data/bin/passenger-install-apache2-module +800 -800
  13. data/bin/passenger-install-nginx-module +592 -592
  14. data/bin/passenger-memory-stats +127 -127
  15. data/bin/passenger-status +216 -216
  16. data/build/agents.rb +127 -127
  17. data/build/apache2.rb +87 -87
  18. data/build/basics.rb +60 -60
  19. data/build/common_library.rb +165 -165
  20. data/build/cplusplus_support.rb +51 -51
  21. data/build/cxx_tests.rb +268 -268
  22. data/build/debian.rb +143 -143
  23. data/build/documentation.rb +58 -58
  24. data/build/integration_tests.rb +81 -81
  25. data/build/misc.rb +132 -132
  26. data/build/nginx.rb +20 -20
  27. data/build/node_tests.rb +7 -7
  28. data/build/oxt_tests.rb +14 -14
  29. data/build/packaging.rb +570 -570
  30. data/build/preprocessor.rb +260 -260
  31. data/build/rake_extensions.rb +71 -71
  32. data/build/ruby_extension.rb +29 -29
  33. data/build/ruby_tests.rb +6 -6
  34. data/build/test_basics.rb +37 -37
  35. data/debian.template/control.template +3 -5
  36. data/dev/copy_boost_headers +134 -134
  37. data/dev/install_scripts_bootstrap_code.rb +25 -25
  38. data/dev/list_tests +20 -20
  39. data/dev/ruby_server.rb +223 -223
  40. data/dev/runner +18 -18
  41. data/doc/ServerOptimizationGuide.txt.md +55 -2
  42. data/doc/Users guide Nginx.txt +0 -26
  43. data/doc/Users guide Standalone.txt +5 -1
  44. data/doc/users_guide_snippets/tips.txt +9 -0
  45. data/ext/common/ApplicationPool2/Group.h +23 -11
  46. data/ext/common/ApplicationPool2/Implementation.cpp +32 -7
  47. data/ext/common/ApplicationPool2/Pool.h +22 -17
  48. data/ext/common/ApplicationPool2/SmartSpawner.h +4 -1
  49. data/ext/common/ApplicationPool2/Spawner.h +1 -1
  50. data/ext/common/Constants.h +1 -1
  51. data/ext/common/agents/Base.cpp +35 -20
  52. data/ext/common/agents/HelperAgent/Main.cpp +8 -1
  53. data/ext/common/agents/HelperAgent/OptionParser.h +18 -4
  54. data/ext/common/agents/HelperAgent/RequestHandler.h +2 -83
  55. data/ext/common/agents/HelperAgent/RequestHandler/ForwardResponse.cpp +54 -1
  56. data/ext/common/agents/HelperAgent/RequestHandler/InitRequest.cpp +7 -4
  57. data/ext/common/agents/Main.cpp +1 -1
  58. data/ext/common/agents/Watchdog/Main.cpp +54 -19
  59. data/ext/nginx/Configuration.c +7 -0
  60. data/ext/nginx/ContentHandler.c +9 -1
  61. data/helper-scripts/backtrace-sanitizer.rb +106 -87
  62. data/helper-scripts/crash-watch.rb +32 -0
  63. data/helper-scripts/download_binaries/extconf.rb +38 -38
  64. data/helper-scripts/meteor-loader.rb +107 -107
  65. data/helper-scripts/prespawn +101 -101
  66. data/helper-scripts/rack-loader.rb +96 -96
  67. data/helper-scripts/rack-preloader.rb +137 -137
  68. data/lib/phusion_passenger.rb +292 -292
  69. data/lib/phusion_passenger/abstract_installer.rb +438 -438
  70. data/lib/phusion_passenger/active_support3_extensions/init.rb +168 -170
  71. data/lib/phusion_passenger/admin_tools.rb +20 -20
  72. data/lib/phusion_passenger/admin_tools/instance.rb +178 -178
  73. data/lib/phusion_passenger/admin_tools/instance_registry.rb +61 -61
  74. data/lib/phusion_passenger/admin_tools/memory_stats.rb +267 -267
  75. data/lib/phusion_passenger/apache2/config_options.rb +182 -182
  76. data/lib/phusion_passenger/common_library.rb +479 -485
  77. data/lib/phusion_passenger/config/about_command.rb +161 -161
  78. data/lib/phusion_passenger/config/admin_command_command.rb +129 -129
  79. data/lib/phusion_passenger/config/agent_compiler.rb +121 -121
  80. data/lib/phusion_passenger/config/build_native_support_command.rb +43 -43
  81. data/lib/phusion_passenger/config/command.rb +25 -25
  82. data/lib/phusion_passenger/config/compile_agent_command.rb +62 -62
  83. data/lib/phusion_passenger/config/compile_nginx_engine_command.rb +88 -73
  84. data/lib/phusion_passenger/config/detach_process_command.rb +72 -72
  85. data/lib/phusion_passenger/config/download_agent_command.rb +246 -227
  86. data/lib/phusion_passenger/config/download_nginx_engine_command.rb +245 -224
  87. data/lib/phusion_passenger/config/install_agent_command.rb +144 -132
  88. data/lib/phusion_passenger/config/install_standalone_runtime_command.rb +205 -185
  89. data/lib/phusion_passenger/config/installation_utils.rb +204 -204
  90. data/lib/phusion_passenger/config/list_instances_command.rb +64 -64
  91. data/lib/phusion_passenger/config/main.rb +152 -152
  92. data/lib/phusion_passenger/config/nginx_engine_compiler.rb +319 -300
  93. data/lib/phusion_passenger/config/reopen_logs_command.rb +67 -67
  94. data/lib/phusion_passenger/config/restart_app_command.rb +155 -155
  95. data/lib/phusion_passenger/config/system_metrics_command.rb +13 -13
  96. data/lib/phusion_passenger/config/utils.rb +95 -95
  97. data/lib/phusion_passenger/config/validate_install_command.rb +198 -198
  98. data/lib/phusion_passenger/console_text_template.rb +25 -25
  99. data/lib/phusion_passenger/constants.rb +90 -90
  100. data/lib/phusion_passenger/debug_logging.rb +106 -106
  101. data/lib/phusion_passenger/loader_shared_helpers.rb +447 -432
  102. data/lib/phusion_passenger/message_channel.rb +312 -312
  103. data/lib/phusion_passenger/message_client.rb +176 -176
  104. data/lib/phusion_passenger/native_support.rb +369 -369
  105. data/lib/phusion_passenger/nginx/config_options.rb +297 -297
  106. data/lib/phusion_passenger/packaging.rb +131 -131
  107. data/lib/phusion_passenger/platform_info.rb +360 -360
  108. data/lib/phusion_passenger/platform_info/apache.rb +767 -767
  109. data/lib/phusion_passenger/platform_info/apache_detector.rb +199 -199
  110. data/lib/phusion_passenger/platform_info/binary_compatibility.rb +107 -107
  111. data/lib/phusion_passenger/platform_info/compiler.rb +570 -570
  112. data/lib/phusion_passenger/platform_info/curl.rb +32 -32
  113. data/lib/phusion_passenger/platform_info/cxx_portability.rb +188 -188
  114. data/lib/phusion_passenger/platform_info/depcheck.rb +372 -372
  115. data/lib/phusion_passenger/platform_info/depcheck_specs/apache2.rb +109 -109
  116. data/lib/phusion_passenger/platform_info/depcheck_specs/compiler_toolchain.rb +4 -4
  117. data/lib/phusion_passenger/platform_info/depcheck_specs/gems.rb +10 -34
  118. data/lib/phusion_passenger/platform_info/depcheck_specs/libs.rb +101 -101
  119. data/lib/phusion_passenger/platform_info/depcheck_specs/ruby.rb +5 -5
  120. data/lib/phusion_passenger/platform_info/depcheck_specs/utilities.rb +13 -13
  121. data/lib/phusion_passenger/platform_info/linux.rb +55 -55
  122. data/lib/phusion_passenger/platform_info/operating_system.rb +149 -149
  123. data/lib/phusion_passenger/platform_info/ruby.rb +468 -448
  124. data/lib/phusion_passenger/platform_info/zlib.rb +9 -9
  125. data/lib/phusion_passenger/plugin.rb +66 -66
  126. data/lib/phusion_passenger/preloader_shared_helpers.rb +126 -126
  127. data/lib/phusion_passenger/public_api.rb +191 -191
  128. data/lib/phusion_passenger/rack/out_of_band_gc.rb +93 -94
  129. data/lib/phusion_passenger/rack/thread_handler_extension.rb +231 -227
  130. data/lib/phusion_passenger/request_handler.rb +567 -577
  131. data/lib/phusion_passenger/request_handler/thread_handler.rb +379 -381
  132. data/lib/phusion_passenger/ruby_core_enhancements.rb +86 -86
  133. data/lib/phusion_passenger/ruby_core_io_enhancements.rb +74 -74
  134. data/lib/phusion_passenger/simple_benchmarking.rb +25 -25
  135. data/lib/phusion_passenger/standalone/app_finder.rb +153 -150
  136. data/lib/phusion_passenger/standalone/command.rb +44 -40
  137. data/lib/phusion_passenger/standalone/config_utils.rb +53 -53
  138. data/lib/phusion_passenger/standalone/control_utils.rb +38 -59
  139. data/lib/phusion_passenger/standalone/main.rb +73 -73
  140. data/lib/phusion_passenger/standalone/start_command.rb +697 -685
  141. data/lib/phusion_passenger/standalone/start_command/builtin_engine.rb +193 -155
  142. data/lib/phusion_passenger/standalone/start_command/nginx_engine.rb +162 -133
  143. data/lib/phusion_passenger/standalone/status_command.rb +64 -64
  144. data/lib/phusion_passenger/standalone/stop_command.rb +72 -72
  145. data/lib/phusion_passenger/standalone/version_command.rb +9 -9
  146. data/lib/phusion_passenger/union_station/connection.rb +32 -32
  147. data/lib/phusion_passenger/union_station/core.rb +251 -251
  148. data/lib/phusion_passenger/union_station/transaction.rb +126 -126
  149. data/lib/phusion_passenger/utils.rb +199 -167
  150. data/lib/phusion_passenger/utils/ansi_colors.rb +128 -128
  151. data/lib/phusion_passenger/utils/download.rb +196 -196
  152. data/lib/phusion_passenger/utils/file_system_watcher.rb +158 -158
  153. data/lib/phusion_passenger/utils/hosts_file_parser.rb +101 -101
  154. data/lib/phusion_passenger/utils/lock.rb +31 -31
  155. data/lib/phusion_passenger/utils/native_support_utils.rb +31 -31
  156. data/lib/phusion_passenger/utils/progress_bar.rb +26 -26
  157. data/lib/phusion_passenger/utils/shellwords.rb +20 -20
  158. data/lib/phusion_passenger/utils/terminal_choice_menu.rb +206 -206
  159. data/lib/phusion_passenger/utils/unseekable_socket.rb +272 -272
  160. data/lib/phusion_passenger/vendor/crash_watch/app.rb +129 -0
  161. data/lib/phusion_passenger/vendor/crash_watch/gdb_controller.rb +341 -0
  162. data/lib/phusion_passenger/vendor/crash_watch/version.rb +24 -0
  163. data/lib/phusion_passenger/vendor/daemon_controller.rb +877 -0
  164. data/lib/phusion_passenger/vendor/daemon_controller/lock_file.rb +127 -0
  165. data/lib/phusion_passenger/vendor/daemon_controller/spawn.rb +26 -0
  166. data/lib/phusion_passenger/vendor/daemon_controller/version.rb +29 -0
  167. data/packaging/rpm/passenger_spec/passenger.spec.template +0 -1
  168. data/passenger.gemspec +0 -1
  169. data/resources/templates/config/nginx_engine_compiler/possible_solutions_for_download_and_extraction_problems.txt.erb +27 -0
  170. data/resources/templates/standalone/config.erb +19 -15
  171. data/test/integration_tests/apache2_tests.rb +566 -566
  172. data/test/integration_tests/downloaded_binaries_tests.rb +126 -125
  173. data/test/integration_tests/native_packaging_spec.rb +296 -296
  174. data/test/integration_tests/nginx_tests.rb +393 -393
  175. data/test/integration_tests/shared/example_webapp_tests.rb +282 -280
  176. data/test/integration_tests/source_packaging_test.rb +138 -138
  177. data/test/integration_tests/spec_helper.rb +5 -5
  178. data/test/integration_tests/standalone_tests.rb +367 -367
  179. data/test/ruby/debug_logging_spec.rb +133 -133
  180. data/test/ruby/message_channel_spec.rb +186 -186
  181. data/test/ruby/rack/loader_spec.rb +28 -28
  182. data/test/ruby/rack/preloader_spec.rb +34 -34
  183. data/test/ruby/rails3.0/loader_spec.rb +12 -12
  184. data/test/ruby/rails3.0/preloader_spec.rb +18 -18
  185. data/test/ruby/rails3.1/loader_spec.rb +12 -12
  186. data/test/ruby/rails3.1/preloader_spec.rb +18 -18
  187. data/test/ruby/rails3.2/loader_spec.rb +12 -12
  188. data/test/ruby/rails3.2/preloader_spec.rb +18 -18
  189. data/test/ruby/rails4.0/loader_spec.rb +12 -12
  190. data/test/ruby/rails4.0/preloader_spec.rb +18 -18
  191. data/test/ruby/rails4.1/loader_spec.rb +12 -12
  192. data/test/ruby/rails4.1/preloader_spec.rb +18 -18
  193. data/test/ruby/request_handler_spec.rb +730 -730
  194. data/test/ruby/shared/loader_sharedspec.rb +224 -224
  195. data/test/ruby/shared/rails/union_station_extensions_sharedspec.rb +327 -327
  196. data/test/ruby/shared/ruby_loader_sharedspec.rb +47 -47
  197. data/test/ruby/spec_helper.rb +65 -65
  198. data/test/ruby/standalone/runtime_installer_spec.rb +384 -384
  199. data/test/ruby/union_station_spec.rb +276 -276
  200. data/test/ruby/utils/file_system_watcher_spec.rb +220 -220
  201. data/test/ruby/utils/hosts_file_parser.rb +248 -248
  202. data/test/ruby/utils/tee_input_spec.rb +215 -215
  203. data/test/ruby/utils/unseekable_socket_spec.rb +57 -57
  204. data/test/ruby/utils_spec.rb +21 -21
  205. data/test/stub/rack/config.ru +87 -87
  206. data/test/stub/rack/library.rb +8 -8
  207. data/test/stub/rack/start.rb +30 -30
  208. data/test/support/apache2_controller.rb +191 -191
  209. data/test/support/nginx_controller.rb +90 -99
  210. data/test/support/placebo-preloader.rb +57 -57
  211. data/test/support/test_helper.rb +435 -435
  212. metadata +11 -21
  213. metadata.gz.asc +7 -7
  214. data/lib/phusion_passenger/standalone/command2.rb +0 -292
  215. data/lib/phusion_passenger/standalone/start2_command.rb +0 -799
  216. data/resources/templates/standalone/download_tool_missing.txt.erb +0 -18
  217. data/resources/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +0 -17
  218. data/resources/templates/standalone/run_installer_as_root.txt.erb +0 -8
@@ -1,5 +1,5 @@
1
1
  # Phusion Passenger - https://www.phusionpassenger.com/
2
- # Copyright (c) 2010-2014 Phusion
2
+ # Copyright (c) 2010-2015 Phusion
3
3
  #
4
4
  # "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
5
5
  #
@@ -22,48 +22,52 @@
22
22
  # THE SOFTWARE.
23
23
 
24
24
  module PhusionPassenger
25
- module Standalone
25
+ module Standalone
26
26
 
27
- class Command
28
- def initialize(argv)
29
- @argv = argv.dup
30
- @options = self.class.create_default_options
31
- end
27
+ class Command
28
+ def initialize(argv)
29
+ @argv = argv.dup
30
+ @options = self.class.create_default_options
31
+ end
32
32
 
33
- private
34
- def self.create_default_options
35
- return {}
36
- end
33
+ private
34
+ def self.create_default_options
35
+ return {}
36
+ end
37
37
 
38
- def parse_options
39
- load_and_merge_default_options(@options)
40
- @parser = self.class.create_option_parser(@options)
41
- begin
42
- @original_argv = @argv.dup
43
- @parser.parse!(@argv)
44
- rescue OptionParser::ParseError => e
45
- STDERR.puts "*** ERROR: #{e}"
46
- abort @parser.to_s
47
- end
48
- if @options[:help]
49
- puts @parser
50
- exit
51
- end
52
- end
38
+ def parse_options
39
+ load_and_merge_global_options(@options)
40
+ @parsed_options = {}
41
+ @parser = self.class.create_option_parser(@parsed_options)
42
+ begin
43
+ @original_argv = @argv.dup
44
+ @parser.parse!(@argv)
45
+ @options.merge!(@parsed_options)
46
+ rescue OptionParser::ParseError => e
47
+ STDERR.puts "*** ERROR: #{e}"
48
+ abort @parser.to_s
49
+ end
50
+ if @options[:help]
51
+ puts @parser
52
+ exit
53
+ end
54
+ end
53
55
 
54
- def load_and_merge_default_options(options)
55
- path = ConfigUtils.global_config_file_path
56
- if File.exist?(path)
57
- begin
58
- global_options = ConfigUtils.load_config_file(path)
59
- rescue ConfigUtils::ConfigLoadError => e
60
- STDERR.puts "*** Warning: #{e.message}"
61
- return
62
- end
63
- @options.merge!(global_options)
64
- end
65
- end
66
- end
56
+ def load_and_merge_global_options(options)
57
+ path = ConfigUtils.global_config_file_path
58
+ if File.exist?(path)
59
+ begin
60
+ @global_options = ConfigUtils.load_config_file(path)
61
+ rescue ConfigUtils::ConfigLoadError => e
62
+ STDERR.puts "*** Warning: #{e.message}"
63
+ return
64
+ end
65
+ @options.merge!(@global_options)
66
+ else
67
+ @global_options = {}
68
+ end
69
+ end
70
+ end
67
71
 
68
- end # module STandalone
72
+ end # module Standalone
69
73
  end # module PhusionPassenger
@@ -22,66 +22,66 @@
22
22
  # THE SOFTWARE.
23
23
 
24
24
  module PhusionPassenger
25
- module Standalone
25
+ module Standalone
26
26
 
27
- module ConfigUtils
28
- extend self # Make methods available as class methods.
27
+ module ConfigUtils
28
+ extend self # Make methods available as class methods.
29
29
 
30
- def self.included(klass)
31
- # When included into another class, make sure that Utils
32
- # methods are made private.
33
- public_instance_methods(false).each do |method_name|
34
- klass.send(:private, method_name)
35
- end
36
- end
30
+ def self.included(klass)
31
+ # When included into another class, make sure that Utils
32
+ # methods are made private.
33
+ public_instance_methods(false).each do |method_name|
34
+ klass.send(:private, method_name)
35
+ end
36
+ end
37
37
 
38
- class ConfigLoadError < StandardError
39
- end
38
+ class ConfigLoadError < StandardError
39
+ end
40
40
 
41
- def global_config_file_path
42
- @global_config_file_path ||= File.join(PhusionPassenger.home_dir,
43
- USER_NAMESPACE_DIRNAME, "standalone", "config.json")
44
- end
41
+ def global_config_file_path
42
+ @global_config_file_path ||= File.join(PhusionPassenger.home_dir,
43
+ USER_NAMESPACE_DIRNAME, "standalone", "config.json")
44
+ end
45
45
 
46
- def load_local_config_file!(app_dir, options)
47
- config_file = File.join(app_dir, "Passengerfile.json")
48
- if !File.exist?(config_file)
49
- config_file = File.join(app_dir, "passenger-standalone.json")
50
- end
51
- if File.exist?(config_file)
52
- local_options = load_config_file(config_file)
53
- options.merge!(local_options)
54
- end
55
- end
46
+ def load_local_config_file!(app_dir, options)
47
+ config_file = File.join(app_dir, "Passengerfile.json")
48
+ if !File.exist?(config_file)
49
+ config_file = File.join(app_dir, "passenger-standalone.json")
50
+ end
51
+ if File.exist?(config_file)
52
+ local_options = load_config_file(config_file)
53
+ options.merge!(local_options)
54
+ end
55
+ end
56
56
 
57
- def load_config_file(filename)
58
- if !defined?(PhusionPassenger::Utils::JSON)
59
- PhusionPassenger.require_passenger_lib 'utils/json'
60
- end
61
- begin
62
- data = File.open(filename, "r:utf-8") do |f|
63
- f.read
64
- end
65
- rescue SystemCallError => e
66
- raise ConfigLoadError, "cannot load config file #{filename} (#{e})"
67
- end
57
+ def load_config_file(filename)
58
+ if !defined?(PhusionPassenger::Utils::JSON)
59
+ PhusionPassenger.require_passenger_lib 'utils/json'
60
+ end
61
+ begin
62
+ data = File.open(filename, "r:utf-8") do |f|
63
+ f.read
64
+ end
65
+ rescue SystemCallError => e
66
+ raise ConfigLoadError, "cannot load config file #{filename} (#{e})"
67
+ end
68
68
 
69
- begin
70
- config = PhusionPassenger::Utils::JSON.parse(data)
71
- rescue => e
72
- raise ConfigLoadError, "cannot parse config file #{filename} (#{e})"
73
- end
74
- if !config.is_a?(Hash)
75
- raise ConfigLoadError, "cannot parse config file #{filename} (it does not contain an object)"
76
- end
69
+ begin
70
+ config = PhusionPassenger::Utils::JSON.parse(data)
71
+ rescue => e
72
+ raise ConfigLoadError, "cannot parse config file #{filename} (#{e})"
73
+ end
74
+ if !config.is_a?(Hash)
75
+ raise ConfigLoadError, "cannot parse config file #{filename} (it does not contain an object)"
76
+ end
77
77
 
78
- result = {}
79
- config.each_pair do |key, val|
80
- result[key.to_sym] = val
81
- end
82
- return result
83
- end
84
- end
78
+ result = {}
79
+ config.each_pair do |key, val|
80
+ result[key.to_sym] = val
81
+ end
82
+ return result
83
+ end
84
+ end
85
85
 
86
- end # module Standalone
86
+ end # module Standalone
87
87
  end # module PhusionPassenger
@@ -1,5 +1,5 @@
1
1
  # Phusion Passenger - https://www.phusionpassenger.com/
2
- # Copyright (c) 2010-2014 Phusion
2
+ # Copyright (c) 2010-2015 Phusion
3
3
  #
4
4
  # "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
5
5
  #
@@ -22,67 +22,46 @@
22
22
  # THE SOFTWARE.
23
23
 
24
24
  module PhusionPassenger
25
- module Standalone
25
+ module Standalone
26
26
 
27
- module ControlUtils
28
- extend self # Make methods available as class methods.
27
+ module ControlUtils
28
+ extend self # Make methods available as class methods.
29
29
 
30
- def self.included(klass)
31
- # When included into another class, make sure that Utils
32
- # methods are made private.
33
- public_instance_methods(false).each do |method_name|
34
- klass.send(:private, method_name)
35
- end
36
- end
30
+ def self.included(klass)
31
+ # When included into another class, make sure that Utils
32
+ # methods are made private.
33
+ public_instance_methods(false).each do |method_name|
34
+ klass.send(:private, method_name)
35
+ end
36
+ end
37
37
 
38
- def require_daemon_controller
39
- return if defined?(DaemonController)
40
- begin
41
- require 'daemon_controller'
42
- begin
43
- require 'daemon_controller/version'
44
- too_old = DaemonController::VERSION_STRING < '1.1.0'
45
- rescue LoadError
46
- too_old = true
47
- end
48
- if too_old
49
- PhusionPassenger.require_passenger_lib 'platform_info/ruby'
50
- gem_command = PlatformInfo.gem_command(:sudo => true)
51
- abort "Your version of daemon_controller is too old. " +
52
- "You must install 1.1.0 or later. Please upgrade:\n\n" +
53
- " #{gem_command} uninstall FooBarWidget-daemon_controller\n" +
54
- " #{gem_command} install daemon_controller"
55
- end
56
- rescue LoadError
57
- PhusionPassenger.require_passenger_lib 'platform_info/ruby'
58
- gem_command = PlatformInfo.gem_command(:sudo => true)
59
- abort "Please install daemon_controller first:\n\n" +
60
- " #{gem_command} install daemon_controller"
61
- end
62
- end
38
+ def require_daemon_controller
39
+ return if defined?(PhusionPassenger::DaemonController)
40
+ PhusionPassenger.require_passenger_lib 'vendor/daemon_controller'
41
+ end
63
42
 
64
- def warn_pid_file_not_found(options)
65
- if options[:pid_file]
66
- STDERR.puts "According to the PID file '#{options[:pid_file]}',"
67
- STDERR.puts "#{PROGRAM_NAME} Standalone doesn't seem to be running."
68
- else
69
- STDERR.puts "#{PROGRAM_NAME} Standalone doesn't seem to be running, " +
70
- "because its PID file"
71
- STDERR.puts "could not be found."
72
- end
73
- STDERR.puts
74
- STDERR.puts "If you know that #{PROGRAM_NAME} Standalone *is* running then one of these"
75
- STDERR.puts "might be the cause of this error:"
76
- STDERR.puts
77
- STDERR.puts " * The #{PROGRAM_NAME} Standalone instance that you want to stop isn't running"
78
- STDERR.puts " on port #{options[:port]}, but on another port. If this is the case then you"
79
- STDERR.puts " should specify the right port with --port."
80
- STDERR.puts " If the instance is listening on a Unix socket file instead of a TCP port,"
81
- STDERR.puts " then please specify the PID file's filename with --pid-file."
82
- STDERR.puts " * The instance that you want to stop has stored its PID file in a non-standard"
83
- STDERR.puts " location. In this case please specify the right PID file with --pid-file."
84
- end
85
- end
43
+ def warn_pid_file_not_found(options)
44
+ if options[:pid_file]
45
+ STDERR.puts "According to the PID file '#{options[:pid_file]}',"
46
+ STDERR.puts "#{PROGRAM_NAME} Standalone doesn't seem to be running."
47
+ else
48
+ STDERR.puts "#{PROGRAM_NAME} Standalone doesn't seem to be running, " +
49
+ "because its PID file"
50
+ STDERR.puts "could not be found."
51
+ end
52
+ STDERR.puts
53
+ STDERR.puts "If you know that #{PROGRAM_NAME} Standalone *is* running then one of these"
54
+ STDERR.puts "might be the cause of this error:"
55
+ STDERR.puts
56
+ STDERR.puts " * The #{PROGRAM_NAME} Standalone instance that you want to stop isn't running"
57
+ STDERR.puts " on port #{options[:port]}, but on another port. If this is the case then you"
58
+ STDERR.puts " should specify the right port with --port."
59
+ STDERR.puts " If the instance is listening on a Unix socket file instead of a TCP port,"
60
+ STDERR.puts " then please specify the PID file's filename with --pid-file."
61
+ STDERR.puts " * The instance that you want to stop has stored its PID file in a non-standard"
62
+ STDERR.puts " location. In this case please specify the right PID file with --pid-file."
63
+ end
64
+ end
86
65
 
87
- end
66
+ end
88
67
  end
@@ -25,89 +25,89 @@ PhusionPassenger.require_passenger_lib 'constants'
25
25
 
26
26
  module PhusionPassenger
27
27
 
28
- # Core of the `passenger` command (Passenger Standalone). Dispatches a subcommand to a specific class.
29
- module Standalone
30
- KNOWN_COMMANDS = [
31
- ["start", "StartCommand"],
32
- ["stop", "StopCommand"],
33
- ["status", "StatusCommand"],
34
- ["version", "VersionCommand"]
35
- ]
28
+ # Core of the `passenger` command (Passenger Standalone). Dispatches a subcommand to a specific class.
29
+ module Standalone
30
+ KNOWN_COMMANDS = [
31
+ ["start", "StartCommand"],
32
+ ["stop", "StopCommand"],
33
+ ["status", "StatusCommand"],
34
+ ["version", "VersionCommand"]
35
+ ]
36
36
 
37
- def self.run!(argv)
38
- if argv.empty?
39
- help
40
- exit
41
- end
37
+ def self.run!(argv)
38
+ if argv.empty?
39
+ help
40
+ exit
41
+ end
42
42
 
43
- command_class, new_argv = lookup_command_class_by_argv(argv)
44
- if help_requested?(argv)
45
- help
46
- elsif version_requested?(argv)
47
- show_version
48
- elsif command_class
49
- command = command_class.new(new_argv)
50
- command.run
51
- else
52
- help
53
- abort
54
- end
55
- end
43
+ command_class, new_argv = lookup_command_class_by_argv(argv)
44
+ if help_requested?(argv)
45
+ help
46
+ elsif version_requested?(argv)
47
+ show_version
48
+ elsif command_class
49
+ command = command_class.new(new_argv)
50
+ command.run
51
+ else
52
+ help
53
+ abort
54
+ end
55
+ end
56
56
 
57
- def self.help
58
- puts "#{PROGRAM_NAME} Standalone, the easiest way to run web apps."
59
- puts
60
- puts "Available commands:"
61
- puts
62
- puts " passenger start Start #{PROGRAM_NAME} Standalone."
63
- puts " passenger stop Stop a #{PROGRAM_NAME} instance."
64
- puts " passenger status Show the status of a running #{PROGRAM_NAME} instance."
65
- puts
66
- puts "Run 'passenger <COMMAND> --help' for more information about each command."
67
- end
57
+ def self.help
58
+ puts "#{PROGRAM_NAME} Standalone, the easiest way to run web apps."
59
+ puts
60
+ puts "Available commands:"
61
+ puts
62
+ puts " passenger start Start #{PROGRAM_NAME} Standalone."
63
+ puts " passenger stop Stop a #{PROGRAM_NAME} instance."
64
+ puts " passenger status Show the status of a running #{PROGRAM_NAME} instance."
65
+ puts
66
+ puts "Run 'passenger <COMMAND> --help' for more information about each command."
67
+ end
68
68
 
69
- private
70
- def self.help_requested?(argv)
71
- return argv.size == 1 && (argv[0] == "--help" || argv[0] == "-h" || argv[0] == "help")
72
- end
69
+ private
70
+ def self.help_requested?(argv)
71
+ return argv.size == 1 && (argv[0] == "--help" || argv[0] == "-h" || argv[0] == "help")
72
+ end
73
73
 
74
- def self.version_requested?(argv)
75
- return argv.size == 1 && (argv[0] == "--version" || argv[0] == "-v")
76
- end
74
+ def self.version_requested?(argv)
75
+ return argv.size == 1 && (argv[0] == "--version" || argv[0] == "-v")
76
+ end
77
77
 
78
- def self.show_version
79
- command_class, new_argv = lookup_command_class_by_argv(["version"])
80
- command_class.new(new_argv).run
81
- end
78
+ def self.show_version
79
+ command_class, new_argv = lookup_command_class_by_argv(["version"])
80
+ command_class.new(new_argv).run
81
+ end
82
82
 
83
- def self.lookup_command_class_by_argv(argv)
84
- return nil if argv.empty?
83
+ def self.lookup_command_class_by_argv(argv)
84
+ return nil if argv.empty?
85
85
 
86
- # Convert "passenger help <COMMAND>" to "passenger <COMMAND> --help".
87
- if argv.size == 2 && argv[0] == "help"
88
- argv = [argv[1], "--help"]
89
- end
86
+ # Convert "passenger help <COMMAND>" to "passenger <COMMAND> --help".
87
+ if argv.size == 2 && argv[0] == "help"
88
+ argv = [argv[1], "--help"]
89
+ end
90
90
 
91
- KNOWN_COMMANDS.each do |props|
92
- if argv[0] == props[0]
93
- command_class = lookup_command_class_by_class_name(props[1])
94
- new_argv = argv[1 .. -1]
95
- return [command_class, new_argv]
96
- end
97
- end
91
+ KNOWN_COMMANDS.each do |props|
92
+ if argv[0] == props[0]
93
+ command_class = lookup_command_class_by_class_name(props[1])
94
+ new_argv = argv[1 .. -1]
95
+ return [command_class, new_argv]
96
+ end
97
+ end
98
98
 
99
- return nil
100
- end
99
+ return nil
100
+ end
101
101
 
102
- def self.lookup_command_class_by_class_name(class_name)
103
- base_name = class_name.gsub(/[A-Z]/) do |match|
104
- "_" + match[0..0].downcase
105
- end
106
- base_name.sub!(/^_/, '')
107
- base_name << ".rb"
108
- PhusionPassenger.require_passenger_lib("standalone/#{base_name}")
109
- return PhusionPassenger::Standalone.const_get(class_name)
110
- end
111
- end
102
+ def self.lookup_command_class_by_class_name(class_name)
103
+ base_name = class_name.gsub(/[A-Z]/) do |match|
104
+ "_" + match[0..0].downcase
105
+ end
106
+ base_name.sub!(/^_/, '')
107
+ base_name << ".rb"
108
+ PhusionPassenger.require_passenger_lib("standalone/#{base_name}")
109
+ return PhusionPassenger::Standalone.const_get(class_name)
110
+ end
111
+ end
112
112
 
113
113
  end # module PhusionPassenger