unicorn 5.0.1 → 5.1.0.pre1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 277fcaa980e2e0c38def0c8d5d2a62de55ad659d
4
- data.tar.gz: 315f01cb5df3ab7c606cc7071f457431161a34fb
3
+ metadata.gz: 9df0daaf5a74d108be366eda7182bae25ecb7b80
4
+ data.tar.gz: 87025c9cc3947d5e98048dc91d5d23326be35943
5
5
  SHA512:
6
- metadata.gz: 81284810b2b5fa7575737c865ced8e90491a22e24db092a15f381da8a802608e12c5c9a7beea5d99603cd2c167fb5ea5d937708b26c1e28f66ee80980a06b7ae
7
- data.tar.gz: 4ca0c767edc69c6e93b5b58329266ac81234ff1da9b4640a1c19bc97f3a3e9d8911727205e47a4ad1a89c328042096bd213a85a367717687e9adc715f635810b
6
+ metadata.gz: e63553c9e2cc2716183087db8c23e74e1c99a731781665519ab31d897f675dcedcf38b8bd830f3bb8dc4f87acefdb63f5792da7145bf957cfda924929bfce88e
7
+ data.tar.gz: 1c9a4e70ea6e7f67633c164273bb46dda949858050f902eb3c58ca78f7bb81f1286bc5665fe14d0732167e547d2328a272027efb82417105a855e61fd7985cd2
@@ -13,3 +13,6 @@ noindex:
13
13
  - unicorn_rails_1
14
14
  public_email: unicorn-public@bogomips.org
15
15
  private_email: unicorn@bogomips.org
16
+ nntp_url:
17
+ - nntp://news.public-inbox.org/inbox.comp.lang.ruby.unicorn
18
+ - nntp://news.gmane.org/gmane.comp.lang.ruby.unicorn.general
@@ -175,7 +175,6 @@ the unicorn config file.
175
175
 
176
176
  # SEE ALSO
177
177
 
178
- * unicorn_rails(1)
179
178
  * *Rack::Builder* ri/RDoc
180
179
  * *Unicorn::Configurator* ri/RDoc
181
180
  * [Unicorn RDoc][1]
@@ -4,7 +4,7 @@
4
4
 
5
5
  # NAME
6
6
 
7
- unicorn_rails - a script/server-like command to launch the Unicorn HTTP server
7
+ unicorn_rails - unicorn launcher for Rails 1.x and 2.x users
8
8
 
9
9
  # SYNOPSIS
10
10
 
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- DEF_VER = "v5.0.1"
2
+ DEF_VER = "v5.1.0.pre1"
3
3
  CONSTANT = "Unicorn::Const::UNICORN_VERSION"
4
4
  RVF = "lib/unicorn/version.rb"
5
5
  GVF = "GIT-VERSION-FILE"
data/HACKING CHANGED
@@ -57,7 +57,7 @@ Please wrap documentation at 72 characters-per-line or less (long URLs
57
57
  are exempt) so it is comfortably readable from terminals.
58
58
 
59
59
  When referencing mailing list posts, use
60
- "http://bogomips.org/unicorn-public/m/$MESSAGE_ID.html" if possible
60
+ <tt>http://bogomips.org/unicorn-public/$MESSAGE_ID/</tt> if possible
61
61
  since the Message-ID remains searchable even if a particular site
62
62
  becomes unavailable.
63
63
 
