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.
- checksums.yaml +8 -8
- checksums.yaml.gz.asc +7 -7
- data.tar.gz.asc +7 -7
- data/.editorconfig +11 -5
- data/CHANGELOG +38 -0
- data/CONTRIBUTING.md +1 -4
- data/Gemfile +0 -1
- data/Gemfile.lock +0 -2
- data/Rakefile +33 -33
- data/bin/passenger +1 -1
- data/bin/passenger-config +1 -1
- data/bin/passenger-install-apache2-module +800 -800
- data/bin/passenger-install-nginx-module +592 -592
- data/bin/passenger-memory-stats +127 -127
- data/bin/passenger-status +216 -216
- data/build/agents.rb +127 -127
- data/build/apache2.rb +87 -87
- data/build/basics.rb +60 -60
- data/build/common_library.rb +165 -165
- data/build/cplusplus_support.rb +51 -51
- data/build/cxx_tests.rb +268 -268
- data/build/debian.rb +143 -143
- data/build/documentation.rb +58 -58
- data/build/integration_tests.rb +81 -81
- data/build/misc.rb +132 -132
- data/build/nginx.rb +20 -20
- data/build/node_tests.rb +7 -7
- data/build/oxt_tests.rb +14 -14
- data/build/packaging.rb +570 -570
- data/build/preprocessor.rb +260 -260
- data/build/rake_extensions.rb +71 -71
- data/build/ruby_extension.rb +29 -29
- data/build/ruby_tests.rb +6 -6
- data/build/test_basics.rb +37 -37
- data/debian.template/control.template +3 -5
- data/dev/copy_boost_headers +134 -134
- data/dev/install_scripts_bootstrap_code.rb +25 -25
- data/dev/list_tests +20 -20
- data/dev/ruby_server.rb +223 -223
- data/dev/runner +18 -18
- data/doc/ServerOptimizationGuide.txt.md +55 -2
- data/doc/Users guide Nginx.txt +0 -26
- data/doc/Users guide Standalone.txt +5 -1
- data/doc/users_guide_snippets/tips.txt +9 -0
- data/ext/common/ApplicationPool2/Group.h +23 -11
- data/ext/common/ApplicationPool2/Implementation.cpp +32 -7
- data/ext/common/ApplicationPool2/Pool.h +22 -17
- data/ext/common/ApplicationPool2/SmartSpawner.h +4 -1
- data/ext/common/ApplicationPool2/Spawner.h +1 -1
- data/ext/common/Constants.h +1 -1
- data/ext/common/agents/Base.cpp +35 -20
- data/ext/common/agents/HelperAgent/Main.cpp +8 -1
- data/ext/common/agents/HelperAgent/OptionParser.h +18 -4
- data/ext/common/agents/HelperAgent/RequestHandler.h +2 -83
- data/ext/common/agents/HelperAgent/RequestHandler/ForwardResponse.cpp +54 -1
- data/ext/common/agents/HelperAgent/RequestHandler/InitRequest.cpp +7 -4
- data/ext/common/agents/Main.cpp +1 -1
- data/ext/common/agents/Watchdog/Main.cpp +54 -19
- data/ext/nginx/Configuration.c +7 -0
- data/ext/nginx/ContentHandler.c +9 -1
- data/helper-scripts/backtrace-sanitizer.rb +106 -87
- data/helper-scripts/crash-watch.rb +32 -0
- data/helper-scripts/download_binaries/extconf.rb +38 -38
- data/helper-scripts/meteor-loader.rb +107 -107
- data/helper-scripts/prespawn +101 -101
- data/helper-scripts/rack-loader.rb +96 -96
- data/helper-scripts/rack-preloader.rb +137 -137
- data/lib/phusion_passenger.rb +292 -292
- data/lib/phusion_passenger/abstract_installer.rb +438 -438
- data/lib/phusion_passenger/active_support3_extensions/init.rb +168 -170
- data/lib/phusion_passenger/admin_tools.rb +20 -20
- data/lib/phusion_passenger/admin_tools/instance.rb +178 -178
- data/lib/phusion_passenger/admin_tools/instance_registry.rb +61 -61
- data/lib/phusion_passenger/admin_tools/memory_stats.rb +267 -267
- data/lib/phusion_passenger/apache2/config_options.rb +182 -182
- data/lib/phusion_passenger/common_library.rb +479 -485
- data/lib/phusion_passenger/config/about_command.rb +161 -161
- data/lib/phusion_passenger/config/admin_command_command.rb +129 -129
- data/lib/phusion_passenger/config/agent_compiler.rb +121 -121
- data/lib/phusion_passenger/config/build_native_support_command.rb +43 -43
- data/lib/phusion_passenger/config/command.rb +25 -25
- data/lib/phusion_passenger/config/compile_agent_command.rb +62 -62
- data/lib/phusion_passenger/config/compile_nginx_engine_command.rb +88 -73
- data/lib/phusion_passenger/config/detach_process_command.rb +72 -72
- data/lib/phusion_passenger/config/download_agent_command.rb +246 -227
- data/lib/phusion_passenger/config/download_nginx_engine_command.rb +245 -224
- data/lib/phusion_passenger/config/install_agent_command.rb +144 -132
- data/lib/phusion_passenger/config/install_standalone_runtime_command.rb +205 -185
- data/lib/phusion_passenger/config/installation_utils.rb +204 -204
- data/lib/phusion_passenger/config/list_instances_command.rb +64 -64
- data/lib/phusion_passenger/config/main.rb +152 -152
- data/lib/phusion_passenger/config/nginx_engine_compiler.rb +319 -300
- data/lib/phusion_passenger/config/reopen_logs_command.rb +67 -67
- data/lib/phusion_passenger/config/restart_app_command.rb +155 -155
- data/lib/phusion_passenger/config/system_metrics_command.rb +13 -13
- data/lib/phusion_passenger/config/utils.rb +95 -95
- data/lib/phusion_passenger/config/validate_install_command.rb +198 -198
- data/lib/phusion_passenger/console_text_template.rb +25 -25
- data/lib/phusion_passenger/constants.rb +90 -90
- data/lib/phusion_passenger/debug_logging.rb +106 -106
- data/lib/phusion_passenger/loader_shared_helpers.rb +447 -432
- data/lib/phusion_passenger/message_channel.rb +312 -312
- data/lib/phusion_passenger/message_client.rb +176 -176
- data/lib/phusion_passenger/native_support.rb +369 -369
- data/lib/phusion_passenger/nginx/config_options.rb +297 -297
- data/lib/phusion_passenger/packaging.rb +131 -131
- data/lib/phusion_passenger/platform_info.rb +360 -360
- data/lib/phusion_passenger/platform_info/apache.rb +767 -767
- data/lib/phusion_passenger/platform_info/apache_detector.rb +199 -199
- data/lib/phusion_passenger/platform_info/binary_compatibility.rb +107 -107
- data/lib/phusion_passenger/platform_info/compiler.rb +570 -570
- data/lib/phusion_passenger/platform_info/curl.rb +32 -32
- data/lib/phusion_passenger/platform_info/cxx_portability.rb +188 -188
- data/lib/phusion_passenger/platform_info/depcheck.rb +372 -372
- data/lib/phusion_passenger/platform_info/depcheck_specs/apache2.rb +109 -109
- data/lib/phusion_passenger/platform_info/depcheck_specs/compiler_toolchain.rb +4 -4
- data/lib/phusion_passenger/platform_info/depcheck_specs/gems.rb +10 -34
- data/lib/phusion_passenger/platform_info/depcheck_specs/libs.rb +101 -101
- data/lib/phusion_passenger/platform_info/depcheck_specs/ruby.rb +5 -5
- data/lib/phusion_passenger/platform_info/depcheck_specs/utilities.rb +13 -13
- data/lib/phusion_passenger/platform_info/linux.rb +55 -55
- data/lib/phusion_passenger/platform_info/operating_system.rb +149 -149
- data/lib/phusion_passenger/platform_info/ruby.rb +468 -448
- data/lib/phusion_passenger/platform_info/zlib.rb +9 -9
- data/lib/phusion_passenger/plugin.rb +66 -66
- data/lib/phusion_passenger/preloader_shared_helpers.rb +126 -126
- data/lib/phusion_passenger/public_api.rb +191 -191
- data/lib/phusion_passenger/rack/out_of_band_gc.rb +93 -94
- data/lib/phusion_passenger/rack/thread_handler_extension.rb +231 -227
- data/lib/phusion_passenger/request_handler.rb +567 -577
- data/lib/phusion_passenger/request_handler/thread_handler.rb +379 -381
- data/lib/phusion_passenger/ruby_core_enhancements.rb +86 -86
- data/lib/phusion_passenger/ruby_core_io_enhancements.rb +74 -74
- data/lib/phusion_passenger/simple_benchmarking.rb +25 -25
- data/lib/phusion_passenger/standalone/app_finder.rb +153 -150
- data/lib/phusion_passenger/standalone/command.rb +44 -40
- data/lib/phusion_passenger/standalone/config_utils.rb +53 -53
- data/lib/phusion_passenger/standalone/control_utils.rb +38 -59
- data/lib/phusion_passenger/standalone/main.rb +73 -73
- data/lib/phusion_passenger/standalone/start_command.rb +697 -685
- data/lib/phusion_passenger/standalone/start_command/builtin_engine.rb +193 -155
- data/lib/phusion_passenger/standalone/start_command/nginx_engine.rb +162 -133
- data/lib/phusion_passenger/standalone/status_command.rb +64 -64
- data/lib/phusion_passenger/standalone/stop_command.rb +72 -72
- data/lib/phusion_passenger/standalone/version_command.rb +9 -9
- data/lib/phusion_passenger/union_station/connection.rb +32 -32
- data/lib/phusion_passenger/union_station/core.rb +251 -251
- data/lib/phusion_passenger/union_station/transaction.rb +126 -126
- data/lib/phusion_passenger/utils.rb +199 -167
- data/lib/phusion_passenger/utils/ansi_colors.rb +128 -128
- data/lib/phusion_passenger/utils/download.rb +196 -196
- data/lib/phusion_passenger/utils/file_system_watcher.rb +158 -158
- data/lib/phusion_passenger/utils/hosts_file_parser.rb +101 -101
- data/lib/phusion_passenger/utils/lock.rb +31 -31
- data/lib/phusion_passenger/utils/native_support_utils.rb +31 -31
- data/lib/phusion_passenger/utils/progress_bar.rb +26 -26
- data/lib/phusion_passenger/utils/shellwords.rb +20 -20
- data/lib/phusion_passenger/utils/terminal_choice_menu.rb +206 -206
- data/lib/phusion_passenger/utils/unseekable_socket.rb +272 -272
- data/lib/phusion_passenger/vendor/crash_watch/app.rb +129 -0
- data/lib/phusion_passenger/vendor/crash_watch/gdb_controller.rb +341 -0
- data/lib/phusion_passenger/vendor/crash_watch/version.rb +24 -0
- data/lib/phusion_passenger/vendor/daemon_controller.rb +877 -0
- data/lib/phusion_passenger/vendor/daemon_controller/lock_file.rb +127 -0
- data/lib/phusion_passenger/vendor/daemon_controller/spawn.rb +26 -0
- data/lib/phusion_passenger/vendor/daemon_controller/version.rb +29 -0
- data/packaging/rpm/passenger_spec/passenger.spec.template +0 -1
- data/passenger.gemspec +0 -1
- data/resources/templates/config/nginx_engine_compiler/possible_solutions_for_download_and_extraction_problems.txt.erb +27 -0
- data/resources/templates/standalone/config.erb +19 -15
- data/test/integration_tests/apache2_tests.rb +566 -566
- data/test/integration_tests/downloaded_binaries_tests.rb +126 -125
- data/test/integration_tests/native_packaging_spec.rb +296 -296
- data/test/integration_tests/nginx_tests.rb +393 -393
- data/test/integration_tests/shared/example_webapp_tests.rb +282 -280
- data/test/integration_tests/source_packaging_test.rb +138 -138
- data/test/integration_tests/spec_helper.rb +5 -5
- data/test/integration_tests/standalone_tests.rb +367 -367
- data/test/ruby/debug_logging_spec.rb +133 -133
- data/test/ruby/message_channel_spec.rb +186 -186
- data/test/ruby/rack/loader_spec.rb +28 -28
- data/test/ruby/rack/preloader_spec.rb +34 -34
- data/test/ruby/rails3.0/loader_spec.rb +12 -12
- data/test/ruby/rails3.0/preloader_spec.rb +18 -18
- data/test/ruby/rails3.1/loader_spec.rb +12 -12
- data/test/ruby/rails3.1/preloader_spec.rb +18 -18
- data/test/ruby/rails3.2/loader_spec.rb +12 -12
- data/test/ruby/rails3.2/preloader_spec.rb +18 -18
- data/test/ruby/rails4.0/loader_spec.rb +12 -12
- data/test/ruby/rails4.0/preloader_spec.rb +18 -18
- data/test/ruby/rails4.1/loader_spec.rb +12 -12
- data/test/ruby/rails4.1/preloader_spec.rb +18 -18
- data/test/ruby/request_handler_spec.rb +730 -730
- data/test/ruby/shared/loader_sharedspec.rb +224 -224
- data/test/ruby/shared/rails/union_station_extensions_sharedspec.rb +327 -327
- data/test/ruby/shared/ruby_loader_sharedspec.rb +47 -47
- data/test/ruby/spec_helper.rb +65 -65
- data/test/ruby/standalone/runtime_installer_spec.rb +384 -384
- data/test/ruby/union_station_spec.rb +276 -276
- data/test/ruby/utils/file_system_watcher_spec.rb +220 -220
- data/test/ruby/utils/hosts_file_parser.rb +248 -248
- data/test/ruby/utils/tee_input_spec.rb +215 -215
- data/test/ruby/utils/unseekable_socket_spec.rb +57 -57
- data/test/ruby/utils_spec.rb +21 -21
- data/test/stub/rack/config.ru +87 -87
- data/test/stub/rack/library.rb +8 -8
- data/test/stub/rack/start.rb +30 -30
- data/test/support/apache2_controller.rb +191 -191
- data/test/support/nginx_controller.rb +90 -99
- data/test/support/placebo-preloader.rb +57 -57
- data/test/support/test_helper.rb +435 -435
- metadata +11 -21
- metadata.gz.asc +7 -7
- data/lib/phusion_passenger/standalone/command2.rb +0 -292
- data/lib/phusion_passenger/standalone/start2_command.rb +0 -799
- data/resources/templates/standalone/download_tool_missing.txt.erb +0 -18
- data/resources/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +0 -17
- 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-
|
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
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
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
|
-
|
35
|
-
|
36
|
-
|
33
|
+
private
|
34
|
+
def self.create_default_options
|
35
|
+
return {}
|
36
|
+
end
|
37
37
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
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
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
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
|
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
|
-
|
27
|
+
module ConfigUtils
|
28
|
+
extend self # Make methods available as class methods.
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
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
|
-
|
39
|
-
|
38
|
+
class ConfigLoadError < StandardError
|
39
|
+
end
|
40
40
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
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
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
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
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
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
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
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
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
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-
|
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
|
-
|
27
|
+
module ControlUtils
|
28
|
+
extend self # Make methods available as class methods.
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
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
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
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
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
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
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
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
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
37
|
+
def self.run!(argv)
|
38
|
+
if argv.empty?
|
39
|
+
help
|
40
|
+
exit
|
41
|
+
end
|
42
42
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
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
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
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
|
-
|
71
|
-
|
72
|
-
|
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
|
-
|
75
|
-
|
76
|
-
|
74
|
+
def self.version_requested?(argv)
|
75
|
+
return argv.size == 1 && (argv[0] == "--version" || argv[0] == "-v")
|
76
|
+
end
|
77
77
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
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
|
-
|
84
|
-
|
83
|
+
def self.lookup_command_class_by_argv(argv)
|
84
|
+
return nil if argv.empty?
|
85
85
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
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
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
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
|
-
|
100
|
-
|
99
|
+
return nil
|
100
|
+
end
|
101
101
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
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
|