puma 3.12.1 → 5.6.7

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puma might be problematic. Click here for more details.

Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/History.md +1608 -447
  3. data/LICENSE +23 -20
  4. data/README.md +175 -63
  5. data/bin/puma-wild +3 -9
  6. data/docs/architecture.md +59 -21
  7. data/docs/compile_options.md +21 -0
  8. data/docs/deployment.md +69 -58
  9. data/docs/fork_worker.md +33 -0
  10. data/docs/jungle/README.md +9 -0
  11. data/{tools → docs}/jungle/rc.d/README.md +1 -1
  12. data/{tools → docs}/jungle/rc.d/puma +2 -2
  13. data/docs/kubernetes.md +66 -0
  14. data/docs/nginx.md +1 -1
  15. data/docs/plugins.md +22 -12
  16. data/docs/rails_dev_mode.md +28 -0
  17. data/docs/restart.md +47 -22
  18. data/docs/signals.md +13 -11
  19. data/docs/stats.md +142 -0
  20. data/docs/systemd.md +95 -120
  21. data/ext/puma_http11/PumaHttp11Service.java +2 -2
  22. data/ext/puma_http11/ext_help.h +1 -1
  23. data/ext/puma_http11/extconf.rb +57 -2
  24. data/ext/puma_http11/http11_parser.c +105 -117
  25. data/ext/puma_http11/http11_parser.h +1 -1
  26. data/ext/puma_http11/http11_parser.java.rl +22 -38
  27. data/ext/puma_http11/http11_parser.rl +4 -2
  28. data/ext/puma_http11/http11_parser_common.rl +4 -4
  29. data/ext/puma_http11/mini_ssl.c +339 -98
  30. data/ext/puma_http11/no_ssl/PumaHttp11Service.java +15 -0
  31. data/ext/puma_http11/org/jruby/puma/Http11.java +108 -116
  32. data/ext/puma_http11/org/jruby/puma/Http11Parser.java +84 -99
  33. data/ext/puma_http11/org/jruby/puma/MiniSSL.java +124 -71
  34. data/ext/puma_http11/puma_http11.c +35 -51
  35. data/lib/puma/app/status.rb +71 -49
  36. data/lib/puma/binder.rb +234 -137
  37. data/lib/puma/cli.rb +28 -18
  38. data/lib/puma/client.rb +350 -230
  39. data/lib/puma/cluster/worker.rb +173 -0
  40. data/lib/puma/cluster/worker_handle.rb +94 -0
  41. data/lib/puma/cluster.rb +247 -232
  42. data/lib/puma/commonlogger.rb +2 -2
  43. data/lib/puma/configuration.rb +61 -51
  44. data/lib/puma/const.rb +42 -21
  45. data/lib/puma/control_cli.rb +115 -67
  46. data/lib/puma/detect.rb +29 -2
  47. data/lib/puma/dsl.rb +619 -123
  48. data/lib/puma/error_logger.rb +104 -0
  49. data/lib/puma/events.rb +55 -31
  50. data/lib/puma/io_buffer.rb +7 -5
  51. data/lib/puma/jruby_restart.rb +0 -58
  52. data/lib/puma/json_serialization.rb +96 -0
  53. data/lib/puma/launcher.rb +193 -69
  54. data/lib/puma/minissl/context_builder.rb +81 -0
  55. data/lib/puma/minissl.rb +170 -65
  56. data/lib/puma/null_io.rb +18 -1
  57. data/lib/puma/plugin/tmp_restart.rb +2 -0
  58. data/lib/puma/plugin.rb +7 -13
  59. data/lib/puma/queue_close.rb +26 -0
  60. data/lib/puma/rack/builder.rb +3 -5
  61. data/lib/puma/rack/urlmap.rb +2 -0
  62. data/lib/puma/rack_default.rb +2 -0
  63. data/lib/puma/reactor.rb +85 -316
  64. data/lib/puma/request.rb +476 -0
  65. data/lib/puma/runner.rb +48 -55
  66. data/lib/puma/server.rb +305 -695
  67. data/lib/puma/single.rb +11 -67
  68. data/lib/puma/state_file.rb +48 -8
  69. data/lib/puma/systemd.rb +46 -0
  70. data/lib/puma/thread_pool.rb +132 -82
  71. data/lib/puma/util.rb +33 -10
  72. data/lib/puma.rb +56 -0
  73. data/lib/rack/handler/puma.rb +5 -6
  74. data/lib/rack/version_restriction.rb +15 -0
  75. data/tools/Dockerfile +16 -0
  76. data/tools/trickletest.rb +0 -1
  77. metadata +46 -29
  78. data/ext/puma_http11/io_buffer.c +0 -155
  79. data/lib/puma/accept_nonblock.rb +0 -23
  80. data/lib/puma/compat.rb +0 -14
  81. data/lib/puma/convenient.rb +0 -25
  82. data/lib/puma/daemon_ext.rb +0 -33
  83. data/lib/puma/delegation.rb +0 -13
  84. data/lib/puma/java_io_buffer.rb +0 -47
  85. data/lib/puma/rack/backports/uri/common_193.rb +0 -33
  86. data/lib/puma/tcp_logger.rb +0 -41
  87. data/tools/jungle/README.md +0 -19
  88. data/tools/jungle/init.d/README.md +0 -61
  89. data/tools/jungle/init.d/puma +0 -421
  90. data/tools/jungle/init.d/run-puma +0 -18
  91. data/tools/jungle/upstart/README.md +0 -61
  92. data/tools/jungle/upstart/puma-manager.conf +0 -31
  93. data/tools/jungle/upstart/puma.conf +0 -69
  94. /data/{tools → docs}/jungle/rc.d/puma.conf +0 -0