data/README CHANGED
@@ -13,7 +13,7 @@ both the the request and response in between unicorn and slow clients.
13
13
  {nginx}[http://nginx.org/] or {Rack}[http://rack.github.io/].
14
14
 
15
15
  * Compatible with Ruby 1.9.3 and later.
16
- unicorn 4.8.x will remain supported for Ruby 1.8 users.
16
+ unicorn 4.x remains supported for Ruby 1.8 users.
17
17
 
18
18
  * Process management: unicorn will reap and restart workers that
19
19
  die from broken apps. There is no need to manage multiple processes
@@ -60,7 +60,7 @@ both the the request and response in between unicorn and slow clients.
60
60
 
61
61
  == License
62
62
 
63
- unicorn is copyright 2009 by all contributors (see logs in git).
63
+ unicorn is copyright 2009-2016 by all contributors (see logs in git).
64
64
  It is based on Mongrel 1.1.5.
65
65
  Mongrel is copyright 2007 Zed A. Shaw and contributors.
66
66
 
@@ -68,7 +68,7 @@ unicorn is licensed under (your choice) of the GPLv2 or later
68
68
  (GPLv3+ preferred), or Ruby (1.8)-specific terms.
69
69
  See the included LICENSE file for details.
70
70
 
71
- unicorn is 100% Free Software.
71
+ unicorn is 100% Free Software (including all development tools used).
72
72
 
73
73
  == Install
74
74
 
@@ -85,10 +85,9 @@ You can get the latest source via git from the following locations
85
85
  git://bogomips.org/unicorn.git
86
86
  git://repo.or.cz/unicorn.git (mirror)
87
87
 
88
- You may browse the code from the web and download the latest snapshot
89
- tarballs here:
88
+ You may browse the code from the web:
90
89
 
91
- * http://bogomips.org/unicorn.git (cgit)
90
+ * http://bogomips.org/unicorn.git
92
91
  * http://repo.or.cz/w/unicorn.git (gitweb)
93
92
 
94
93
  See the HACKING guide on how to contribute and build prerelease gems
@@ -102,12 +101,6 @@ In APP_ROOT, run:
102
101
 
103
102
  unicorn
104
103
 
105
- === Ancient Rails 1.2 - 2.x versions
106
-
107
- In RAILS_ROOT, run:
108
-
109
- unicorn_rails
110
-
111
104
  unicorn will bind to all interfaces on TCP port 8080 by default.
112
105
  You may use the +--listen/-l+ switch to bind to a different
113
106
  address:port or a UNIX socket.
@@ -442,11 +442,31 @@ post_exec: /* "_out:" also goes here */
442
442
  assert(hp->offset <= len && "offset longer than length");
443
443
  }
444
444
 
445
+ static void hp_mark(void *ptr)
446
+ {
447
+ struct http_parser *hp = ptr;
448
+
449
+ rb_gc_mark(hp->buf);
450
+ rb_gc_mark(hp->env);
451
+ rb_gc_mark(hp->cont);
452
+ }
453
+
454
+ static size_t hp_memsize(const void *ptr)
455
+ {
456
+ return sizeof(struct http_parser);
457
+ }
458
+
459
+ static const rb_data_type_t hp_type = {
460
+ "unicorn_http",
461
+ { hp_mark, RUBY_TYPED_DEFAULT_FREE, hp_memsize, /* reserved */ },
462
+ /* parent, data, [ flags ] */
463
+ };
464
+
445
465
  static struct http_parser *data_get(VALUE self)
446
466
  {
447
467
  struct http_parser *hp;
448
468
 
449
- Data_Get_Struct(self, struct http_parser, hp);
469
+ TypedData_Get_Struct(self, struct http_parser, &hp_type, hp);
450
470
  assert(hp && "failed to extract http_parser struct");
451
471
  return hp;
452
472
  }
@@ -552,21 +572,12 @@ static void finalize_header(struct http_parser *hp)
552
572
  rb_hash_aset(hp->env, g_query_string, rb_str_new(NULL, 0));
553
573
  }
554
574
 
555
- static void hp_mark(void *ptr)
556
- {
557
- struct http_parser *hp = ptr;
558
-
559
- rb_gc_mark(hp->buf);
560
- rb_gc_mark(hp->env);
561
- rb_gc_mark(hp->cont);
562
- }
563
-
564
575
  static VALUE HttpParser_alloc(VALUE klass)
565
576
  {
566
577
  struct http_parser *hp;
567
- return Data_Make_Struct(klass, struct http_parser, hp_mark, -1, hp);
568
- }
569
578
 
579
+ return TypedData_Make_Struct(klass, struct http_parser, &hp_type, hp);
580
+ }
570
581
 
