passenger 6.1.4 → 6.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG +6 -1
- data/Rakefile +1 -1
- data/build/agent.rb +15 -15
- data/build/apache2.rb +18 -18
- data/build/basics.rb +1 -1
- data/build/common_library.rb +21 -20
- data/build/cxx_tests.rb +19 -19
- data/build/integration_tests.rb +3 -3
- data/build/misc.rb +10 -9
- data/build/nginx.rb +12 -12
- data/build/oxt_tests.rb +7 -7
- data/build/packaging.rb +11 -11
- data/build/ruby_extension.rb +3 -3
- data/build/ruby_tests.rb +1 -1
- data/build/schema_printer.rb +13 -13
- data/build/support/cplusplus.rb +8 -8
- data/build/support/cxx_dependency_map.rb +622 -622
- data/build/support/general.rb +0 -1
- data/build/support/vendor/cxx_hinted_parser/lib/cxx_hinted_parser/parser.rb +4 -4
- data/build/support/vendor/cxxcodebuilder/lib/cxxcodebuilder/builder.rb +1 -1
- data/build/test_basics.rb +4 -4
- data/dev/colorize-logs +6 -6
- data/dev/copy_boost_headers +8 -8
- data/dev/index_cxx_dependencies.rb +6 -6
- data/dev/install_scripts_bootstrap_code.rb +4 -4
- data/dev/list_tests +2 -2
- data/dev/nginx_version_sha256 +2 -2
- data/dev/parse_file_descriptor_log +1 -1
- data/passenger.gemspec +4 -4
- data/src/agent/Core/Config.h +1 -1
- data/src/agent/Core/Controller/Config.h +1 -1
- data/src/agent/Watchdog/Config.h +1 -1
- data/src/cxx_supportlib/Constants.h +1 -1
- data/src/helper-scripts/backtrace-sanitizer.rb +2 -2
- data/src/helper-scripts/download_binaries/extconf.rb +8 -8
- data/src/helper-scripts/meteor-loader.rb +39 -39
- data/src/helper-scripts/rack-loader.rb +1 -0
- data/src/helper-scripts/rack-preloader.rb +2 -1
- data/src/ruby_native_extension/extconf.rb +27 -28
- data/src/ruby_supportlib/phusion_passenger/abstract_installer.rb +27 -27
- data/src/ruby_supportlib/phusion_passenger/admin_tools/instance.rb +5 -4
- data/src/ruby_supportlib/phusion_passenger/admin_tools/instance_registry.rb +9 -8
- data/src/ruby_supportlib/phusion_passenger/admin_tools/memory_stats.rb +24 -24
- data/src/ruby_supportlib/phusion_passenger/admin_tools.rb +5 -5
- data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +526 -526
- data/src/ruby_supportlib/phusion_passenger/apache2/config_utils.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/common_library.rb +105 -105
- data/src/ruby_supportlib/phusion_passenger/config/about_command.rb +5 -5
- data/src/ruby_supportlib/phusion_passenger/config/agent_compiler.rb +7 -6
- data/src/ruby_supportlib/phusion_passenger/config/api_call_command.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/config/command.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/config/compile_agent_command.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/config/compile_nginx_engine_command.rb +5 -5
- data/src/ruby_supportlib/phusion_passenger/config/detach_process_command.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/config/download_agent_command.rb +17 -17
- data/src/ruby_supportlib/phusion_passenger/config/download_nginx_engine_command.rb +18 -18
- data/src/ruby_supportlib/phusion_passenger/config/install_agent_command.rb +10 -10
- data/src/ruby_supportlib/phusion_passenger/config/install_standalone_runtime_command.rb +12 -12
- data/src/ruby_supportlib/phusion_passenger/config/installation_utils.rb +24 -23
- data/src/ruby_supportlib/phusion_passenger/config/main.rb +26 -26
- data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +5 -4
- data/src/ruby_supportlib/phusion_passenger/config/reopen_logs_command.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/config/restart_app_command.rb +4 -4
- data/src/ruby_supportlib/phusion_passenger/config/system_properties_command.rb +14 -13
- data/src/ruby_supportlib/phusion_passenger/config/utils.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/config/validate_install_command.rb +34 -33
- data/src/ruby_supportlib/phusion_passenger/console_text_template.rb +3 -2
- data/src/ruby_supportlib/phusion_passenger/debug_logging.rb +2 -2
- data/src/ruby_supportlib/phusion_passenger/loader_shared_helpers.rb +35 -36
- data/src/ruby_supportlib/phusion_passenger/message_channel.rb +17 -16
- data/src/ruby_supportlib/phusion_passenger/message_client.rb +5 -4
- data/src/ruby_supportlib/phusion_passenger/native_support.rb +42 -42
- data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +548 -548
- data/src/ruby_supportlib/phusion_passenger/packaging.rb +6 -6
- data/src/ruby_supportlib/phusion_passenger/platform_info/apache.rb +85 -84
- data/src/ruby_supportlib/phusion_passenger/platform_info/apache_detector.rb +13 -13
- data/src/ruby_supportlib/phusion_passenger/platform_info/binary_compatibility.rb +5 -5
- data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +65 -65
- data/src/ruby_supportlib/phusion_passenger/platform_info/crypto.rb +6 -6
- data/src/ruby_supportlib/phusion_passenger/platform_info/curl.rb +5 -5
- data/src/ruby_supportlib/phusion_passenger/platform_info/cxx_portability.rb +10 -10
- data/src/ruby_supportlib/phusion_passenger/platform_info/depcheck.rb +6 -5
- data/src/ruby_supportlib/phusion_passenger/platform_info/depcheck_specs/apache2.rb +7 -7
- data/src/ruby_supportlib/phusion_passenger/platform_info/depcheck_specs/libs.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/platform_info/depcheck_specs/ruby.rb +7 -7
- data/src/ruby_supportlib/phusion_passenger/platform_info/depcheck_specs/utilities.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/platform_info/linux.rb +14 -13
- data/src/ruby_supportlib/phusion_passenger/platform_info/networking.rb +27 -26
- data/src/ruby_supportlib/phusion_passenger/platform_info/operating_system.rb +16 -16
- data/src/ruby_supportlib/phusion_passenger/platform_info/pcre.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/platform_info/ruby.rb +29 -28
- data/src/ruby_supportlib/phusion_passenger/platform_info/zlib.rb +2 -2
- data/src/ruby_supportlib/phusion_passenger/platform_info.rb +37 -36
- data/src/ruby_supportlib/phusion_passenger/plugin.rb +3 -3
- data/src/ruby_supportlib/phusion_passenger/preloader_shared_helpers.rb +16 -15
- data/src/ruby_supportlib/phusion_passenger/public_api.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/rack/handler.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/rack/out_of_band_gc.rb +5 -4
- data/src/ruby_supportlib/phusion_passenger/rack/thread_handler_extension.rb +8 -7
- data/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb +9 -11
- data/src/ruby_supportlib/phusion_passenger/request_handler.rb +27 -26
- data/src/ruby_supportlib/phusion_passenger/ruby_core_enhancements.rb +6 -5
- data/src/ruby_supportlib/phusion_passenger/ruby_core_io_enhancements.rb +7 -6
- data/src/ruby_supportlib/phusion_passenger/standalone/app_finder.rb +13 -13
- data/src/ruby_supportlib/phusion_passenger/standalone/command.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +351 -351
- data/src/ruby_supportlib/phusion_passenger/standalone/main.rb +11 -11
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +13 -14
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command/nginx_engine.rb +21 -23
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +4 -4
- data/src/ruby_supportlib/phusion_passenger/standalone/status_command.rb +5 -5
- data/src/ruby_supportlib/phusion_passenger/standalone/stop_command.rb +6 -6
- data/src/ruby_supportlib/phusion_passenger/standalone/version_command.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/utils/download.rb +12 -11
- data/src/ruby_supportlib/phusion_passenger/utils/file_system_watcher.rb +9 -9
- data/src/ruby_supportlib/phusion_passenger/utils/hosts_file_parser.rb +8 -7
- data/src/ruby_supportlib/phusion_passenger/utils/json.rb +7 -6
- data/src/ruby_supportlib/phusion_passenger/utils/native_support_utils.rb +4 -4
- data/src/ruby_supportlib/phusion_passenger/utils/progress_bar.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/utils/shellwords.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/utils/strscan.rb +1 -0
- data/src/ruby_supportlib/phusion_passenger/utils/tee_input.rb +1 -0
- data/src/ruby_supportlib/phusion_passenger/utils/terminal_choice_menu.rb +13 -12
- data/src/ruby_supportlib/phusion_passenger/utils/tmpio.rb +2 -3
- data/src/ruby_supportlib/phusion_passenger/utils/unseekable_socket.rb +7 -7
- data/src/ruby_supportlib/phusion_passenger/utils.rb +17 -16
- data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/app.rb +1 -0
- data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/gdb_controller.rb +3 -2
- data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/lldb_controller.rb +2 -1
- data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/utils.rb +3 -2
- data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller.rb +13 -13
- data/src/ruby_supportlib/phusion_passenger.rb +23 -22
- metadata +2 -2
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
# Apple has a habit of getting their Ruby headers wrong, so if we are building using system ruby we need to patch things up, sierra & mojave both did this.
|
|
26
26
|
# eg https://openradar.appspot.com/46465917
|
|
27
27
|
if RUBY_PLATFORM =~ /darwin/ && !File.exist?(RbConfig::CONFIG["rubyarchhdrdir"])
|
|
28
|
-
RbConfig::CONFIG["rubyarchhdrdir"].sub!(RUBY_PLATFORM.split('-').last, Dir.entries(File.dirname(RbConfig::CONFIG["rubyarchhdrdir"])).reject{|d|d.start_with?(".","ruby")}.first.split('-').last)
|
|
28
|
+
RbConfig::CONFIG["rubyarchhdrdir"].sub!(RUBY_PLATFORM.split('-').last, Dir.entries(File.dirname(RbConfig::CONFIG["rubyarchhdrdir"])).reject { |d|d.start_with?(".", "ruby") }.first.split('-').last)
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
require 'mkmf'
|
|
@@ -34,12 +34,12 @@ $LIBS << " -lpthread" if $LIBS !~ /-lpthread/
|
|
|
34
34
|
$CFLAGS << " -g"
|
|
35
35
|
|
|
36
36
|
if RUBY_PLATFORM =~ /solaris/
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
37
|
+
have_library('xnet')
|
|
38
|
+
$CFLAGS << " -D_XPG4_2"
|
|
39
|
+
$CFLAGS << " -D__EXTENSIONS__"
|
|
40
|
+
if RUBY_PLATFORM =~ /solaris2.9/
|
|
41
|
+
$CFLAGS << " -D__SOLARIS9__"
|
|
42
|
+
end
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
have_header('alloca.h')
|
|
@@ -51,25 +51,24 @@ have_func('rb_thread_io_blocking_region', 'ruby/io.h')
|
|
|
51
51
|
have_func('rb_thread_call_without_gvl', 'ruby/thread.h')
|
|
52
52
|
|
|
53
53
|
with_cflags($CFLAGS) do
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
54
|
+
create_makefile('passenger_native_support')
|
|
55
|
+
if RUBY_PLATFORM =~ /solaris/
|
|
56
|
+
# Fix syntax error in Solaris /usr/ccs/bin/make.
|
|
57
|
+
# https://code.google.com/p/phusion-passenger/issues/detail?id=999
|
|
58
|
+
makefile = File.read("Makefile")
|
|
59
|
+
makefile.sub!(/^ECHO = .*/, "ECHO = echo")
|
|
60
|
+
File.open("Makefile", "w") do |f|
|
|
61
|
+
f.write(makefile)
|
|
62
|
+
end
|
|
63
|
+
elsif RUBY_PLATFORM =~ /darwin/
|
|
64
|
+
# The OS X Clang 503.0.38 update (circa March 15 2014) broke
|
|
65
|
+
# /usr/bin/ruby's mkmf. mkmf inserts -multiply_definedsuppress
|
|
66
|
+
# into the Makefile, but that flag is no longer supported by
|
|
67
|
+
# Clang. We remove this manually.
|
|
68
|
+
makefile = File.read("Makefile")
|
|
69
|
+
makefile.sub!(/-multiply_definedsuppress/, "")
|
|
70
|
+
File.open("Makefile", "w") do |f|
|
|
71
|
+
f.write(makefile)
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
74
|
end
|
|
75
|
-
|
|
@@ -72,10 +72,10 @@ module PhusionPassenger
|
|
|
72
72
|
def run
|
|
73
73
|
before_install
|
|
74
74
|
run_steps
|
|
75
|
-
|
|
75
|
+
true
|
|
76
76
|
rescue Abort
|
|
77
77
|
puts
|
|
78
|
-
|
|
78
|
+
false
|
|
79
79
|
rescue SignalException, SystemExit
|
|
80
80
|
raise
|
|
81
81
|
rescue PlatformInfo::RuntimeError => e
|
|
@@ -100,11 +100,11 @@ module PhusionPassenger
|
|
|
100
100
|
|
|
101
101
|
|
|
102
102
|
def interactive?
|
|
103
|
-
|
|
103
|
+
!@auto
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
def non_interactive?
|
|
107
|
-
|
|
107
|
+
!interactive?
|
|
108
108
|
end
|
|
109
109
|
|
|
110
110
|
|
|
@@ -130,7 +130,7 @@ module PhusionPassenger
|
|
|
130
130
|
end
|
|
131
131
|
|
|
132
132
|
def dependencies
|
|
133
|
-
|
|
133
|
+
[ [], [] ]
|
|
134
134
|
end
|
|
135
135
|
|
|
136
136
|
def check_dependencies(show_new_screen = true)
|
|
@@ -150,7 +150,7 @@ module PhusionPassenger
|
|
|
150
150
|
end
|
|
151
151
|
|
|
152
152
|
if runner.check_all
|
|
153
|
-
|
|
153
|
+
true
|
|
154
154
|
else
|
|
155
155
|
puts
|
|
156
156
|
puts "<red>Some required software is not installed.</red>"
|
|
@@ -176,7 +176,7 @@ module PhusionPassenger
|
|
|
176
176
|
puts
|
|
177
177
|
puts " <yellow>#{install_doc_url}</yellow>"
|
|
178
178
|
puts " <yellow>#{troubleshooting_doc_url}</yellow>"
|
|
179
|
-
|
|
179
|
+
false
|
|
180
180
|
end
|
|
181
181
|
end
|
|
182
182
|
|
|
@@ -198,9 +198,9 @@ module PhusionPassenger
|
|
|
198
198
|
File.stat(PhusionPassenger.build_system_dir).uid == 0
|
|
199
199
|
new_screen
|
|
200
200
|
render_template 'installer_common/gem_install_permission_problems'
|
|
201
|
-
|
|
201
|
+
false
|
|
202
202
|
else
|
|
203
|
-
|
|
203
|
+
true
|
|
204
204
|
end
|
|
205
205
|
end
|
|
206
206
|
|
|
@@ -215,7 +215,7 @@ module PhusionPassenger
|
|
|
215
215
|
if !inaccessible_directories.empty?
|
|
216
216
|
new_screen
|
|
217
217
|
render_template 'installer_common/world_inaccessible_directories',
|
|
218
|
-
:
|
|
218
|
+
directories: inaccessible_directories
|
|
219
219
|
wait
|
|
220
220
|
end
|
|
221
221
|
end
|
|
@@ -239,11 +239,11 @@ module PhusionPassenger
|
|
|
239
239
|
if ram_mb && swap_mb && ram_mb + swap_mb < required
|
|
240
240
|
new_screen
|
|
241
241
|
render_template 'installer_common/low_amount_of_memory_warning',
|
|
242
|
-
:
|
|
243
|
-
:
|
|
244
|
-
:
|
|
245
|
-
:
|
|
246
|
-
:
|
|
242
|
+
required: required,
|
|
243
|
+
current: ram_mb + swap_mb,
|
|
244
|
+
ram: ram_mb,
|
|
245
|
+
swap: swap_mb,
|
|
246
|
+
install_doc_url: install_doc_url
|
|
247
247
|
wait
|
|
248
248
|
end
|
|
249
249
|
end
|
|
@@ -301,8 +301,8 @@ module PhusionPassenger
|
|
|
301
301
|
end
|
|
302
302
|
|
|
303
303
|
def render_template(name, options = {})
|
|
304
|
-
options.merge!(:
|
|
305
|
-
puts ConsoleTextTemplate.new({ :
|
|
304
|
+
options.merge!(colors: @colors)
|
|
305
|
+
puts ConsoleTextTemplate.new({ file: name }, options).result
|
|
306
306
|
end
|
|
307
307
|
|
|
308
308
|
def new_screen
|
|
@@ -342,7 +342,7 @@ module PhusionPassenger
|
|
|
342
342
|
done = !block_given? || yield(result)
|
|
343
343
|
end
|
|
344
344
|
end
|
|
345
|
-
|
|
345
|
+
result
|
|
346
346
|
rescue Interrupt
|
|
347
347
|
raise Abort
|
|
348
348
|
end
|
|
@@ -356,7 +356,7 @@ module PhusionPassenger
|
|
|
356
356
|
false
|
|
357
357
|
end
|
|
358
358
|
end
|
|
359
|
-
|
|
359
|
+
result.downcase == 'y'
|
|
360
360
|
rescue Interrupt
|
|
361
361
|
raise Abort
|
|
362
362
|
end
|
|
@@ -378,9 +378,9 @@ module PhusionPassenger
|
|
|
378
378
|
end
|
|
379
379
|
end
|
|
380
380
|
if result.empty?
|
|
381
|
-
|
|
381
|
+
default
|
|
382
382
|
else
|
|
383
|
-
|
|
383
|
+
result.downcase == 'y'
|
|
384
384
|
end
|
|
385
385
|
rescue Interrupt
|
|
386
386
|
raise Abort
|
|
@@ -406,7 +406,7 @@ module PhusionPassenger
|
|
|
406
406
|
end
|
|
407
407
|
|
|
408
408
|
def home_dir
|
|
409
|
-
|
|
409
|
+
PhusionPassenger.home_dir
|
|
410
410
|
end
|
|
411
411
|
|
|
412
412
|
|
|
@@ -414,11 +414,11 @@ module PhusionPassenger
|
|
|
414
414
|
puts "# #{args.join(' ')}"
|
|
415
415
|
result = system(*args)
|
|
416
416
|
if result
|
|
417
|
-
|
|
417
|
+
true
|
|
418
418
|
elsif $?.signaled? && $?.termsig == Signal.list["INT"]
|
|
419
419
|
raise Interrupt
|
|
420
420
|
else
|
|
421
|
-
|
|
421
|
+
false
|
|
422
422
|
end
|
|
423
423
|
end
|
|
424
424
|
|
|
@@ -454,7 +454,7 @@ module PhusionPassenger
|
|
|
454
454
|
logger.formatter = proc { |severity, datetime, progname, msg| "*** #{msg}\n" }
|
|
455
455
|
logger
|
|
456
456
|
end
|
|
457
|
-
|
|
457
|
+
PhusionPassenger::Utils::Download.download(url, output, options)
|
|
458
458
|
end
|
|
459
459
|
|
|
460
460
|
def list_parent_directories(dir)
|
|
@@ -464,7 +464,7 @@ module PhusionPassenger
|
|
|
464
464
|
components.size.times do |i|
|
|
465
465
|
dirs << File::SEPARATOR + components[0 .. i].join(File::SEPARATOR)
|
|
466
466
|
end
|
|
467
|
-
|
|
467
|
+
dirs.reverse
|
|
468
468
|
end
|
|
469
469
|
|
|
470
470
|
def world_executable?(dir)
|
|
@@ -473,7 +473,7 @@ module PhusionPassenger
|
|
|
473
473
|
rescue Errno::EACCESS
|
|
474
474
|
return false
|
|
475
475
|
end
|
|
476
|
-
|
|
476
|
+
stat.mode & 0000001 != 0
|
|
477
477
|
end
|
|
478
478
|
end
|
|
479
479
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
+
|
|
2
3
|
# Phusion Passenger - https://www.phusionpassenger.com/
|
|
3
4
|
# Copyright (c) 2014-2025 Asynchronous B.V.
|
|
4
5
|
#
|
|
@@ -108,7 +109,7 @@ module PhusionPassenger
|
|
|
108
109
|
sock.close
|
|
109
110
|
end
|
|
110
111
|
|
|
111
|
-
|
|
112
|
+
response
|
|
112
113
|
end
|
|
113
114
|
|
|
114
115
|
def watchdog_pid
|
|
@@ -229,11 +230,11 @@ module PhusionPassenger
|
|
|
229
230
|
def process_is_alive?(pid)
|
|
230
231
|
begin
|
|
231
232
|
Process.kill(0, pid)
|
|
232
|
-
|
|
233
|
+
true
|
|
233
234
|
rescue Errno::ESRCH
|
|
234
|
-
|
|
235
|
+
false
|
|
235
236
|
rescue SystemCallError => e
|
|
236
|
-
|
|
237
|
+
true
|
|
237
238
|
end
|
|
238
239
|
end
|
|
239
240
|
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
+
|
|
2
3
|
# Phusion Passenger - https://www.phusionpassenger.com/
|
|
3
4
|
# Copyright (c) 2014-2025 Asynchronous B.V.
|
|
4
5
|
#
|
|
@@ -31,12 +32,12 @@ module PhusionPassenger
|
|
|
31
32
|
|
|
32
33
|
class InstanceRegistry
|
|
33
34
|
def initialize(paths = nil)
|
|
34
|
-
@paths = [paths || default_paths].flatten.uniq
|
|
35
|
+
@paths = [ paths || default_paths ].flatten.uniq
|
|
35
36
|
end
|
|
36
37
|
|
|
37
38
|
def list(options = {})
|
|
38
39
|
options = {
|
|
39
|
-
:
|
|
40
|
+
clean_stale_or_corrupted: true,
|
|
40
41
|
}.merge(options)
|
|
41
42
|
|
|
42
43
|
instances = []
|
|
@@ -69,16 +70,16 @@ module PhusionPassenger
|
|
|
69
70
|
end
|
|
70
71
|
|
|
71
72
|
def find_by_name(name, options = {})
|
|
72
|
-
|
|
73
|
+
list(options).find { |instance| instance.name == name }
|
|
73
74
|
end
|
|
74
75
|
|
|
75
76
|
def find_by_name_prefix(name, options = {})
|
|
76
77
|
prefix = /^#{Regexp.escape name}/
|
|
77
78
|
results = list(options).find_all { |instance| instance.name =~ prefix }
|
|
78
79
|
if results.size <= 1
|
|
79
|
-
|
|
80
|
+
results.first
|
|
80
81
|
else
|
|
81
|
-
|
|
82
|
+
:ambiguous
|
|
82
83
|
end
|
|
83
84
|
end
|
|
84
85
|
|
|
@@ -87,13 +88,13 @@ module PhusionPassenger
|
|
|
87
88
|
# return: the matching instance, if found; nil otherwise.
|
|
88
89
|
#
|
|
89
90
|
def find_by_watchdog_pid(pid, options = {})
|
|
90
|
-
|
|
91
|
+
list(options).detect { |instance| instance.watchdog_pid == pid }
|
|
91
92
|
end
|
|
92
93
|
|
|
93
94
|
private
|
|
94
95
|
def default_paths
|
|
95
96
|
if result = string_env("PASSENGER_INSTANCE_REGISTRY_DIR")
|
|
96
|
-
return [result]
|
|
97
|
+
return [ result ]
|
|
97
98
|
end
|
|
98
99
|
|
|
99
100
|
# On OSX, TMPDIR is set to a different value per-user. But Apache
|
|
@@ -106,7 +107,7 @@ module PhusionPassenger
|
|
|
106
107
|
# systemd's PrivateTmp feature works like an inverted OSX, apache gets its own
|
|
107
108
|
# TMPDIR and users use /tmp, however the path is often too long because socket paths can
|
|
108
109
|
# only be up to 108 characters long.
|
|
109
|
-
[string_env("TMPDIR"), "/tmp", "/var/run/passenger-instreg"
|
|
110
|
+
[ string_env("TMPDIR"), "/tmp", "/var/run/passenger-instreg", *Dir['/tmp/systemd-private-*-{httpd,nginx,apache2}.service-*/tmp'] ].compact
|
|
110
111
|
end
|
|
111
112
|
|
|
112
113
|
def string_env(name)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# encoding: binary
|
|
2
|
+
|
|
2
3
|
# Phusion Passenger - https://www.phusionpassenger.com/
|
|
3
4
|
# Copyright (c) 2010-2025 Asynchronous B.V.
|
|
4
5
|
#
|
|
@@ -42,23 +43,23 @@ module PhusionPassenger
|
|
|
42
43
|
attr_accessor :private_dirty_rss # in KB
|
|
43
44
|
|
|
44
45
|
def vm_size_in_mb
|
|
45
|
-
|
|
46
|
+
sprintf("%.1f MB", vm_size / 1024.0)
|
|
46
47
|
end
|
|
47
48
|
|
|
48
49
|
def rss_in_mb
|
|
49
|
-
|
|
50
|
+
sprintf("%.1f MB", rss / 1024.0)
|
|
50
51
|
end
|
|
51
52
|
|
|
52
53
|
def private_dirty_rss_in_mb
|
|
53
54
|
if private_dirty_rss.is_a?(Numeric)
|
|
54
|
-
|
|
55
|
+
sprintf("%.1f MB", private_dirty_rss / 1024.0)
|
|
55
56
|
else
|
|
56
|
-
|
|
57
|
+
"?"
|
|
57
58
|
end
|
|
58
59
|
end
|
|
59
60
|
|
|
60
61
|
def to_a
|
|
61
|
-
|
|
62
|
+
[ pid, ppid, vm_size_in_mb, private_dirty_rss_in_mb, rss_in_mb, name ]
|
|
62
63
|
end
|
|
63
64
|
end
|
|
64
65
|
|
|
@@ -67,11 +68,11 @@ module PhusionPassenger
|
|
|
67
68
|
def apache_processes
|
|
68
69
|
@apache_processes ||= begin
|
|
69
70
|
if PlatformInfo.httpd
|
|
70
|
-
processes = list_processes(:
|
|
71
|
+
processes = list_processes(exe: PlatformInfo.httpd)
|
|
71
72
|
if processes.empty?
|
|
72
73
|
# On some Linux distros, the Apache worker processes
|
|
73
74
|
# are called "httpd.worker"
|
|
74
|
-
processes = list_processes(:
|
|
75
|
+
processes = list_processes(exe: "#{PlatformInfo.httpd}.worker")
|
|
75
76
|
end
|
|
76
77
|
processes
|
|
77
78
|
else
|
|
@@ -83,14 +84,13 @@ module PhusionPassenger
|
|
|
83
84
|
# Returns a list of Nginx processes, which may be the empty list if
|
|
84
85
|
# Nginx is not running.
|
|
85
86
|
def nginx_processes
|
|
86
|
-
@nginx_processes ||= list_processes(:
|
|
87
|
+
@nginx_processes ||= list_processes(exe: "nginx")
|
|
87
88
|
end
|
|
88
89
|
|
|
89
90
|
# Returns a list of Phusion Passenger processes, which may be the empty list if
|
|
90
91
|
# Phusion Passenger is not running.
|
|
91
92
|
def passenger_processes
|
|
92
|
-
@passenger_processes ||= list_processes(:
|
|
93
|
-
/((^| )Passenger|(^| )Rails:|(^| )Rack:|wsgi-loader.py|(.*)PassengerAgent|rack-loader.rb)/)
|
|
93
|
+
@passenger_processes ||= list_processes(match: /((^| )Passenger|(^| )Rails:|(^| )Rack:|wsgi-loader.py|(.*)PassengerAgent|rack-loader.rb)/)
|
|
94
94
|
end
|
|
95
95
|
|
|
96
96
|
# Returns the sum of the memory usages of all given processes.
|
|
@@ -108,28 +108,28 @@ module PhusionPassenger
|
|
|
108
108
|
accurate = true
|
|
109
109
|
end
|
|
110
110
|
end
|
|
111
|
-
|
|
111
|
+
[ total, accurate ]
|
|
112
112
|
else
|
|
113
113
|
processes.each do |p|
|
|
114
114
|
total += p.rss
|
|
115
115
|
end
|
|
116
|
-
|
|
116
|
+
[ total, true ]
|
|
117
117
|
end
|
|
118
118
|
end
|
|
119
119
|
|
|
120
120
|
def platform_provides_private_dirty_rss_information?
|
|
121
|
-
|
|
121
|
+
os_name_simple == "linux"
|
|
122
122
|
end
|
|
123
123
|
|
|
124
124
|
# Returns whether root privileges are required in order to measure private dirty RSS.
|
|
125
125
|
# Only meaningful if #platform_provides_private_dirty_rss_information? returns true.
|
|
126
126
|
def root_privileges_required_for_private_dirty_rss?
|
|
127
127
|
all_processes = (apache_processes || []) + nginx_processes + passenger_processes
|
|
128
|
-
|
|
128
|
+
all_processes.any? { |p| p.private_dirty_rss.nil? }
|
|
129
129
|
end
|
|
130
130
|
|
|
131
131
|
def should_show_private_dirty_rss?
|
|
132
|
-
|
|
132
|
+
platform_provides_private_dirty_rss_information? &&
|
|
133
133
|
(::Process.euid == 0 || root_privileges_required_for_private_dirty_rss?)
|
|
134
134
|
end
|
|
135
135
|
|
|
@@ -150,7 +150,7 @@ module PhusionPassenger
|
|
|
150
150
|
line = $1.strip
|
|
151
151
|
used = line.split(/ +/).first.to_i
|
|
152
152
|
|
|
153
|
-
[total, used]
|
|
153
|
+
[ total, used ]
|
|
154
154
|
when "macosx"
|
|
155
155
|
vm_stat = `vm_stat`
|
|
156
156
|
vm_stat =~ /page size of (\d+) bytes/
|
|
@@ -172,7 +172,7 @@ module PhusionPassenger
|
|
|
172
172
|
wired = wired.to_i * page_size / 1024
|
|
173
173
|
|
|
174
174
|
used = active + wired
|
|
175
|
-
[free + inactive + used, used]
|
|
175
|
+
[ free + inactive + used, used ]
|
|
176
176
|
else
|
|
177
177
|
nil
|
|
178
178
|
end
|
|
@@ -193,7 +193,7 @@ module PhusionPassenger
|
|
|
193
193
|
free = to_kb.call($7, $8)
|
|
194
194
|
|
|
195
195
|
used = active + wired
|
|
196
|
-
[free + inactive + used, used]
|
|
196
|
+
[ free + inactive + used, used ]
|
|
197
197
|
else
|
|
198
198
|
nil
|
|
199
199
|
end
|
|
@@ -203,7 +203,7 @@ module PhusionPassenger
|
|
|
203
203
|
|
|
204
204
|
private
|
|
205
205
|
def os_name_simple
|
|
206
|
-
|
|
206
|
+
PlatformInfo.os_name_simple
|
|
207
207
|
end
|
|
208
208
|
|
|
209
209
|
# Returns a list of Process objects that match the given search criteria.
|
|
@@ -266,7 +266,7 @@ module PhusionPassenger
|
|
|
266
266
|
p.name.sub!(/ \(ruby\)\Z/, '')
|
|
267
267
|
if p.name !~ /^ps/ && (!options[:match] || p.name.match(options[:match]))
|
|
268
268
|
# Convert some values to integer.
|
|
269
|
-
[:pid, :ppid, :vm_size, :rss].each do |attr|
|
|
269
|
+
[ :pid, :ppid, :vm_size, :rss ].each do |attr|
|
|
270
270
|
p.send("#{attr}=", p.send(attr).to_i)
|
|
271
271
|
end
|
|
272
272
|
p.threads = p.threads.to_i if threads_known
|
|
@@ -277,7 +277,7 @@ module PhusionPassenger
|
|
|
277
277
|
processes << p
|
|
278
278
|
end
|
|
279
279
|
end
|
|
280
|
-
|
|
280
|
+
processes
|
|
281
281
|
end
|
|
282
282
|
|
|
283
283
|
# Returns the private dirty RSS for the given process, in KB.
|
|
@@ -290,12 +290,12 @@ module PhusionPassenger
|
|
|
290
290
|
end
|
|
291
291
|
end
|
|
292
292
|
if total == 0
|
|
293
|
-
|
|
293
|
+
nil
|
|
294
294
|
else
|
|
295
|
-
|
|
295
|
+
total
|
|
296
296
|
end
|
|
297
297
|
rescue Errno::EACCES, Errno::ENOENT, Errno::ESRCH
|
|
298
|
-
|
|
298
|
+
nil
|
|
299
299
|
end
|
|
300
300
|
|
|
301
301
|
if ''.respond_to?(:force_encoding)
|
|
@@ -26,22 +26,22 @@ module PhusionPassenger
|
|
|
26
26
|
|
|
27
27
|
module AdminTools
|
|
28
28
|
def self.tmpdir
|
|
29
|
-
["PASSENGER_INSTANCE_REGISTRY_DIR", "TMPDIR"].each do |name|
|
|
29
|
+
[ "PASSENGER_INSTANCE_REGISTRY_DIR", "TMPDIR" ].each do |name|
|
|
30
30
|
if ENV.has_key?(name) && !ENV[name].empty?
|
|
31
31
|
return ENV[name]
|
|
32
32
|
end
|
|
33
33
|
end
|
|
34
|
-
|
|
34
|
+
Dir['/tmp/systemd-private-*-{httpd,nginx}.service-*/tmp'].first || "/tmp"
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
def self.process_is_alive?(pid)
|
|
38
38
|
begin
|
|
39
39
|
Process.kill(0, pid)
|
|
40
|
-
|
|
40
|
+
true
|
|
41
41
|
rescue Errno::ESRCH
|
|
42
|
-
|
|
42
|
+
false
|
|
43
43
|
rescue SystemCallError => e
|
|
44
|
-
|
|
44
|
+
true
|
|
45
45
|
end
|
|
46
46
|
end
|
|
47
47
|
end # module AdminTools
|