data/lib/puma.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Standard libraries
2
4
  require 'socket'
3
5
  require 'tempfile'
@@ -8,16 +10,70 @@ require 'stringio'
8
10
 
9
11
  require 'thread'
10
12
 
13
+ # extension files should not be loaded with `require_relative`
14
+ require 'puma/puma_http11'
15
+ require_relative 'puma/detect'
16
+ require_relative 'puma/json_serialization'
17
+ require_relative 'rack/version_restriction'
18
+
11
19
  module Puma
12
20
  autoload :Const, 'puma/const'
13
21
  autoload :Server, 'puma/server'
14
22
  autoload :Launcher, 'puma/launcher'
15
23
 
24
+ # at present, MiniSSL::Engine is only defined in extension code (puma_http11),
25
+ # not in minissl.rb
26
+ HAS_SSL = const_defined?(:MiniSSL, false) && MiniSSL.const_defined?(:Engine, false)
27
+
28
+ HAS_UNIX_SOCKET = Object.const_defined?(:UNIXSocket) && !IS_WINDOWS
29
+
30
+ if HAS_SSL
31
+ require 'puma/minissl'
32
+ else
33
+ module MiniSSL
34
+ # this class is defined so that it exists when Puma is compiled
35
+ # without ssl support, as Server and Reactor use it in rescue statements.
36
+ class SSLError < StandardError ; end
37
+ end
38
+ end
39
+
40
+ def self.ssl?
41
+ HAS_SSL
42
+ end
43
+
44
+ def self.abstract_unix_socket?
45
+ @abstract_unix ||=
46
+ if HAS_UNIX_SOCKET
47
+ begin
48
+ ::UNIXServer.new("\0puma.temp.unix").close
49
+ true
50
+ rescue ArgumentError # darwin
51
+ false
52
+ end
53
+ else
54
+ false
55
+ end
56
+ end
57
+
58
+ # @!attribute [rw] stats_object=
16
59
  def self.stats_object=(val)
17
60
  @get_stats = val
18
61
  end
19
62
 
63
+ # @!attribute [rw] stats_object
20
64
  def self.stats
65
+ Puma::JSONSerialization.generate @get_stats.stats
66
+ end
67
+
68
+ # @!attribute [r] stats_hash
69
+ # @version 5.0.0
70
+ def self.stats_hash
21
71
  @get_stats.stats
22
72
  end
