puma 6.6.1-java → 7.0.0-java
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/History.md +89 -4
- data/README.md +11 -24
- data/docs/fork_worker.md +5 -5
- data/docs/kubernetes.md +6 -4
- data/docs/restart.md +2 -2
- data/docs/signals.md +9 -9
- data/docs/stats.md +2 -1
- data/ext/puma_http11/extconf.rb +2 -17
- data/ext/puma_http11/mini_ssl.c +0 -5
- data/lib/puma/binder.rb +10 -8
- data/lib/puma/cli.rb +3 -5
- data/lib/puma/client.rb +31 -31
- data/lib/puma/cluster/worker.rb +9 -10
- data/lib/puma/cluster/worker_handle.rb +34 -5
- data/lib/puma/cluster.rb +12 -13
- data/lib/puma/commonlogger.rb +3 -3
- data/lib/puma/configuration.rb +86 -43
- data/lib/puma/const.rb +9 -10
- data/lib/puma/control_cli.rb +3 -2
- data/lib/puma/detect.rb +2 -0
- data/lib/puma/dsl.rb +108 -81
- data/lib/puma/error_logger.rb +3 -1
- data/lib/puma/events.rb +13 -13
- data/lib/puma/io_buffer.rb +8 -4
- data/lib/puma/launcher/bundle_pruner.rb +1 -1
- data/lib/puma/launcher.rb +28 -29
- data/lib/puma/minissl.rb +0 -1
- data/lib/puma/plugin/systemd.rb +3 -3
- data/lib/puma/rack/urlmap.rb +1 -1
- data/lib/puma/reactor.rb +19 -4
- data/lib/puma/request.rb +26 -23
- data/lib/puma/runner.rb +8 -17
- data/lib/puma/server.rb +80 -48
- data/lib/puma/single.rb +4 -1
- data/lib/puma/thread_pool.rb +27 -81
- data/lib/puma/util.rb +0 -7
- data/lib/puma.rb +10 -0
- data/lib/rack/handler/puma.rb +2 -2
- metadata +4 -4
data/lib/puma/dsl.rb
CHANGED
@@ -13,7 +13,7 @@ module Puma
|
|
13
13
|
# config = Configuration.new({}) do |user_config|
|
14
14
|
# user_config.port 3001
|
15
15
|
# end
|
16
|
-
# config.
|
16
|
+
# config.clamp
|
17
17
|
#
|
18
18
|
# puts config.options[:binds] # => "tcp://127.0.0.1:3001"
|
19
19
|
#
|
@@ -25,7 +25,7 @@ module Puma
|
|
25
25
|
# Resulting configuration:
|
26
26
|
#
|
27
27
|
# config = Configuration.new(config_file: "puma_config.rb")
|
28
|
-
# config.
|
28
|
+
# config.clamp
|
29
29
|
#
|
30
30
|
# puts config.options[:binds] # => "tcp://127.0.0.1:3002"
|
31
31
|
#
|
@@ -43,11 +43,11 @@ module Puma
|
|
43
43
|
#
|
44
44
|
# The following hooks have been updated:
|
45
45
|
#
|
46
|
-
# | DSL Method
|
47
|
-
# |
|
48
|
-
# |
|
49
|
-
# |
|
50
|
-
# | after_refork
|
46
|
+
# | DSL Method | Options Key | Fork Block Location |
|
47
|
+
# | before_worker_boot | :before_worker_boot | inside, before |
|
48
|
+
# | before_worker_shutdown | :before_worker_shutdown | inside, after |
|
49
|
+
# | before_refork | :before_refork | inside |
|
50
|
+
# | after_refork | :after_refork | inside |
|
51
51
|
#
|
52
52
|
class DSL
|
53
53
|
ON_WORKER_KEY = [String, Symbol].freeze
|
@@ -370,18 +370,21 @@ module Puma
|
|
370
370
|
@options[:idle_timeout] = Integer(seconds)
|
371
371
|
end
|
372
372
|
|
373
|
-
#
|
374
|
-
#
|
373
|
+
# Use a clean fiber per request which ensures a clean slate for fiber
|
374
|
+
# locals and fiber storage. Also provides a cleaner backtrace with less
|
375
|
+
# Puma internal stack frames.
|
375
376
|
#
|
376
377
|
# The default is +false+.
|
377
378
|
#
|
378
379
|
# @example
|
379
|
-
#
|
380
|
+
# fiber_per_request
|
380
381
|
#
|
381
|
-
def
|
382
|
-
@options[:
|
382
|
+
def fiber_per_request(which=true)
|
383
|
+
@options[:fiber_per_request] = which
|
383
384
|
end
|
384
385
|
|
386
|
+
alias clean_thread_locals fiber_per_request
|
387
|
+
|
385
388
|
# When shutting down, drain the accept socket of pending connections and
|
386
389
|
# process them. This loops over the accept socket until there are no more
|
387
390
|
# read events and then stops looking and waits for the requests to finish.
|
@@ -434,14 +437,18 @@ module Puma
|
|
434
437
|
# This can be called multiple times to add code each time.
|
435
438
|
#
|
436
439
|
# @example
|
437
|
-
#
|
440
|
+
# before_restart do
|
438
441
|
# puts 'On restart...'
|
439
442
|
# end
|
440
443
|
#
|
441
|
-
def
|
442
|
-
|
444
|
+
def before_restart(&block)
|
445
|
+
Puma.deprecate_method_change :on_restart, __callee__, __method__
|
446
|
+
|
447
|
+
process_hook :before_restart, nil, block
|
443
448
|
end
|
444
449
|
|
450
|
+
alias_method :on_restart, :before_restart
|
451
|
+
|
445
452
|
# Command to use to restart Puma. This should be just how to
|
446
453
|
# load Puma itself (ie. 'ruby -Ilib bin/puma'), not the arguments
|
447
454
|
# to Puma, as those are the same as the original process.
|
@@ -727,9 +734,7 @@ module Puma
|
|
727
734
|
# end
|
728
735
|
#
|
729
736
|
def before_fork(&block)
|
730
|
-
|
731
|
-
|
732
|
-
process_hook :before_fork, nil, block, 'before_fork'
|
737
|
+
process_hook :before_fork, nil, block, cluster_only: true
|
733
738
|
end
|
734
739
|
|
735
740
|
# Code to run in a worker when it boots to setup
|
@@ -740,16 +745,18 @@ module Puma
|
|
740
745
|
# @note Cluster mode only.
|
741
746
|
#
|
742
747
|
# @example
|
743
|
-
#
|
748
|
+
# before_worker_boot do
|
744
749
|
# puts 'Before worker boot...'
|
745
750
|
# end
|
746
751
|
#
|
747
|
-
def
|
748
|
-
|
752
|
+
def before_worker_boot(key = nil, &block)
|
753
|
+
Puma.deprecate_method_change :on_worker_boot, __callee__, __method__
|
749
754
|
|
750
|
-
process_hook :before_worker_boot, key, block,
|
755
|
+
process_hook :before_worker_boot, key, block, cluster_only: true
|
751
756
|
end
|
752
757
|
|
758
|
+
alias_method :on_worker_boot, :before_worker_boot
|
759
|
+
|
753
760
|
# Code to run immediately before a worker shuts
|
754
761
|
# down (after it has finished processing HTTP requests). The worker's
|
755
762
|
# index is passed as an argument. These hooks
|
@@ -761,16 +768,18 @@ module Puma
|
|
761
768
|
# @note Cluster mode only.
|
762
769
|
#
|
763
770
|
# @example
|
764
|
-
#
|
771
|
+
# before_worker_shutdown do
|
765
772
|
# puts 'On worker shutdown...'
|
766
773
|
# end
|
767
774
|
#
|
768
|
-
def
|
769
|
-
|
775
|
+
def before_worker_shutdown(key = nil, &block)
|
776
|
+
Puma.deprecate_method_change :on_worker_shutdown, __callee__, __method__
|
770
777
|
|
771
|
-
process_hook :before_worker_shutdown, key, block,
|
778
|
+
process_hook :before_worker_shutdown, key, block, cluster_only: true
|
772
779
|
end
|
773
780
|
|
781
|
+
alias_method :on_worker_shutdown, :before_worker_shutdown
|
782
|
+
|
774
783
|
# Code to run in the master right before a worker is started. The worker's
|
775
784
|
# index is passed as an argument.
|
776
785
|
#
|
@@ -779,16 +788,18 @@ module Puma
|
|
779
788
|
# @note Cluster mode only.
|
780
789
|
#
|
781
790
|
# @example
|
782
|
-
#
|
791
|
+
# before_worker_fork do
|
783
792
|
# puts 'Before worker fork...'
|
784
793
|
# end
|
785
794
|
#
|
786
|
-
def
|
787
|
-
|
795
|
+
def before_worker_fork(&block)
|
796
|
+
Puma.deprecate_method_change :on_worker_fork, __callee__, __method__
|
788
797
|
|
789
|
-
process_hook :before_worker_fork, nil, block,
|
798
|
+
process_hook :before_worker_fork, nil, block, cluster_only: true
|
790
799
|
end
|
791
800
|
|
801
|
+
alias_method :on_worker_fork, :before_worker_fork
|
802
|
+
|
792
803
|
# Code to run in the master after a worker has been started. The worker's
|
793
804
|
# index is passed as an argument.
|
794
805
|
#
|
@@ -802,9 +813,7 @@ module Puma
|
|
802
813
|
# end
|
803
814
|
#
|
804
815
|
def after_worker_fork(&block)
|
805
|
-
|
806
|
-
|
807
|
-
process_hook :after_worker_fork, nil, block, 'after_worker_fork'
|
816
|
+
process_hook :after_worker_fork, nil, block, cluster_only: true
|
808
817
|
end
|
809
818
|
|
810
819
|
alias_method :after_worker_boot, :after_worker_fork
|
@@ -812,24 +821,31 @@ module Puma
|
|
812
821
|
# Code to run after puma is booted (works for both single and cluster modes).
|
813
822
|
#
|
814
823
|
# @example
|
815
|
-
#
|
824
|
+
# after_booted do
|
816
825
|
# puts 'After booting...'
|
817
826
|
# end
|
818
827
|
#
|
819
|
-
def
|
820
|
-
|
828
|
+
def after_booted(&block)
|
829
|
+
Puma.deprecate_method_change :on_booted, __callee__, __method__
|
830
|
+
|
831
|
+
@config.events.after_booted(&block)
|
821
832
|
end
|
822
833
|
|
823
|
-
|
834
|
+
alias_method :on_booted, :after_booted
|
835
|
+
|
836
|
+
# Code to run after puma is stopped (works for both: single and clustered)
|
824
837
|
#
|
825
838
|
# @example
|
826
|
-
#
|
839
|
+
# after_stopped do
|
827
840
|
# puts 'After stopping...'
|
828
841
|
# end
|
829
842
|
#
|
830
|
-
def
|
831
|
-
|
843
|
+
def after_stopped(&block)
|
844
|
+
Puma.deprecate_method_change :on_stopped, __callee__, __method__
|
845
|
+
|
846
|
+
@config.events.after_stopped(&block)
|
832
847
|
end
|
848
|
+
alias_method :on_stopped, :after_stopped
|
833
849
|
|
834
850
|
# When `fork_worker` is enabled, code to run in Worker 0
|
835
851
|
# before all other workers are re-forked from this process,
|
@@ -845,23 +861,27 @@ module Puma
|
|
845
861
|
# @note Cluster mode with `fork_worker` enabled only.
|
846
862
|
#
|
847
863
|
# @example
|
848
|
-
#
|
864
|
+
# before_refork do
|
849
865
|
# 3.times {GC.start}
|
850
866
|
# end
|
851
867
|
#
|
852
|
-
|
853
|
-
|
868
|
+
# @version 5.0.0
|
869
|
+
#
|
870
|
+
def before_refork(key = nil, &block)
|
871
|
+
Puma.deprecate_method_change :on_refork, __callee__, __method__
|
854
872
|
|
855
|
-
process_hook :before_refork, key, block,
|
873
|
+
process_hook :before_refork, key, block, cluster_only: true
|
856
874
|
end
|
857
875
|
|
876
|
+
alias_method :on_refork, :before_refork
|
877
|
+
|
858
878
|
# When `fork_worker` is enabled, code to run in Worker 0
|
859
879
|
# after all other workers are re-forked from this process,
|
860
880
|
# after the server has temporarily stopped serving requests
|
861
881
|
# (once per complete refork cycle).
|
862
882
|
#
|
863
883
|
# This can be used to re-open any connections to remote servers
|
864
|
-
# (database, Redis, ...) that were closed via
|
884
|
+
# (database, Redis, ...) that were closed via before_refork.
|
865
885
|
#
|
866
886
|
# This can be called multiple times to add several hooks.
|
867
887
|
#
|
@@ -873,7 +893,7 @@ module Puma
|
|
873
893
|
# end
|
874
894
|
#
|
875
895
|
def after_refork(key = nil, &block)
|
876
|
-
process_hook :after_refork, key, block
|
896
|
+
process_hook :after_refork, key, block
|
877
897
|
end
|
878
898
|
|
879
899
|
# Provide a block to be executed just before a thread is added to the thread
|
@@ -889,14 +909,18 @@ module Puma
|
|
889
909
|
# This can be called multiple times to add several hooks.
|
890
910
|
#
|
891
911
|
# @example
|
892
|
-
#
|
912
|
+
# before_thread_start do
|
893
913
|
# puts 'On thread start...'
|
894
914
|
# end
|
895
915
|
#
|
896
|
-
def
|
897
|
-
|
916
|
+
def before_thread_start(&block)
|
917
|
+
Puma.deprecate_method_change :on_thread_start, __callee__, __method__
|
918
|
+
|
919
|
+
process_hook :before_thread_start, nil, block
|
898
920
|
end
|
899
921
|
|
922
|
+
alias_method :on_thread_start, :before_thread_start
|
923
|
+
|
900
924
|
# Provide a block to be executed after a thread is trimmed from the thread
|
901
925
|
# pool. Be careful: while this block executes, Puma's main loop is
|
902
926
|
# blocked, so no new requests will be picked up.
|
@@ -913,14 +937,18 @@ module Puma
|
|
913
937
|
# This can be called multiple times to add several hooks.
|
914
938
|
#
|
915
939
|
# @example
|
916
|
-
#
|
940
|
+
# before_thread_exit do
|
917
941
|
# puts 'On thread exit...'
|
918
942
|
# end
|
919
943
|
#
|
920
|
-
def
|
921
|
-
|
944
|
+
def before_thread_exit(&block)
|
945
|
+
Puma.deprecate_method_change :on_thread_exit, __callee__, __method__
|
946
|
+
|
947
|
+
process_hook :before_thread_exit, nil, block
|
922
948
|
end
|
923
949
|
|
950
|
+
alias_method :on_thread_exit, :before_thread_exit
|
951
|
+
|
924
952
|
# Code to run out-of-band when the worker is idle.
|
925
953
|
# These hooks run immediately after a request has finished
|
926
954
|
# processing and there are no busy threads on the worker.
|
@@ -932,7 +960,7 @@ module Puma
|
|
932
960
|
# This can be called multiple times to add several hooks.
|
933
961
|
#
|
934
962
|
def out_of_band(&block)
|
935
|
-
process_hook :out_of_band, nil, block
|
963
|
+
process_hook :out_of_band, nil, block
|
936
964
|
end
|
937
965
|
|
938
966
|
# The directory to operate out of.
|
@@ -946,8 +974,8 @@ module Puma
|
|
946
974
|
@options[:directory] = dir.to_s
|
947
975
|
end
|
948
976
|
|
949
|
-
# Preload the application before
|
950
|
-
# phased restart feature.
|
977
|
+
# Preload the application before forking the workers; this conflicts with
|
978
|
+
# the phased restart feature.
|
951
979
|
#
|
952
980
|
# The default is +true+ if your app uses more than 1 worker.
|
953
981
|
#
|
@@ -1270,16 +1298,24 @@ module Puma
|
|
1270
1298
|
@options[:fork_worker] = Integer(after_requests)
|
1271
1299
|
end
|
1272
1300
|
|
1273
|
-
#
|
1274
|
-
#
|
1301
|
+
# @deprecated Use {#max_keep_alive} instead.
|
1302
|
+
#
|
1303
|
+
def max_fast_inline(num_of_requests)
|
1304
|
+
Puma.deprecate_method_change :max_fast_inline, __method__, :max_keep_alive
|
1305
|
+
@options[:max_keep_alive] ||= Float(num_of_requests) unless num_of_requests.nil?
|
1306
|
+
end
|
1307
|
+
|
1308
|
+
# The number of requests a keep-alive client can submit before being closed.
|
1309
|
+
# Note that some applications (server to server) may benefit from a very high
|
1310
|
+
# number or Float::INFINITY.
|
1275
1311
|
#
|
1276
|
-
# The default is
|
1312
|
+
# The default is 999.
|
1277
1313
|
#
|
1278
1314
|
# @example
|
1279
|
-
#
|
1315
|
+
# max_keep_alive 20
|
1280
1316
|
#
|
1281
|
-
def
|
1282
|
-
@options[:
|
1317
|
+
def max_keep_alive(num_of_requests)
|
1318
|
+
@options[:max_keep_alive] = Float(num_of_requests) unless num_of_requests.nil?
|
1283
1319
|
end
|
1284
1320
|
|
1285
1321
|
# When `true`, keep-alive connections are maintained on inbound requests.
|
@@ -1409,30 +1445,21 @@ module Puma
|
|
1409
1445
|
end
|
1410
1446
|
end
|
1411
1447
|
|
1412
|
-
def process_hook(options_key, key, block,
|
1448
|
+
def process_hook(options_key, key, block, cluster_only: false)
|
1449
|
+
raise ArgumentError, "expected #{options_key} to be given a block" unless block
|
1450
|
+
|
1451
|
+
@config.hooks[options_key] = true
|
1452
|
+
|
1413
1453
|
@options[options_key] ||= []
|
1414
|
-
|
1415
|
-
|
1454
|
+
hook_options = { block: block, cluster_only: cluster_only }
|
1455
|
+
hook_options[:id] = if ON_WORKER_KEY.include?(key.class)
|
1456
|
+
key.to_sym
|
1416
1457
|
elsif key.nil?
|
1417
|
-
|
1458
|
+
nil
|
1418
1459
|
else
|
1419
|
-
raise "'#{
|
1420
|
-
end
|
1421
|
-
end
|
1422
|
-
|
1423
|
-
def warn_if_in_single_mode(hook_name)
|
1424
|
-
return if @options[:silence_fork_callback_warning]
|
1425
|
-
# user_options (CLI) have precedence over config file
|
1426
|
-
workers_val = @config.options.user_options[:workers] || @options[:workers] ||
|
1427
|
-
@config.puma_default_options[:workers] || 0
|
1428
|
-
if workers_val == 0
|
1429
|
-
log_string =
|
1430
|
-
"Warning: You specified code to run in a `#{hook_name}` block, " \
|
1431
|
-
"but Puma is not configured to run in cluster mode (worker count > 0), " \
|
1432
|
-
"so your `#{hook_name}` block will not run."
|
1433
|
-
|
1434
|
-
LogWriter.stdio.log(log_string)
|
1460
|
+
raise "'#{options_key}' key must be String or Symbol"
|
1435
1461
|
end
|
1462
|
+
@options[options_key] << hook_options
|
1436
1463
|
end
|
1437
1464
|
end
|
1438
1465
|
end
|
data/lib/puma/error_logger.rb
CHANGED
@@ -78,10 +78,12 @@ module Puma
|
|
78
78
|
def request_title(req)
|
79
79
|
env = req.env
|
80
80
|
|
81
|
+
query_string = env[QUERY_STRING]
|
82
|
+
|
81
83
|
REQUEST_FORMAT % [
|
82
84
|
env[REQUEST_METHOD],
|
83
85
|
env[REQUEST_PATH] || env[PATH_INFO],
|
84
|
-
|
86
|
+
query_string.nil? || query_string.empty? ? "" : "?#{query_string}",
|
85
87
|
env[HTTP_X_FORWARDED_FOR] || env[REMOTE_ADDR] || "-"
|
86
88
|
]
|
87
89
|
end
|
data/lib/puma/events.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
module Puma
|
4
4
|
|
5
5
|
# This is an event sink used by `Puma::Server` to handle
|
6
|
-
# lifecycle events such as :
|
6
|
+
# lifecycle events such as :after_booted, :before_restart, and :after_stopped.
|
7
7
|
# Using `Puma::DSL` it is possible to register callback hooks
|
8
8
|
# for each event type.
|
9
9
|
class Events
|
@@ -30,28 +30,28 @@ module Puma
|
|
30
30
|
h
|
31
31
|
end
|
32
32
|
|
33
|
-
def
|
34
|
-
register(:
|
33
|
+
def after_booted(&block)
|
34
|
+
register(:after_booted, &block)
|
35
35
|
end
|
36
36
|
|
37
|
-
def
|
38
|
-
register(:
|
37
|
+
def before_restart(&block)
|
38
|
+
register(:before_restart, &block)
|
39
39
|
end
|
40
40
|
|
41
|
-
def
|
42
|
-
register(:
|
41
|
+
def after_stopped(&block)
|
42
|
+
register(:after_stopped, &block)
|
43
43
|
end
|
44
44
|
|
45
|
-
def
|
46
|
-
fire(:
|
45
|
+
def fire_after_booted!
|
46
|
+
fire(:after_booted)
|
47
47
|
end
|
48
48
|
|
49
|
-
def
|
50
|
-
fire(:
|
49
|
+
def fire_before_restart!
|
50
|
+
fire(:before_restart)
|
51
51
|
end
|
52
52
|
|
53
|
-
def
|
54
|
-
fire(:
|
53
|
+
def fire_after_stopped!
|
54
|
+
fire(:after_stopped)
|
55
55
|
end
|
56
56
|
end
|
57
57
|
end
|
data/lib/puma/io_buffer.rb
CHANGED
@@ -34,13 +34,17 @@ module Puma
|
|
34
34
|
|
35
35
|
alias_method :clear, :reset
|
36
36
|
|
37
|
-
#
|
38
|
-
if
|
39
|
-
|
40
|
-
|
37
|
+
# Create an `IoBuffer#append` method that accepts multiple strings and writes them
|
38
|
+
if RUBY_ENGINE == 'truffleruby'
|
39
|
+
# truffleruby (24.2.1, like ruby 3.3.7)
|
40
|
+
# StringIO.new.write("a", "b") # => `write': wrong number of arguments (given 2, expected 1) (ArgumentError)
|
41
41
|
def append(*strs)
|
42
42
|
strs.each { |str| write str }
|
43
43
|
end
|
44
|
+
else
|
45
|
+
# Ruby 3+
|
46
|
+
# StringIO.new.write("a", "b") # => 2
|
47
|
+
alias_method :append, :write
|
44
48
|
end
|
45
49
|
end
|
46
50
|
end
|
@@ -37,7 +37,7 @@ module Puma
|
|
37
37
|
ENV['PUMA_BUNDLER_PRUNED'] = '1'
|
38
38
|
ENV["BUNDLE_APP_CONFIG"] = bundle_app_config
|
39
39
|
args = [Gem.ruby, puma_wild_path, '-I', dirs.join(':')] + @original_argv
|
40
|
-
#
|
40
|
+
# Defaults to true which breaks socket activation
|
41
41
|
args += [{:close_others => false}]
|
42
42
|
Kernel.exec(*args)
|
43
43
|
end
|
data/lib/puma/launcher.rb
CHANGED
@@ -22,12 +22,15 @@ module Puma
|
|
22
22
|
#
|
23
23
|
# +conf+ A Puma::Configuration object indicating how to run the server.
|
24
24
|
#
|
25
|
-
# +launcher_args+ A Hash that
|
26
|
-
#
|
27
|
-
#
|
28
|
-
#
|
29
|
-
#
|
30
|
-
#
|
25
|
+
# +launcher_args+ A Hash that has a few optional keys.
|
26
|
+
# - +:log_writer+:: Expected to hold an object similar to `Puma::LogWriter.stdio`.
|
27
|
+
# This object will be responsible for broadcasting Puma's internal state
|
28
|
+
# to a logging destination.
|
29
|
+
# - +:events+:: Expected to hold an object similar to `Puma::Events`.
|
30
|
+
# - +:argv+:: Expected to be an array of strings.
|
31
|
+
# - +:env+:: Expected to hold a hash of environment variables.
|
32
|
+
#
|
33
|
+
# These arguments are re-used when restarting the puma server.
|
31
34
|
#
|
32
35
|
# Examples:
|
33
36
|
#
|
@@ -48,18 +51,21 @@ module Puma
|
|
48
51
|
|
49
52
|
env = launcher_args.delete(:env) || ENV
|
50
53
|
|
51
|
-
@config.
|
54
|
+
@config.clamp
|
55
|
+
@options = @config.options
|
56
|
+
|
57
|
+
@options[:log_writer] = @log_writer
|
58
|
+
@options[:logger] = @log_writer if clustered?
|
52
59
|
|
53
60
|
# Advertise the Configuration
|
54
61
|
Puma.cli_config = @config if defined?(Puma.cli_config)
|
62
|
+
log_config if env['PUMA_LOG_CONFIG']
|
55
63
|
|
56
|
-
@
|
57
|
-
|
58
|
-
@binder
|
59
|
-
@binder.create_inherited_fds(ENV).each { |k| ENV.delete k }
|
60
|
-
@binder.create_activated_fds(ENV).each { |k| ENV.delete k }
|
64
|
+
@binder = Binder.new(@log_writer, @options)
|
65
|
+
@binder.create_inherited_fds(env).each { |k| env.delete k }
|
66
|
+
@binder.create_activated_fds(env).each { |k| env.delete k }
|
61
67
|
|
62
|
-
@environment =
|
68
|
+
@environment = @config.environment
|
63
69
|
|
64
70
|
# Load the systemd integration if we detect systemd's NOTIFY_SOCKET.
|
65
71
|
# Skip this on JRuby though, because it is incompatible with the systemd
|
@@ -68,20 +74,17 @@ module Puma
|
|
68
74
|
@config.plugins.create('systemd')
|
69
75
|
end
|
70
76
|
|
71
|
-
if @
|
72
|
-
@
|
73
|
-
@
|
74
|
-
@
|
77
|
+
if @options[:bind_to_activated_sockets]
|
78
|
+
@options[:binds] = @binder.synthesize_binds_from_activated_fs(
|
79
|
+
@options[:binds],
|
80
|
+
@options[:bind_to_activated_sockets] == 'only'
|
75
81
|
)
|
76
82
|
end
|
77
83
|
|
78
|
-
@options = @config.options
|
79
|
-
@config.clamp
|
80
|
-
|
81
84
|
@log_writer.formatter = LogWriter::PidFormatter.new if clustered?
|
82
|
-
@log_writer.formatter = options[:log_formatter] if @options[:log_formatter]
|
85
|
+
@log_writer.formatter = @options[:log_formatter] if @options[:log_formatter]
|
83
86
|
|
84
|
-
@log_writer.custom_logger = options[:custom_logger] if @options[:custom_logger]
|
87
|
+
@log_writer.custom_logger = @options[:custom_logger] if @options[:custom_logger]
|
85
88
|
|
86
89
|
generate_restart_data
|
87
90
|
|
@@ -97,8 +100,6 @@ module Puma
|
|
97
100
|
set_rack_environment
|
98
101
|
|
99
102
|
if clustered?
|
100
|
-
@options[:logger] = @log_writer
|
101
|
-
|
102
103
|
@runner = Cluster.new(self)
|
103
104
|
else
|
104
105
|
@runner = Single.new(self)
|
@@ -106,8 +107,6 @@ module Puma
|
|
106
107
|
Puma.stats_object = @runner
|
107
108
|
|
108
109
|
@status = :run
|
109
|
-
|
110
|
-
log_config if env['PUMA_LOG_CONFIG']
|
111
110
|
end
|
112
111
|
|
113
112
|
attr_reader :binder, :log_writer, :events, :config, :options, :restart_dir
|
@@ -277,7 +276,7 @@ module Puma
|
|
277
276
|
end
|
278
277
|
|
279
278
|
def do_graceful_stop
|
280
|
-
@events.
|
279
|
+
@events.fire_after_stopped!
|
281
280
|
@runner.stop_blocked
|
282
281
|
end
|
283
282
|
|
@@ -289,8 +288,8 @@ module Puma
|
|
289
288
|
end
|
290
289
|
|
291
290
|
def restart!
|
292
|
-
@events.
|
293
|
-
@config.run_hooks :
|
291
|
+
@events.fire_before_restart!
|
292
|
+
@config.run_hooks :before_restart, self, @log_writer
|
294
293
|
|
295
294
|
if Puma.jruby?
|
296
295
|
close_binder_listeners
|
data/lib/puma/minissl.rb
CHANGED
data/lib/puma/plugin/systemd.rb
CHANGED
@@ -14,9 +14,9 @@ Puma::Plugin.create do
|
|
14
14
|
launcher.log_writer.log "* Enabling systemd notification integration"
|
15
15
|
|
16
16
|
# hook_events
|
17
|
-
launcher.events.
|
18
|
-
launcher.events.
|
19
|
-
launcher.events.
|
17
|
+
launcher.events.after_booted { Puma::SdNotify.ready }
|
18
|
+
launcher.events.after_stopped { Puma::SdNotify.stopping }
|
19
|
+
launcher.events.before_restart { Puma::SdNotify.reloading }
|
20
20
|
|
21
21
|
# start watchdog
|
22
22
|
if Puma::SdNotify.watchdog?
|
data/lib/puma/rack/urlmap.rb
CHANGED
@@ -70,7 +70,7 @@ module Puma::Rack
|
|
70
70
|
return app.call(env)
|
71
71
|
end
|
72
72
|
|
73
|
-
[404, {'
|
73
|
+
[404, {'content-type' => "text/plain", "x-cascade" => "pass"}, ["Not Found: #{path}"]]
|
74
74
|
|
75
75
|
ensure
|
76
76
|
env['PATH_INFO'] = path
|