571
582
  /**
572
583
  * call-seq:
@@ -1,9 +1,14 @@
1
1
  # -*- encoding: binary -*-
2
2
  require 'etc'
3
3
  require 'stringio'
4
- require 'rack'
5
4
  require 'kgio'
6
5
 
6
+ begin
7
+ require 'rack'
8
+ rescue LoadError
9
+ warn 'rack not available, functionality reduced'
10
+ end
11
+
7
12
  # :stopdoc:
8
13
  # Unicorn module containing all of the classes (include C extensions) for
9
14
  # running a Unicorn web server. It contains a minimalist HTTP server with just
@@ -20,7 +25,9 @@ module Unicorn
20
25
  # application dispatch. This is always raised with an empty backtrace
21
26
  # since there is nothing in the application stack that is responsible
22
27
  # for client shutdowns/disconnects. This exception is visible to Rack
23
- # applications unless PrereadInput middleware is loaded.
28
+ # applications unless PrereadInput middleware is loaded. This
29
+ # is a subclass of the standard EOFError class and applications should
30
+ # not rescue it explicitly, but rescue EOFError instead.
24
31
  ClientShutdown = Class.new(EOFError)
25
32
 
26
33
  # :stopdoc:
@@ -32,6 +39,9 @@ module Unicorn
32
39
  def self.builder(ru, op)
33
40
  # allow Configurator to parse cli switches embedded in the ru file
34
41
  op = Unicorn::Configurator::RACKUP.merge!(:file => ru, :optparse => op)
42
+ if ru =~ /\.ru$/ && !defined?(Rack::Builder)
43
+ abort "rack and Rack::Builder must be available for processing #{ru}"
44
+ end
35
45
 
36
46
  # Op is going to get cleared before the returned lambda is called, so
37
47
  # save this value so that it's still there when we need it:
@@ -53,32 +63,33 @@ def self.builder(ru, op)
53
63
 
54
64
  return inner_app if no_default_middleware
55
65
 
66
+ middleware = { # order matters
67
+ ContentLength: nil,
68
+ Chunked: nil,
69
+ CommonLogger: [ $stderr ],
70
+ ShowExceptions: nil,
71
+ Lint: nil,
72
+ TempfileReaper: nil,
73
+ }
74
+
56
75
  # return value, matches rackup defaults based on env
57
76
  # Unicorn does not support persistent connections, but Rainbows!
58
77
  # and Zbatery both do. Users accustomed to the Rack::Server default
59
78
  # middlewares will need ContentLength/Chunked middlewares.
60
79
  case ENV["RACK_ENV"]
61
80
  when "development"
62
- Rack::Builder.new do
63
- use Rack::ContentLength
64
- use Rack::Chunked
65
- use Rack::CommonLogger, $stderr
66
- use Rack::ShowExceptions
67
- use Rack::Lint
68
- use Rack::TempfileReaper if Rack.const_defined?(:TempfileReaper)
69
- run inner_app
70
- end.to_app
71
81
  when "deployment"
72
- Rack::Builder.new do
73
- use Rack::ContentLength
74
- use Rack::Chunked
75
- use Rack::CommonLogger, $stderr
76
- use Rack::TempfileReaper if Rack.const_defined?(:TempfileReaper)
77
- run inner_app
78
- end.to_app
82
+ middleware.delete(:ShowExceptions)
83
+ middleware.delete(:Lint)
79
84
  else
80
- inner_app
85
+ return inner_app
81
86
  end
87
+ Rack::Builder.new do
88
+ middleware.each do |m, args|
89
+ use(Rack.const_get(m), *args) if Rack.const_defined?(m)
90
+ end
91
+ run inner_app
92
+ end.to_app
82
93
  end
83
94
  end
84
95
 
@@ -181,8 +181,6 @@ def before_exec(*args, &block)
181
181
  # to have nginx always retry backends that may have had workers
182
182
  # SIGKILL-ed due to timeouts.
183
183
  #
184
- # # See http://wiki.nginx.org/NginxHttpUpstreamModule for more details
185
- # # on nginx upstream configuration:
186
184
  # upstream unicorn_backend {
187
185
  # # for UNIX domain socket setups:
188
186
  # server unix:/path/to/.unicorn.sock fail_timeout=0;
@@ -192,6 +190,9 @@ def before_exec(*args, &block)
192
190
  # server 192.168.0.8:8080 fail_timeout=0;
193
191
  # server 192.168.0.9:8080 fail_timeout=0;
194
192
  # }
193
+ #
194
+ # See http://nginx.org/en/docs/http/ngx_http_upstream_module.html
195
+ # for more details on nginx upstream configuration.
195
196
  def timeout(seconds)
196
197
  set_int(:timeout, seconds, 3)
197
198
  # POSIX says 31 days is the smallest allowed maximum timeout for select()
@@ -10,10 +10,13 @@
10
10
  # is the job of Rack, with the exception of the "Date" and "Status" header.
11
11
  module Unicorn::HttpResponse
12
12
 
13
+ STATUS_CODES = defined?(Rack::Utils::HTTP_STATUS_CODES) ?
14
+ Rack::Utils::HTTP_STATUS_CODES : {}
15
+
13
16
  # internal API, code will always be common-enough-for-even-old-Rack
14
17
  def err_response(code, response_start_sent)
15
18
  "#{response_start_sent ? '' : 'HTTP/1.1 '}" \
16
- "#{code} #{Rack::Utils::HTTP_STATUS_CODES[code]}\r\n\r\n"
19
+ "#{code} #{STATUS_CODES[code]}\r\n\r\n"
17
20
  end
18
21
 
19
22
  # writes the rack_response to socket as an HTTP response
@@ -23,7 +26,7 @@ def http_response_write(socket, status, headers, body,
23
26
 
24
27
  if headers
25
28
  code = status.to_i
26
- msg = Rack::Utils::HTTP_STATUS_CODES[code]
29
+ msg = STATUS_CODES[code]
27
30
  start = response_start_sent ? ''.freeze : 'HTTP/1.1 '.freeze
28
31
  buf = "#{start}#{msg ? %Q(#{code} #{msg}) : status}\r\n" \
29
32
  "Date: #{httpdate}\r\n" \
@@ -36,7 +36,7 @@ class Unicorn::HttpServer
36
36
  # or even different installations of the same applications without
37
37
  # downtime. Keys of this constant Hash are described as follows:
38
38
  #
39
- # * 0 - the path to the unicorn/unicorn_rails executable
39
+ # * 0 - the path to the unicorn executable
40
40
  # * :argv - a deep copy of the ARGV array the executable originally saw
41
41
  # * :cwd - the working directory of the application, this is where
42
42
  # you originally started Unicorn.
@@ -45,7 +45,7 @@ class Unicorn::HttpServer
45
45
  # you can set the following in your Unicorn config file, HUP and then
46
46
  # continue with the traditional USR2 + QUIT upgrade steps:
47
47
  #
48
- # Unicorn::HttpServer::START_CTX[0] = "/home/bofh/2.2.0/bin/unicorn"
48
+ # Unicorn::HttpServer::START_CTX[0] = "/home/bofh/2.3.0/bin/unicorn"
49
49
  START_CTX = {
50
50
  :argv => ARGV.map(&:dup),
51
51
  0 => $0.dup,
@@ -851,4 +851,18 @@ def test_memory_leak
851
851
  File.readable?(LINUX_PROC_PID_STATUS) &&
852
852
  !defined?(RUBY_ENGINE)
853
853
 
854
+ def test_memsize
855
+ require 'objspace'
856
+ if ObjectSpace.respond_to?(:memsize_of)
857
+ n = ObjectSpace.memsize_of(Unicorn::HttpParser.new)
858
+ assert_kind_of Integer, n
859
+ # need to update this when 128-bit machines come out
860
+ # n.b. actual struct size on 64-bit is 56 bytes + 40 bytes for RVALUE
861
+ # Ruby <= 2.2 objspace did not count the 40-byte RVALUE, 2.3 does.
862
+ assert_operator n, :<=, 96
863
+ assert_operator n, :>, 0
864
+ end
865
+ rescue LoadError
866
+ # not all Ruby implementations have objspace
867
+ end
854
868
  end
@@ -31,16 +31,16 @@
31
31
  # version requirements here.
32
32
  s.required_ruby_version = '< 3.0'
33
33
 
34
- # for people that are absolutely stuck on Rails 2.3.2 and can't
35
- # up/downgrade to any other version, the Rack dependency may be
36
- # commented out. Nevertheless, upgrading to Rails 2.3.4 or later is
37
- # *strongly* recommended for security reasons.
38
- s.add_dependency(%q<rack>)
34
+ # We do not have a hard dependency on rack, it's possible to load
35
+ # things which respond to #call. HTTP status lines in responses
36
+ # won't have descriptive text, only the numeric status.
37
+ s.add_development_dependency(%q<rack>)
38
+
39
39
  s.add_dependency(%q<kgio>, '~> 2.6')
40
40
  s.add_dependency(%q<raindrops>, '~> 0.7')
41
41
 
42
42
  s.add_development_dependency('test-unit', '~> 3.0')
43
- s.add_development_dependency('olddoc', '~> 1.0')
43
+ s.add_development_dependency('olddoc', '~> 1.2')
44
44
 
45
45
  # Note: To avoid ambiguity, we intentionally avoid the SPDX-compatible
46
46
  # 'Ruby' here since Ruby 1.9.3 switched to BSD-2-Clause, but we
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unicorn
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.1
4
+ version: 5.1.0.pre1
5
5
  platform: ruby
6
6
  authors:
7
7
  - unicorn hackers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-17 00:00:00.000000000 Z
11
+ date: 2016-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -17,7 +17,7 @@ dependencies:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
- type: :runtime
20
+ type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '1.0'
75
+ version: '1.2'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '1.0'
82
+ version: '1.2'
83
83
  description: |-
84
84
  unicorn is an HTTP server for Rack applications designed to only serve
85
85
  fast clients on low-latency, high-bandwidth connections and take
@@ -296,12 +296,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
296
296
  version: '3.0'
297
297
  required_rubygems_version: !ruby/object:Gem::Requirement
298
298
  requirements:
299
- - - ">="
299
+ - - ">"
300
300
  - !ruby/object:Gem::Version
301
- version: '0'
301
+ version: 1.3.1
302
302
  requirements: []
303
303
  rubyforge_project:
304
- rubygems_version: 2.5.0
304
+ rubygems_version: 2.5.1
305
305
  signing_key:
306
306
  specification_version: 4
307
307
  summary: Rack HTTP server for fast clients and Unix