73
+
74
+ # Thread name is new in Ruby 2.3
75
+ def self.set_thread_name(name)
76
+ return unless Thread.current.respond_to?(:name=)
77
+ Thread.current.name = "puma #{name}"
78
+ end
23
79
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rack/handler'
2
4
 
3
5
  module Rack
@@ -28,9 +30,8 @@ module Rack
28
30
  end
29
31
 
30
32
  conf = ::Puma::Configuration.new(options, default_options) do |user_config, file_config, default_config|
31
- user_config.quiet
32
-
33
33
  if options.delete(:Verbose)
34
+ require 'rack/common_logger'
34
35
  app = Rack::CommonLogger.new(app, STDOUT)
35
36
  end
36
37
 
@@ -59,9 +60,7 @@ module Rack
59
60
  conf
60
61
  end
61
62
 
62
-
63
-
64
- def self.run(app, options = {})
63
+ def self.run(app, **options)
65
64
  conf = self.config(app, options)
66
65
 
67
66
  events = options.delete(:Silent) ? ::Puma::Events.strings : ::Puma::Events.stdio
@@ -86,7 +85,7 @@ module Rack
86
85
  "Verbose" => "Don't report each request (default: false)"
87
86
  }
88
87
  end
89
- private
88
+
90
89
  def self.set_host_port_to_config(host, port, config)
91
90
  config.clear_binds! if host || port
92
91
 
@@ -0,0 +1,15 @@
1
+ begin
2
+ begin
3
+ # rack/version exists in Rack 2.2.0 and later, compatible with Ruby 2.3 and later
4
+ # we prefer to not load Rack
5
+ require 'rack/version'
6
+ rescue LoadError
7
+ require 'rack'
8
+ end
9
+
10
+ # Rack.release is needed for Rack v1, Rack::RELEASE was added in v2
11
+ if Gem::Version.new(Rack.release) >= Gem::Version.new("3.0.0")
12
+ raise StandardError.new "Puma 5 is not compatible with Rack 3, please upgrade to Puma 6 or higher."
13
+ end
14
+ rescue LoadError
15
+ end
data/tools/Dockerfile ADDED
@@ -0,0 +1,16 @@
1
+ # Use this Dockerfile to create minimal reproductions of issues
2
+
3
+ FROM ruby:3.1
4
+
5
+ # throw errors if Gemfile has been modified since Gemfile.lock
6
+ RUN bundle config --global frozen 1
7
+
8
+ WORKDIR /usr/src/app
9
+
10
+ COPY . .
11
+ RUN gem install bundler
12
+ RUN bundle install
13
+ RUN bundle exec rake compile
14
+
15
+ EXPOSE 9292
16
+ CMD bundle exec bin/puma test/rackup/hello.ru
data/tools/trickletest.rb CHANGED
@@ -38,7 +38,6 @@ ARGV[1].to_i.times do
38
38
  do_test(st, size)
39
39
  end
40
40
 
41
- t.abort_on_exception = true
42
41
  threads << t
43
42
  end
44
43
 
metadata CHANGED
@@ -1,18 +1,32 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puma
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.12.1
4
+ version: 5.6.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evan Phoenix
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-19 00:00:00.000000000 Z
12
- dependencies: []
13
- description: Puma is a simple, fast, threaded, and highly concurrent HTTP 1.1 server
11
+ date: 1980-01-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nio4r
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ description: Puma is a simple, fast, threaded, and highly parallel HTTP 1.1 server
14
28
  for Ruby/Rack applications. Puma is intended for use in both development and production
15
- environments. It's great for highly concurrent Ruby implementations such as Rubinius
29
+ environments. It's great for highly parallel Ruby implementations such as Rubinius
16
30
  and JRuby as well as as providing process worker support to support CRuby well.
17
31
  email:
18
32
  - evan@phx.io
@@ -30,14 +44,23 @@ files:
30
44
  - bin/puma-wild
31
45
  - bin/pumactl
32
46
  - docs/architecture.md
47
+ - docs/compile_options.md
33
48
  - docs/deployment.md
