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
@@ -25,173 +25,173 @@ PhusionPassenger.require_passenger_lib 'constants'
|
|
25
25
|
PhusionPassenger.require_passenger_lib 'config/command'
|
26
26
|
|
27
27
|
module PhusionPassenger
|
28
|
-
module Config
|
28
|
+
module Config
|
29
29
|
|
30
|
-
class AboutCommand < Command
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
30
|
+
class AboutCommand < Command
|
31
|
+
def self.help
|
32
|
+
puts "Usage: passenger-config about <SUBCOMMAND>"
|
33
|
+
puts
|
34
|
+
puts " Show information about #{PROGRAM_NAME}."
|
35
|
+
puts
|
36
|
+
puts "Available subcommands:"
|
37
|
+
puts " root Show #{PROGRAM_NAME}'s root."
|
38
|
+
puts " ruby-libdir Show #{PROGRAM_NAME}'s Ruby library directory."
|
39
|
+
puts " includedir Show the Nginx runtime library headers directory."
|
40
|
+
puts " nginx-addon-dir Show #{PROGRAM_NAME}'s Nginx addon directory."
|
41
|
+
puts " nginx-libs Show Nginx runtime library flags."
|
42
|
+
puts " resourcesdir Show #{PROGRAM_NAME}'s resources directory."
|
43
|
+
puts " compiled Check whether runtime libraries are compiled."
|
44
|
+
puts " custom-packaged Check whether Phusion Passenger is custom"
|
45
|
+
puts " packaged."
|
46
|
+
puts " installed-from-release-package Check whether this installation came from"
|
47
|
+
puts " an official release package."
|
48
|
+
puts " make-locations-ini Generate a locations.ini based on the current"
|
49
|
+
puts " install paths."
|
50
|
+
puts " detect-apache2 Autodetect Apache installations."
|
51
|
+
puts " ruby-command Show the correct command for invoking the Ruby"
|
52
|
+
puts " interpreter."
|
53
|
+
puts " rubyext-compat-id Show the Ruby extension binary compatibility ID."
|
54
|
+
puts " cxx-compat-id Show the C++ binary compatibility ID."
|
55
|
+
puts " version Show the version number."
|
56
|
+
end
|
57
57
|
|
58
|
-
|
59
|
-
|
60
|
-
|
58
|
+
def run
|
59
|
+
PhusionPassenger.require_passenger_lib 'platform_info'
|
60
|
+
PhusionPassenger.require_passenger_lib 'platform_info/compiler'
|
61
61
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
62
|
+
subcommand = @argv[0].to_s.dup
|
63
|
+
# Compatibility with version <= 4.0.29: accept both
|
64
|
+
# 'subcommand' and '--subcommand'.
|
65
|
+
subcommand = "--#{subcommand}" if subcommand !~ /^--/
|
66
66
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
67
|
+
case subcommand
|
68
|
+
when "--root"
|
69
|
+
puts PhusionPassenger.install_spec
|
70
|
+
when "--ruby-libdir"
|
71
|
+
puts PhusionPassenger.ruby_libdir
|
72
|
+
when "--includedir"
|
73
|
+
puts PhusionPassenger.include_dir
|
74
|
+
when "--nginx-addon-dir"
|
75
|
+
puts PhusionPassenger.nginx_module_source_dir
|
76
|
+
when "--nginx-libs"
|
77
|
+
puts "#{common_library.link_objects_as_string} #{PhusionPassenger.lib_dir}/common/libboost_oxt.a"
|
78
|
+
when "--resourcesdir"
|
79
|
+
puts PhusionPassenger.resources_dir
|
80
|
+
when "--compiled"
|
81
|
+
common_library.link_objects.each do |filename|
|
82
|
+
if !File.exist?(filename)
|
83
|
+
exit 1
|
84
|
+
end
|
85
|
+
end
|
86
|
+
if File.exist?("#{PhusionPassenger.lib_dir}/common/libboost_oxt.a")
|
87
|
+
exit 0
|
88
|
+
else
|
89
|
+
exit 1
|
90
|
+
end
|
91
|
+
when "--custom-packaged"
|
92
|
+
if PhusionPassenger.custom_packaged?
|
93
|
+
exit 0
|
94
|
+
else
|
95
|
+
exit 1
|
96
|
+
end
|
97
|
+
when "--installed-from-release-package"
|
98
|
+
if PhusionPassenger.installed_from_release_package?
|
99
|
+
exit 0
|
100
|
+
else
|
101
|
+
exit 1
|
102
|
+
end
|
103
|
+
when "--make-locations-ini"
|
104
|
+
if @argv[1] =~ /^--for-(native-)?packaging-method=(.*)/
|
105
|
+
packaging_method = $2
|
106
|
+
else
|
107
|
+
packaging_method = nil
|
108
|
+
end
|
109
109
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
110
|
+
puts "[locations]"
|
111
|
+
if packaging_method
|
112
|
+
puts "packaging_method=#{packaging_method}"
|
113
|
+
else
|
114
|
+
if PhusionPassenger.custom_packaged?
|
115
|
+
puts "packaging_method=#{PhusionPassenger.packaging_method}"
|
116
|
+
else
|
117
|
+
puts "packaging_method=unknown"
|
118
|
+
end
|
119
|
+
end
|
120
|
+
PhusionPassenger::REQUIRED_LOCATIONS_INI_FIELDS.each do |field|
|
121
|
+
puts "#{field}=#{PhusionPassenger.send(field)}"
|
122
|
+
end
|
123
|
+
PhusionPassenger::OPTIONAL_LOCATIONS_INI_FIELDS.each do |field|
|
124
|
+
value = PhusionPassenger.send(field)
|
125
|
+
puts "#{field}=#{value}" if value
|
126
|
+
end
|
127
|
+
when "--detect-apache2"
|
128
|
+
PhusionPassenger.require_passenger_lib 'platform_info/apache_detector'
|
129
|
+
detector = PhusionPassenger::PlatformInfo::ApacheDetector.new(STDOUT)
|
130
|
+
STDOUT.write(Utils::AnsiColors::DEFAULT_TERMINAL_COLOR)
|
131
|
+
STDOUT.flush
|
132
|
+
begin
|
133
|
+
detector.detect_all
|
134
|
+
detector.report
|
135
|
+
ensure
|
136
|
+
detector.finish
|
137
|
+
STDOUT.write(Utils::AnsiColors::RESET)
|
138
|
+
STDOUT.flush
|
139
|
+
end
|
140
|
+
when "--ruby-command"
|
141
|
+
PhusionPassenger.require_passenger_lib 'platform_info/ruby'
|
142
|
+
ruby = PhusionPassenger::PlatformInfo.ruby_command
|
143
|
+
puts "passenger-config was invoked through the following Ruby interpreter:"
|
144
|
+
puts " Command: #{ruby}"
|
145
|
+
STDOUT.write " Version: "
|
146
|
+
STDOUT.flush
|
147
|
+
system("/bin/sh -c '#{ruby} -v'")
|
148
|
+
puts " To use in Apache: PassengerRuby #{ruby}"
|
149
|
+
puts " To use in Nginx : passenger_ruby #{ruby}"
|
150
|
+
puts " To use with Standalone: #{ruby} #{PhusionPassenger.bin_dir}/passenger start"
|
151
|
+
puts
|
152
152
|
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
153
|
+
ruby = PhusionPassenger::PlatformInfo.find_command('ruby')
|
154
|
+
if ruby && !ruby.include?("rvm/rubies/")
|
155
|
+
# If this is an RVM Ruby executable then we don't show it. We want people to
|
156
|
+
# use the RVM wrapper scripts only.
|
157
|
+
puts "The following Ruby interpreter was found first in $PATH:"
|
158
|
+
puts " Command: #{ruby}"
|
159
|
+
STDOUT.write " Version: "
|
160
|
+
STDOUT.flush
|
161
|
+
system("/bin/sh -c '#{ruby} -v'")
|
162
|
+
puts " To use in Apache: PassengerRuby #{ruby}"
|
163
|
+
puts " To use in Nginx : passenger_ruby #{ruby}"
|
164
|
+
puts " To use with Standalone: #{ruby} #{PhusionPassenger.bin_dir}/passenger start"
|
165
|
+
elsif !ruby.include?("rvm/rubies/")
|
166
|
+
puts "No Ruby interpreter found in $PATH."
|
167
|
+
end
|
168
|
+
puts
|
169
|
+
puts "## Notes for RVM users"
|
170
|
+
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'."
|
171
|
+
when "--rubyext-compat-id"
|
172
|
+
PhusionPassenger.require_passenger_lib 'platform_info/binary_compatibility'
|
173
|
+
puts PhusionPassenger::PlatformInfo.ruby_extension_binary_compatibility_id
|
174
|
+
when "--cxx-compat-id"
|
175
|
+
PhusionPassenger.require_passenger_lib 'platform_info/binary_compatibility'
|
176
|
+
puts PhusionPassenger::PlatformInfo.cxx_binary_compatibility_id
|
177
|
+
when "--version"
|
178
|
+
puts PhusionPassenger::VERSION_STRING
|
179
|
+
when "--help"
|
180
|
+
self.class.help
|
181
|
+
else
|
182
|
+
self.class.help
|
183
|
+
exit 1
|
184
|
+
end
|
185
|
+
end
|
186
186
|
|
187
|
-
private
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
end
|
187
|
+
private
|
188
|
+
def common_library
|
189
|
+
PhusionPassenger.require_passenger_lib 'common_library'
|
190
|
+
return COMMON_LIBRARY.
|
191
|
+
only(*NGINX_LIBS_SELECTOR).
|
192
|
+
set_output_dir("#{PhusionPassenger.lib_dir}/common/libpassenger_common")
|
193
|
+
end
|
194
|
+
end
|
195
195
|
|
196
|
-
end # module Config
|
196
|
+
end # module Config
|
197
197
|
end # module PhusionPassenger
|
@@ -31,145 +31,145 @@ PhusionPassenger.require_passenger_lib 'config/utils'
|
|
31
31
|
PhusionPassenger.require_passenger_lib 'utils/json'
|
32
32
|
|
33
33
|
module PhusionPassenger
|
34
|
-
module Config
|
34
|
+
module Config
|
35
35
|
|
36
|
-
class AdminCommandCommand < Command
|
37
|
-
|
36
|
+
class AdminCommandCommand < Command
|
37
|
+
include PhusionPassenger::Config::Utils
|
38
38
|
|
39
|
-
|
40
|
-
|
41
|
-
|
39
|
+
def self.create_default_options
|
40
|
+
return { :socket => "server_admin" }
|
41
|
+
end
|
42
42
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
43
|
+
def run
|
44
|
+
parse_options
|
45
|
+
initialize_objects
|
46
|
+
select_passenger_instance
|
47
|
+
invoke
|
48
|
+
end
|
49
49
|
|
50
|
-
private
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
50
|
+
private
|
51
|
+
def self.create_option_parser(options)
|
52
|
+
OptionParser.new do |opts|
|
53
|
+
nl = "\n" + ' ' * 37
|
54
|
+
opts.banner = "Usage: passenger-config invoke-command <METHOD> <PATH> [OPTIONS]\n"
|
55
|
+
opts.separator ""
|
56
|
+
opts.separator " Invoke an internal #{PROGRAM_NAME} admin command. #{PROGRAM_NAME} listens"
|
57
|
+
opts.separator " on a local HTTP server for admin commands. Other `passenger-config` commands"
|
58
|
+
opts.separator " are just shortcuts for sending specific HTTP requests to the"
|
59
|
+
opts.separator " #{PROGRAM_NAME} admin HTTP server. `passenger-config invoke-command` allows"
|
60
|
+
opts.separator " you to send requests directly."
|
61
|
+
opts.separator ""
|
62
|
+
opts.separator " METHOD is an HTTP verb, like 'GET', 'POST', 'PUT' or 'DELETE'."
|
63
|
+
opts.separator " PATH is the admin URI. You can pass POST data with '-d'."
|
64
|
+
opts.separator ""
|
65
|
+
opts.separator " Example: passenger-config admin-command GET /server.json"
|
66
|
+
opts.separator " Sends the 'GET /server.json' command to the HTTP server agent."
|
67
|
+
opts.separator ""
|
68
|
+
opts.separator " Example: passenger-config admin-command PUT /config.json \\"
|
69
|
+
opts.separator " -d '{\"log_level\", 7}'"
|
70
|
+
opts.separator " Sends the 'PUT /config.json' command to the HTTP server agent, with the"
|
71
|
+
opts.separator " given PUT data."
|
72
|
+
opts.separator ""
|
73
|
+
opts.separator " Example: passenger-config admin-command POST /shutdown.json -a watchdog"
|
74
|
+
opts.separator " Sends the 'POST /shutdown.json' command to the watchdog, with no POST data."
|
75
|
+
opts.separator ""
|
76
76
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
77
|
+
opts.separator "Options:"
|
78
|
+
opts.on("-d", "--data DATA", String, "Specify HTTP request body data") do |value|
|
79
|
+
options[:data] = value
|
80
|
+
end
|
81
|
+
opts.on("-i", "--stdin", "Read HTTP request body data from stdin") do
|
82
|
+
options[:data_source] = :stdin
|
83
|
+
end
|
84
|
+
opts.on("-f", "--data-file PATH", String, "Read HTTP request body data from the given#{nl}" +
|
85
|
+
"file") do |value|
|
86
|
+
options[:data_source] = value
|
87
|
+
end
|
88
|
+
opts.on("-a", "--agent NAME", String, "The name of the socket to send the command#{nl}" +
|
89
|
+
"to. This specifies which agent the request#{nl}" +
|
90
|
+
"is sent to. Choices: watchdog,#{nl}" +
|
91
|
+
"server_admin, logging_admin.#{nl}" +
|
92
|
+
"Default: server_admin") do |val|
|
93
|
+
options[:socket] = val
|
94
|
+
end
|
95
|
+
opts.on("--show-headers", "Show HTTP response headers") do
|
96
|
+
options[:show_headers] = true
|
97
|
+
end
|
98
|
+
opts.on("--ignore-response-code", "Exit successfully even if a non-2xx response was returned") do
|
99
|
+
options[:ignore_response_code] = true
|
100
|
+
end
|
101
|
+
opts.on("--instance NAME", String, "The #{PROGRAM_NAME} instance to select") do |value|
|
102
|
+
options[:instance] = value
|
103
|
+
end
|
104
|
+
opts.on("-h", "--help", "Show this help") do
|
105
|
+
options[:help] = true
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
109
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
110
|
+
def initialize_objects
|
111
|
+
if @argv.size != 2
|
112
|
+
abort "You've passed to few arguments. See --help for more information."
|
113
|
+
end
|
114
114
|
|
115
|
-
|
116
|
-
|
115
|
+
@method = @argv[0]
|
116
|
+
@path = @argv[1]
|
117
117
|
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
118
|
+
case @method.upcase
|
119
|
+
when "GET"
|
120
|
+
@request = Net::HTTP::Get.new(@path)
|
121
|
+
when "POST"
|
122
|
+
@request = Net::HTTP::Post.new(@path)
|
123
|
+
when "PUT"
|
124
|
+
@request = Net::HTTP::Put.new(@path)
|
125
|
+
when "DELETE"
|
126
|
+
@request = Net::HTTP::Delete.new(@path)
|
127
|
+
else
|
128
|
+
abort "Unknown method #{@method.inspect}. Please specify either GET, POST, PUT or DELETE."
|
129
|
+
end
|
130
|
+
if @path !~ /\A\//
|
131
|
+
abort "The path must start with a slash (/). See --help for more information."
|
132
|
+
end
|
133
133
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
134
|
+
if @options[:data] && @options[:data_source]
|
135
|
+
abort "You cannot specify both --data and --stdin/--data-file. Please choose either one."
|
136
|
+
end
|
137
|
+
if @options[:data_source] == :stdin
|
138
|
+
STDIN.binmode
|
139
|
+
@options[:data] = STDIN.read
|
140
|
+
elsif @options[:data_source]
|
141
|
+
File.open(@options[:data_source], "rb") do |f|
|
142
|
+
@options[:data] = f.read
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
146
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
147
|
+
def invoke
|
148
|
+
password = obtain_full_admin_password(@instance)
|
149
|
+
@request.basic_auth("admin", password)
|
150
|
+
@request["connection"] = "close"
|
151
|
+
if @options[:data]
|
152
|
+
@request.content_type = "application/json"
|
153
|
+
@request.body = @options[:data]
|
154
|
+
end
|
155
|
+
response = @instance.http_request("agents.s/#{@options[:socket]}", @request)
|
156
|
+
if @options[:show_headers]
|
157
|
+
print_headers(response)
|
158
|
+
end
|
159
|
+
puts response.body
|
160
|
+
if !@options[:ignore_response_code] && response.code.to_i / 100 != 2
|
161
|
+
abort
|
162
|
+
end
|
163
|
+
end
|
164
164
|
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
end
|
165
|
+
def print_headers(response)
|
166
|
+
puts "HTTP/1.1 #{response.message} #{response.code}"
|
167
|
+
response.each_header do |name, val|
|
168
|
+
puts "#{name}: #{val}"
|
169
|
+
end
|
170
|
+
puts
|
171
|
+
end
|
172
|
+
end
|
173
173
|
|
174
|
-
end # module Config
|
174
|
+
end # module Config
|
175
175
|
end # module PhusionPassenger
|