49
+ - docs/fork_worker.md
34
50
  - docs/images/puma-connection-flow-no-reactor.png
35
51
  - docs/images/puma-connection-flow.png
36
52
  - docs/images/puma-general-arch.png
53
+ - docs/jungle/README.md
54
+ - docs/jungle/rc.d/README.md
55
+ - docs/jungle/rc.d/puma
56
+ - docs/jungle/rc.d/puma.conf
57
+ - docs/kubernetes.md
37
58
  - docs/nginx.md
38
59
  - docs/plugins.md
60
+ - docs/rails_dev_mode.md
39
61
  - docs/restart.md
40
62
  - docs/signals.md
63
+ - docs/stats.md
41
64
  - docs/systemd.md
42
65
  - ext/puma_http11/PumaHttp11Service.java
43
66
  - ext/puma_http11/ext_help.h
@@ -47,67 +70,62 @@ files:
47
70
  - ext/puma_http11/http11_parser.java.rl
48
71
  - ext/puma_http11/http11_parser.rl
49
72
  - ext/puma_http11/http11_parser_common.rl
50
- - ext/puma_http11/io_buffer.c
51
73
  - ext/puma_http11/mini_ssl.c
74
+ - ext/puma_http11/no_ssl/PumaHttp11Service.java
52
75
  - ext/puma_http11/org/jruby/puma/Http11.java
53
76
  - ext/puma_http11/org/jruby/puma/Http11Parser.java
54
77
  - ext/puma_http11/org/jruby/puma/MiniSSL.java
55
78
  - ext/puma_http11/puma_http11.c
56
79
  - lib/puma.rb
57
- - lib/puma/accept_nonblock.rb
58
80
  - lib/puma/app/status.rb
59
81
  - lib/puma/binder.rb
60
82
  - lib/puma/cli.rb
61
83
  - lib/puma/client.rb
62
84
  - lib/puma/cluster.rb
85
+ - lib/puma/cluster/worker.rb
86
+ - lib/puma/cluster/worker_handle.rb
63
87
  - lib/puma/commonlogger.rb
64
- - lib/puma/compat.rb
65
88
  - lib/puma/configuration.rb
66
89
  - lib/puma/const.rb
67
90
  - lib/puma/control_cli.rb
68
- - lib/puma/convenient.rb
69
- - lib/puma/daemon_ext.rb
70
- - lib/puma/delegation.rb
71
91
  - lib/puma/detect.rb
72
92
  - lib/puma/dsl.rb
93
+ - lib/puma/error_logger.rb
73
94
  - lib/puma/events.rb
74
95
  - lib/puma/io_buffer.rb
75
- - lib/puma/java_io_buffer.rb
76
96
  - lib/puma/jruby_restart.rb
97
+ - lib/puma/json_serialization.rb
77
98
  - lib/puma/launcher.rb
78
99
  - lib/puma/minissl.rb
100
+ - lib/puma/minissl/context_builder.rb
79
101
  - lib/puma/null_io.rb
80
102
  - lib/puma/plugin.rb
81
103
  - lib/puma/plugin/tmp_restart.rb
82
- - lib/puma/rack/backports/uri/common_193.rb
104
+ - lib/puma/queue_close.rb
83
105
  - lib/puma/rack/builder.rb
84
106
  - lib/puma/rack/urlmap.rb
85
107
  - lib/puma/rack_default.rb
86
108
  - lib/puma/reactor.rb
109
+ - lib/puma/request.rb
87
110
  - lib/puma/runner.rb
88
111
  - lib/puma/server.rb
89
112
  - lib/puma/single.rb
90
113
  - lib/puma/state_file.rb
91
- - lib/puma/tcp_logger.rb
114
+ - lib/puma/systemd.rb
92
115
  - lib/puma/thread_pool.rb
93
116
  - lib/puma/util.rb
94
117
  - lib/rack/handler/puma.rb
95
- - tools/jungle/README.md
96
- - tools/jungle/init.d/README.md
97
- - tools/jungle/init.d/puma
98
- - tools/jungle/init.d/run-puma
99
- - tools/jungle/rc.d/README.md
100
- - tools/jungle/rc.d/puma
101
- - tools/jungle/rc.d/puma.conf
102
- - tools/jungle/upstart/README.md
103
- - tools/jungle/upstart/puma-manager.conf
104
- - tools/jungle/upstart/puma.conf
118
+ - lib/rack/version_restriction.rb
119
+ - tools/Dockerfile
105
120
  - tools/trickletest.rb
106
- homepage: http://puma.io
121
+ homepage: https://puma.io
107
122
  licenses:
108
123
  - BSD-3-Clause
109
124
  metadata:
110
- msys2_mingw_dependencies: openssl
125
+ bug_tracker_uri: https://github.com/puma/puma/issues
126
+ changelog_uri: https://github.com/puma/puma/blob/master/History.md
127
+ homepage_uri: https://puma.io
128
+ source_code_uri: https://github.com/puma/puma
111
129
  post_install_message:
112
130
  rdoc_options: []
113
131
  require_paths:
@@ -123,10 +141,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
123
141
  - !ruby/object:Gem::Version
124
142
  version: '0'
125
143
  requirements: []
126
- rubyforge_project:
127
- rubygems_version: 2.7.6
144
+ rubygems_version: 3.4.12
128
145
  signing_key:
129
146
  specification_version: 4
130
- summary: Puma is a simple, fast, threaded, and highly concurrent HTTP 1.1 server for
147
+ summary: Puma is a simple, fast, threaded, and highly parallel HTTP 1.1 server for
131
148
  Ruby/Rack applications
132
149
  test_files: []
@@ -1,155 +0,0 @@
1
- #define RSTRING_NOT_MODIFIED 1
2
- #include "ruby.h"
3
-
4
- #include <sys/types.h>
5
-
6
- struct buf_int {
7
- uint8_t* top;
8
- uint8_t* cur;
9
-
10
- size_t size;
11
- };
12
-
13
- #define BUF_DEFAULT_SIZE 4096
14
- #define BUF_TOLERANCE 32
15
-
16
- static void buf_free(struct buf_int* internal) {
17
- xfree(internal->top);
18
- xfree(internal);
19
- }
20
-
21
- static VALUE buf_alloc(VALUE self) {
22
- VALUE buf;
23
- struct buf_int* internal;
24
-
25
- buf = Data_Make_Struct(self, struct buf_int, 0, buf_free, internal);
26
-
27
- internal->size = BUF_DEFAULT_SIZE;
28
- internal->top = ALLOC_N(uint8_t, BUF_DEFAULT_SIZE);
29
- internal->cur = internal->top;
30
-
31
- return buf;
32
- }
33
-
34
- static VALUE buf_append(VALUE self, VALUE str) {
35
- struct buf_int* b;
36
- size_t used, str_len, new_size;
37
-
38
- Data_Get_Struct(self, struct buf_int, b);
39
-
40
- used = b->cur - b->top;
41
-
42
- StringValue(str);
43
- str_len = RSTRING_LEN(str);
44
-
45
- new_size = used + str_len;
46
-
47
- if(new_size > b->size) {
48
- size_t n = b->size + (b->size / 2);
49
- uint8_t* top;
50
- uint8_t* old;
51
-
52
- new_size = (n > new_size ? n : new_size + BUF_TOLERANCE);
53
-
54
- top = ALLOC_N(uint8_t, new_size);
55
- old = b->top;
56
- memcpy(top, old, used);
57
- b->top = top;
58
- b->cur = top + used;
59
- b->size = new_size;
60
- xfree(old);
61
- }
62
-
63
- memcpy(b->cur, RSTRING_PTR(str), str_len);
64
- b->cur += str_len;
65
-
66
- return self;
67
- }
68
-
69
- static VALUE buf_append2(int argc, VALUE* argv, VALUE self) {
70
- struct buf_int* b;
71
- size_t used, new_size;
72
- int i;
73
- VALUE str;
74
-
75
- Data_Get_Struct(self, struct buf_int, b);
76
-
77
- used = b->cur - b->top;
78
- new_size = used;
79
-
80
- for(i = 0; i < argc; i++) {
81
- StringValue(argv[i]);
82
-
83
- str = argv[i];
84
-
85
- new_size += RSTRING_LEN(str);
86
- }
87
-
88
- if(new_size > b->size) {
89
- size_t n = b->size + (b->size / 2);
90
- uint8_t* top;
91
- uint8_t* old;
92
-
93
- new_size = (n > new_size ? n : new_size + BUF_TOLERANCE);
94
-
95
- top = ALLOC_N(uint8_t, new_size);
96
- old = b->top;
97
- memcpy(top, old, used);
98
- b->top = top;
99
- b->cur = top + used;
100
- b->size = new_size;
101
- xfree(old);
102
- }
103
-
104
- for(i = 0; i < argc; i++) {
105
- long str_len;
106
- str = argv[i];
107
- str_len = RSTRING_LEN(str);
108
- memcpy(b->cur, RSTRING_PTR(str), str_len);
109
- b->cur += str_len;
110
- }
111
-
112
- return self;
113
- }
114
-
115
- static VALUE buf_to_str(VALUE self) {
116
- struct buf_int* b;
117
- Data_Get_Struct(self, struct buf_int, b);
118
-
119
- return rb_str_new((const char*)(b->top), b->cur - b->top);
120
- }
121
-
122
- static VALUE buf_used(VALUE self) {
123
- struct buf_int* b;
124
- Data_Get_Struct(self, struct buf_int, b);
125
-
126
- return INT2FIX(b->cur - b->top);
127
- }
128
-
129
- static VALUE buf_capa(VALUE self) {
130
- struct buf_int* b;
131
- Data_Get_Struct(self, struct buf_int, b);
132
-
133
- return INT2FIX(b->size);
134
- }
135
-
136
- static VALUE buf_reset(VALUE self) {
137
- struct buf_int* b;
138
- Data_Get_Struct(self, struct buf_int, b);
139
-
140
- b->cur = b->top;
141
- return self;
142
- }
143
-
144
- void Init_io_buffer(VALUE puma) {
145
- VALUE buf = rb_define_class_under(puma, "IOBuffer", rb_cObject);
146
-
147
- rb_define_alloc_func(buf, buf_alloc);
148
- rb_define_method(buf, "<<", buf_append, 1);
149
- rb_define_method(buf, "append", buf_append2, -1);
150
- rb_define_method(buf, "to_str", buf_to_str, 0);
151
- rb_define_method(buf, "to_s", buf_to_str, 0);
152
- rb_define_method(buf, "used", buf_used, 0);
153
- rb_define_method(buf, "capacity", buf_capa, 0);
154
- rb_define_method(buf, "reset", buf_reset, 0);
155
- }
@@ -1,23 +0,0 @@
1
- require 'openssl'
2
-
3
- module OpenSSL
4
- module SSL
5
- class SSLServer
6
- unless public_method_defined? :accept_nonblock
7
- def accept_nonblock
8
- sock = @svr.accept_nonblock
9
-
10
- begin
11
- ssl = OpenSSL::SSL::SSLSocket.new(sock, @ctx)
12
- ssl.sync_close = true
13
- ssl.accept if @start_immediately
14
- ssl
15
- rescue SSLError => ex
16
- sock.close
17
- raise ex
18
- end
19
- end
20
- end
21
- end
22
- end
23
- end
data/lib/puma/compat.rb DELETED
@@ -1,14 +0,0 @@
1
- # Provides code to work properly on 1.8 and 1.9
2
-
3
- class String
4
- unless method_defined? :bytesize
5
- alias_method :bytesize, :size
6
- end
7
-
8
- unless method_defined? :byteslice
9
- def byteslice(*arg)
10
- enc = self.encoding
11
- self.dup.force_encoding(Encoding::ASCII_8BIT).slice(*arg).force_encoding(enc)
12
- end
13
- end
14
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'puma/launcher'
4
- require 'puma/configuration'
5
-
6
- module Puma
7
- def self.run(opts={})
8
- cfg = Puma::Configuration.new do |user_config|
9
- if port = opts[:port]
10
- user_config.port port
11
- end
12
-
13
- user_config.quiet
14
-
15
- yield c
16
- end
17
-
18
- cfg.clamp
19
-
20
- events = Puma::Events.null
21
-
22
- launcher = Puma::Launcher.new cfg, :events => events
23
- launcher.run
24
- end
25
- end
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Process
4
-
5
- # This overrides the default version because it is broken if it
6
- # exists.
7
-
8
- if respond_to? :daemon
9
- class << self
10
- remove_method :daemon
11
- end
12
- end
13
-
14
- def self.daemon(nochdir=false, noclose=false)
15
- exit if fork # Parent exits, child continues.
16
-
17
- Process.setsid # Become session leader.
18
-
19
- exit if fork # Zap session leader. See [1].
20
-
21
- Dir.chdir "/" unless nochdir # Release old working directory.
22
-
23
- if !noclose
24
- STDIN.reopen File.open("/dev/null", "r")
25
-
26
- null_out = File.open "/dev/null", "w"
27
- STDOUT.reopen null_out
28
- STDERR.reopen null_out
29
- end
30
-
31
- 0
32
- end
33
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Puma
4
- module Delegation
5
- def forward(what, who)
6
- module_eval <<-CODE
7
- def #{what}(*args, &block)
8
- #{who}.#{what}(*args, &block)
9
- end
10
- CODE
11
- end
12
- end
13
- end
@@ -1,47 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'java'
4
-
5
- # Conservative native JRuby/Java implementation of IOBuffer
6
- # backed by a ByteArrayOutputStream and conversion between
7
- # Ruby String and Java bytes
8
- module Puma
9
- class JavaIOBuffer < java.io.ByteArrayOutputStream
10
- field_reader :buf
11
- end
12
-
13
- class IOBuffer
14
- BUF_DEFAULT_SIZE = 4096
15
-
16
- def initialize
17
- @buf = JavaIOBuffer.new(BUF_DEFAULT_SIZE)
18
- end
19
-
20
- def reset
21
- @buf.reset
22
- end
23
-
24
- def <<(str)
25
- bytes = str.to_java_bytes
26
- @buf.write(bytes, 0, bytes.length)
27
- end
28
-
29
- def append(*strs)
30
- strs.each { |s| self << s; }
31
- end
32
-
33
- def to_s
34
- String.from_java_bytes @buf.to_byte_array
35
- end
36
-
37
- alias_method :to_str, :to_s
38
-
39
- def used
40
- @buf.size
41
- end
42
-
43
- def capacity
44
- @buf.buf.length
45
- end
46
- end
47
- end
@@ -1,33 +0,0 @@
1
- # :stopdoc:
2
-
3
- require 'uri/common'
4
-
5
- # Issue:
6
- # http://bugs.ruby-lang.org/issues/5925
7
- #
8
- # Relevant commit:
9
- # https://github.com/ruby/ruby/commit/edb7cdf1eabaff78dfa5ffedfbc2e91b29fa9ca1
10
-
11
-
12
- module URI
13
- begin
14
- 256.times do |i|
15
- TBLENCWWWCOMP_[i.chr] = '%%%02X' % i
16
- end
17
- TBLENCWWWCOMP_[' '] = '+'
18
- TBLENCWWWCOMP_.freeze
19
-
20
- 256.times do |i|
21
- h, l = i>>4, i&15
22
- TBLDECWWWCOMP_['%%%X%X' % [h, l]] = i.chr
23
- TBLDECWWWCOMP_['%%%x%X' % [h, l]] = i.chr
24
- TBLDECWWWCOMP_['%%%X%x' % [h, l]] = i.chr
25
- TBLDECWWWCOMP_['%%%x%x' % [h, l]] = i.chr
26
- end
27
- TBLDECWWWCOMP_['+'] = ' '
28
- TBLDECWWWCOMP_.freeze
29
- rescue Exception
30
- end
31
- end
32
-
33
- # :startdoc: