unicorn 5.5.0 → 6.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/.manifest +8 -5
  3. data/.olddoc.yml +15 -7
  4. data/CONTRIBUTORS +6 -2
  5. data/Documentation/.gitignore +1 -3
  6. data/Documentation/unicorn.1 +222 -0
  7. data/Documentation/unicorn_rails.1 +207 -0
  8. data/FAQ +1 -1
  9. data/GIT-VERSION-FILE +1 -1
  10. data/GIT-VERSION-GEN +1 -1
  11. data/GNUmakefile +112 -57
  12. data/HACKING +2 -9
  13. data/ISSUES +24 -31
  14. data/KNOWN_ISSUES +2 -2
  15. data/LATEST +16 -22
  16. data/Links +5 -5
  17. data/NEWS +155 -0
  18. data/README +15 -9
  19. data/SIGNALS +1 -1
  20. data/Sandbox +3 -3
  21. data/archive/slrnpull.conf +1 -1
  22. data/bin/unicorn_rails +2 -2
  23. data/examples/big_app_gc.rb +1 -1
  24. data/examples/logrotate.conf +2 -2
  25. data/examples/nginx.conf +1 -1
  26. data/examples/unicorn.conf.minimal.rb +2 -2
  27. data/examples/unicorn.conf.rb +2 -2
  28. data/examples/unicorn@.service +7 -0
  29. data/ext/unicorn_http/c_util.h +5 -13
  30. data/ext/unicorn_http/common_field_optimization.h +0 -1
  31. data/ext/unicorn_http/epollexclusive.h +124 -0
  32. data/ext/unicorn_http/ext_help.h +0 -24
  33. data/ext/unicorn_http/extconf.rb +2 -6
  34. data/ext/unicorn_http/global_variables.h +1 -1
  35. data/ext/unicorn_http/httpdate.c +1 -0
  36. data/ext/unicorn_http/unicorn_http.c +258 -228
  37. data/ext/unicorn_http/unicorn_http.rl +48 -18
  38. data/lib/unicorn/configurator.rb +13 -3
  39. data/lib/unicorn/http_request.rb +11 -1
  40. data/lib/unicorn/http_server.rb +56 -29
  41. data/lib/unicorn/oob_gc.rb +5 -5
  42. data/lib/unicorn/select_waiter.rb +6 -0
  43. data/lib/unicorn/tmpio.rb +8 -2
  44. data/lib/unicorn/version.rb +1 -1
  45. data/lib/unicorn.rb +4 -3
  46. data/man/man1/unicorn.1 +89 -88
  47. data/man/man1/unicorn_rails.1 +78 -83
  48. data/t/GNUmakefile +3 -72
  49. data/t/README +1 -1
  50. data/t/test-lib.sh +2 -1
  51. data/test/benchmark/README +14 -4
  52. data/test/benchmark/ddstream.ru +50 -0
  53. data/test/benchmark/readinput.ru +40 -0
  54. data/test/benchmark/uconnect.perl +66 -0
  55. data/test/exec/test_exec.rb +14 -12
  56. data/test/test_helper.rb +38 -30
  57. data/test/unit/test_ccc.rb +4 -3
  58. data/test/unit/test_http_parser_ng.rb +81 -0
  59. data/test/unit/test_server.rb +81 -7
  60. data/test/unit/test_signals.rb +6 -6
  61. data/test/unit/test_socket_helper.rb +1 -1
  62. data/test/unit/test_upload.rb +9 -14
  63. data/test/unit/test_util.rb +5 -4
  64. data/test/unit/test_waiter.rb +34 -0
  65. data/unicorn.gemspec +8 -7
  66. metadata +16 -11
  67. data/Documentation/GNUmakefile +0 -30
  68. data/Documentation/unicorn.1.txt +0 -187
  69. data/Documentation/unicorn_rails.1.txt +0 -175
  70. data/t/hijack.ru +0 -55
  71. data/t/t0200-rack-hijack.sh +0 -51
data/GNUmakefile CHANGED
@@ -10,6 +10,7 @@ RAGEL = ragel
10
10
  RSYNC = rsync
11
11
  OLDDOC = olddoc
12
12
  RDOC = rdoc
13
+ INSTALL = install
13
14
 
14
15
  GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE
15
16
  @./GIT-VERSION-GEN
@@ -25,7 +26,38 @@ endif
25
26
 
26
27
  RUBY_ENGINE := $(shell $(RUBY) -e 'puts((RUBY_ENGINE rescue "ruby"))')
27
28
 
28
- MYLIBS = $(RUBYLIB)
29
+ # we should never package more than one ext to avoid DSO proliferation:
30
+ # https://udrepper.livejournal.com/8790.html
31
+ ext := $(firstword $(wildcard ext/*))
32
+
33
+ ragel: $(ext)/unicorn_http.c
34
+
35
+ rl_files := $(wildcard $(ext)/*.rl)
36
+ ragel: $(ext)/unicorn_http.c
37
+ $(ext)/unicorn_http.c: $(rl_files)
38
+ cd $(@D) && $(RAGEL) unicorn_http.rl -C $(RLFLAGS) -o $(@F)
39
+ ext_pfx := test/$(RUBY_ENGINE)-$(RUBY_VERSION)
40
+ tmp_bin := $(ext_pfx)/bin
41
+ ext_h := $(wildcard $(ext)/*/*.h $(ext)/*.h)
42
+ ext_src := $(sort $(wildcard $(ext)/*.c) $(ext_h) $(ext)/unicorn_http.c)
43
+ ext_pfx_src := $(addprefix $(ext_pfx)/,$(ext_src))
44
+ ext_dir := $(ext_pfx)/$(ext)
45
+ $(ext)/extconf.rb:
46
+ @>>$@
47
+ $(ext_dir) $(tmp_bin) man/man1 doc/man1 pkg t/trash:
48
+ @mkdir -p $@
49
+ $(ext_pfx)/$(ext)/%: $(ext)/% | $(ext_dir)
50
+ $(INSTALL) -m 644 $< $@
51
+ $(ext_pfx)/$(ext)/Makefile: $(ext)/extconf.rb | $(ext_dir)
52
+ $(RM) -f $(@D)/*.o
53
+ cd $(@D) && $(RUBY) $(CURDIR)/$(ext)/extconf.rb $(EXTCONF_ARGS)
54
+ ext_sfx := _ext.$(DLEXT)
55
+ ext_dl := $(ext_pfx)/$(ext)/$(notdir $(ext)_ext.$(DLEXT))
56
+ $(ext_dl): $(ext_src) $(ext_pfx_src) $(ext_pfx)/$(ext)/Makefile
57
+ $(MAKE) -C $(@D)
58
+ lib := $(CURDIR)/lib:$(CURDIR)/$(ext_pfx)/$(ext)
59
+ http build: $(ext_dl)
60
+ $(ext_pfx)/$(ext)/unicorn_http.c: ext/unicorn_http/unicorn_http.c
29
61
 
30
62
  # dunno how to implement this as concisely in Ruby, and hell, I love awk
31
63
  awk_slow := awk '/def test_/{print FILENAME"--"$$2".n"}' 2>/dev/null
@@ -37,44 +69,21 @@ T := $(filter-out $(slow_tests), $(wildcard test/*/test*.rb))
37
69
  T_n := $(shell $(awk_slow) $(slow_tests))
38
70
  T_log := $(subst .rb,$(log_suffix),$(T))
39
71
  T_n_log := $(subst .n,$(log_suffix),$(T_n))
40
- test_prefix = $(CURDIR)/test/$(RUBY_ENGINE)-$(RUBY_VERSION)
41
72
 
42
- ext := ext/unicorn_http
43
- c_files := $(ext)/unicorn_http.c $(ext)/httpdate.c $(wildcard $(ext)/*.h)
44
- rl_files := $(wildcard $(ext)/*.rl)
45
73
  base_bins := unicorn unicorn_rails
46
74
  bins := $(addprefix bin/, $(base_bins))
47
75
  man1_rdoc := $(addsuffix _1, $(base_bins))
48
76
  man1_bins := $(addsuffix .1, $(base_bins))
49
77
  man1_paths := $(addprefix man/man1/, $(man1_bins))
50
- rb_files := $(bins) $(shell find lib ext -type f -name '*.rb')
51
- inst_deps := $(c_files) $(rb_files) GNUmakefile test/test_helper.rb
78
+ tmp_bins = $(addprefix $(tmp_bin)/, unicorn unicorn_rails)
79
+ pid := $(shell echo $$PPID)
52
80
 
53
- ragel: $(ext)/unicorn_http.c
54
- $(ext)/unicorn_http.c: $(rl_files)
55
- cd $(@D) && $(RAGEL) unicorn_http.rl -C $(RLFLAGS) -o $(@F)
56
- $(ext)/Makefile: $(ext)/extconf.rb $(c_files)
57
- cd $(@D) && $(RUBY) extconf.rb
58
- $(ext)/unicorn_http.$(DLEXT): $(ext)/Makefile
59
- $(MAKE) -C $(@D)
60
- http: $(ext)/unicorn_http.$(DLEXT)
61
-
62
- # only used for tests
63
- http-install: $(ext)/unicorn_http.$(DLEXT)
64
- install -m644 $< lib/
81
+ $(tmp_bin)/%: bin/% | $(tmp_bin)
82
+ $(INSTALL) -m 755 $< $@.$(pid)
83
+ $(MRI) -i -p -e '$$_.gsub!(%r{^#!.*$$},"#!$(ruby_bin)")' $@.$(pid)
84
+ mv $@.$(pid) $@
65
85
 
66
- test-install: $(test_prefix)/.stamp
67
- $(test_prefix)/.stamp: $(inst_deps)
68
- mkdir -p $(test_prefix)/.ccache
69
- tar cf - $(inst_deps) GIT-VERSION-GEN | \
70
- (cd $(test_prefix) && tar xf -)
71
- $(MAKE) -C $(test_prefix) clean
72
- $(MAKE) -C $(test_prefix) http-install shebang RUBY="$(RUBY)"
73
- > $@
74
-
75
- # this is only intended to be run within $(test_prefix)
76
- shebang: $(bins)
77
- $(MRI) -i -p -e '$$_.gsub!(%r{^#!.*$$},"#!$(ruby_bin)")' $^
86
+ bins: $(tmp_bins)
78
87
 
79
88
  t_log := $(T_log) $(T_n_log)
80
89
  test: $(T) $(T_n)
@@ -83,15 +92,54 @@ test: $(T) $(T_n)
83
92
 
84
93
  test-exec: $(wildcard test/exec/test_*.rb)
85
94
  test-unit: $(wildcard test/unit/test_*.rb)
86
- $(slow_tests): $(test_prefix)/.stamp
95
+ $(slow_tests): $(ext_dl)
87
96
  @$(MAKE) $(shell $(awk_slow) $@)
88
97
 
89
98
  # ensure we can require just the HTTP parser without the rest of unicorn
90
- test-require: $(ext)/unicorn_http.$(DLEXT)
91
- $(RUBY) --disable-gems -I$(ext) -runicorn_http -e Unicorn
99
+ test-require: $(ext_dl)
100
+ $(RUBY) --disable-gems -I$(ext_pfx)/$(ext) -runicorn_http -e Unicorn
101
+
102
+ test_prereq := $(tmp_bins) $(ext_dl)
103
+
104
+ SH_TEST_OPTS =
105
+ ifdef V
106
+ ifeq ($(V),2)
107
+ SH_TEST_OPTS += --trace
108
+ else
109
+ SH_TEST_OPTS += --verbose
110
+ endif
111
+ endif
92
112
 
93
- test-integration: $(test_prefix)/.stamp
94
- $(MAKE) -C t
113
+ # do we trust Ruby behavior to be stable? some tests are
114
+ # (mostly) POSIX sh (not bash or ksh93, so no "set -o pipefail"
115
+ # TRACER = strace -f -o $(t_pfx).strace -s 100000
116
+ # TRACER = /usr/bin/time -o $(t_pfx).time
117
+ t_pfx = trash/$@-$(RUBY_ENGINE)-$(RUBY_VERSION)
118
+ T_sh = $(wildcard t/t[0-9][0-9][0-9][0-9]-*.sh)
119
+ $(T_sh): export RUBY := $(RUBY)
120
+ $(T_sh): export PATH := $(CURDIR)/$(tmp_bin):$(PATH)
121
+ $(T_sh): export RUBYLIB := $(lib):$(RUBYLIB)
122
+ $(T_sh): dep $(test_prereq) t/random_blob t/trash/.gitignore
123
+ cd t && $(TRACER) $(SHELL) $(SH_TEST_OPTS) $(@F) $(TEST_OPTS)
124
+
125
+ t/trash/.gitignore : | t/trash
126
+ echo '*' >$@
127
+
128
+ dependencies := socat curl
129
+ deps := $(addprefix t/.dep+,$(dependencies))
130
+ $(deps): dep_bin = $(lastword $(subst +, ,$@))
131
+ $(deps):
132
+ @which $(dep_bin) > $@.$(pid) 2>/dev/null || :
133
+ @test -s $@.$(pid) || \
134
+ { echo >&2 "E '$(dep_bin)' not found in PATH=$(PATH)"; exit 1; }
135
+ @mv $@.$(pid) $@
136
+ dep: $(deps)
137
+
138
+ t/random_blob:
139
+ dd if=/dev/urandom bs=1M count=30 of=$@.$(pid)
140
+ mv $@.$(pid) $@
141
+
142
+ test-integration: $(T_sh)
95
143
 
96
144
  check: test-require test test-integration
97
145
  test-all: check
@@ -122,16 +170,16 @@ run_test = $(quiet_pre) \
122
170
 
123
171
  %.n: arg = $(subst .n,,$(subst --, -n ,$@))
124
172
  %.n: t = $(subst .n,$(log_suffix),$@)
125
- %.n: export PATH := $(test_prefix)/bin:$(PATH)
126
- %.n: export RUBYLIB := $(test_prefix)/lib:$(MYLIBS)
127
- %.n: $(test_prefix)/.stamp
173
+ %.n: export PATH := $(CURDIR)/$(tmp_bin):$(PATH)
174
+ %.n: export RUBYLIB := $(lib):$(RUBYLIB)
175
+ %.n: $(test_prereq)
128
176
  $(run_test)
129
177
 
130
178
  $(T): arg = $@
131
179
  $(T): t = $(subst .rb,$(log_suffix),$@)
132
- $(T): export PATH := $(test_prefix)/bin:$(PATH)
133
- $(T): export RUBYLIB := $(test_prefix)/lib:$(MYLIBS)
134
- $(T): $(test_prefix)/.stamp
180
+ $(T): export PATH := $(CURDIR)/$(tmp_bin):$(PATH)
181
+ $(T): export RUBYLIB := $(lib):$(RUBYLIB)
182
+ $(T): $(test_prereq)
135
183
  $(run_test)
136
184
 
137
185
  install: $(bins) $(ext)/unicorn_http.c
@@ -150,13 +198,21 @@ prep_setup_rb := @-$(RM) $(setup_rb_files);$(MAKE) -C $(ext) clean
150
198
 
151
199
  clean:
152
200
  -$(MAKE) -C $(ext) clean
153
- -$(MAKE) -C Documentation clean
154
201
  $(RM) $(ext)/Makefile
155
202
  $(RM) $(setup_rb_files) $(t_log)
156
- $(RM) -r $(test_prefix) man
203
+ $(RM) -r $(ext_pfx) man t/trash
204
+ $(RM) $(html1)
205
+
206
+ man1 := $(addprefix Documentation/, unicorn.1 unicorn_rails.1)
207
+ html1 := $(addsuffix .html, $(man1))
208
+ man : $(man1) | man/man1
209
+ $(INSTALL) -m 644 $(man1) man/man1
210
+
211
+ html : $(html1) | doc/man1
212
+ $(INSTALL) -m 644 $(html1) doc/man1
157
213
 
158
- man html:
159
- $(MAKE) -C Documentation install-$@
214
+ %.1.html: %.1
215
+ $(OLDDOC) man2html -o $@ ./$<
160
216
 
161
217
  pkg_extra := GIT-VERSION-FILE lib/unicorn/version.rb LATEST NEWS \
162
218
  $(ext)/unicorn_http.c $(man1_paths)
@@ -175,21 +231,22 @@ doc: .document $(ext)/unicorn_http.c man html .olddoc.yml $(PLACEHOLDERS)
175
231
  find bin lib -type f -name '*.rbc' -exec rm -f '{}' ';'
176
232
  $(RM) -r doc
177
233
  $(OLDDOC) prepare
178
- $(RDOC) -f oldweb
234
+ $(RDOC) -f dark216
179
235
  $(OLDDOC) merge
180
- install -m644 COPYING doc/COPYING
181
- install -m644 NEWS.atom.xml doc/NEWS.atom.xml
182
- install -m644 $(shell LC_ALL=C grep '^[A-Z]' .document) doc/
183
- install -m644 $(man1_paths) doc/
236
+ $(INSTALL) -m 644 COPYING doc/COPYING
237
+ $(INSTALL) -m 644 NEWS.atom.xml doc/NEWS.atom.xml
238
+ $(INSTALL) -m 644 $(shell LC_ALL=C grep '^[A-Z]' .document) doc/
239
+ $(INSTALL) -m 644 $(man1_paths) doc/
184
240
  tar cf - $$(git ls-files examples/) | (cd doc && tar xf -)
185
241
 
186
- # publishes docs to https://bogomips.org/unicorn/
242
+ # publishes docs to https://yhbt.net/unicorn/
187
243
  publish_doc:
188
244
  -git set-file-times
189
245
  $(MAKE) doc
190
246
  $(MAKE) doc_gz
191
247
  chmod 644 $$(find doc -type f)
192
- $(RSYNC) -av doc/ bogomips.org:/srv/bogomips/unicorn/
248
+ $(RSYNC) -av doc/ yhbt.net:/srv/yhbt/unicorn/ \
249
+ --exclude index.html* --exclude created.rid*
193
250
  git ls-files | xargs touch
194
251
 
195
252
  # Create gzip variants of the same timestamp as the original so nginx
@@ -221,9 +278,8 @@ gem: $(pkggem)
221
278
  install-gem: $(pkggem)
222
279
  gem install --local $(CURDIR)/$<
223
280
 
224
- $(pkggem): .manifest fix-perms
281
+ $(pkggem): .manifest fix-perms | pkg
225
282
  gem build $(rfpackage).gemspec
226
- mkdir -p pkg
227
283
  mv $(@F) $@
228
284
 
229
285
  $(pkgtgz): distdir = $(basename $@)
@@ -254,5 +310,4 @@ check-warnings:
254
310
  do $(RUBY) --disable-gems -d -W2 -c \
255
311
  $$i; done) | grep -v '^Syntax OK$$' || :
256
312
 
257
- .PHONY: .FORCE-GIT-VERSION-FILE doc $(T) $(slow_tests) man
258
- .PHONY: test-install
313
+ .PHONY: .FORCE-GIT-VERSION-FILE doc $(T) $(slow_tests) man $(T_sh) clean
data/HACKING CHANGED
@@ -50,20 +50,17 @@ programming experience will come in handy (or be learned) here.
50
50
 
51
51
  === Documentation
52
52
 
53
- Due to the lack of RDoc-to-manpage converters we know about, we're
54
- writing manpages in Markdown and converting to troff/HTML with Pandoc.
55
-
56
53
  Please wrap documentation at 72 characters-per-line or less (long URLs
57
54
  are exempt) so it is comfortably readable from terminals.
58
55
 
59
56
  When referencing mailing list posts, use
60
- <tt>https://bogomips.org/unicorn-public/$MESSAGE_ID/</tt> if possible
57
+ <tt>https://yhbt.net/unicorn-public/$MESSAGE_ID/</tt> if possible
61
58
  since the Message-ID remains searchable even if a particular site
62
59
  becomes unavailable.
63
60
 
64
61
  === Ruby/C Compatibility
65
62
 
66
- We target mainline Ruby 1.9.3 and later. We need the Ruby
63
+ We target C Ruby 2.0 and later. We need the Ruby
67
64
  implementation to support fork, exec, pipe, UNIX signals, access to
68
65
  integer file descriptors and ability to use unlinked files.
69
66
 
@@ -102,10 +99,6 @@ don't email the git mailing list or maintainer with Unicorn patches :)
102
99
 
103
100
  == Building a Gem
104
101
 
105
- In order to build the gem, you must install the following components:
106
-
107
- * pandoc
108
-
109
102
  You can build the Unicorn gem with the following command:
110
103
 
111
104
  gmake gem
data/ISSUES CHANGED
@@ -1,9 +1,9 @@
1
1
  = Issues
2
2
 
3
- mailto:unicorn-public@bogomips.org is the best place to report bugs,
3
+ mailto:unicorn-public@yhbt.net is the best place to report bugs,
4
4
  submit patches and/or obtain support after you have searched the
5
- {email archives}[https://bogomips.org/unicorn-public/] and
6
- {documentation}[https://bogomips.org/unicorn/].
5
+ {email archives}[https://yhbt.net/unicorn-public/] and
6
+ {documentation}[https://yhbt.net/unicorn/].
7
7
 
8
8
  * No subscription will ever be required to email us
9
9
  * Cc: all participants in a thread or commit, as subscription is optional
@@ -12,14 +12,18 @@ submit patches and/or obtain support after you have searched the
12
12
  * Do not send HTML mail or images,
13
13
  they hurt reader privacy and will be flagged as spam
14
14
  * Anonymous and pseudonymous messages will ALWAYS be welcome
15
- * The email submission port (587) is enabled on the bogomips.org MX:
16
- https://bogomips.org/unicorn-public/20141004232241.GA23908@dcvr.yhbt.net/t/
15
+ * The email submission port (587) is enabled on the yhbt.net MX:
16
+ https://yhbt.net/unicorn-public/20141004232241.GA23908@dcvr.yhbt.net/t/
17
17
 
18
18
  We will never have a centralized or formal bug tracker. Instead we
19
19
  can interoperate with any bug tracker which can Cc: us plain-text to
20
- mailto:unicorn-public@bogomips.org This includes the Debian BTS
20
+ mailto:unicorn-public@yhbt.net This includes the Debian BTS
21
21
  at https://bugs.debian.org/unicorn and possibly others.
22
22
 
23
+ unicorn is a server; it does not depend on graphics/audio. Nobody
24
+ communicating with us will ever be expected to go through the trouble
25
+ of setting up graphics nor audio support.
26
+
23
27
  If your issue is of a sensitive nature or you're just shy in public,
24
28
  use anonymity tools such as Tor or Mixmaster; and rely on the public
25
29
  mail archives for responses. Be sure to scrub sensitive log messages
@@ -73,32 +77,21 @@ document distributed with git) on guidelines for patch submission.
73
77
 
74
78
  == Contact Info
75
79
 
76
- * public: mailto:unicorn-public@bogomips.org
77
- * nntp://news.gmane.org/gmane.comp.lang.ruby.unicorn.general
78
- * nntp://news.public-inbox.org/inbox.comp.lang.ruby.unicorn
79
- * https://bogomips.org/unicorn-public/
80
- * http://ou63pmih66umazou.onion/unicorn-public/
81
-
82
- Mailing list subscription is optional, so Cc: all participants.
83
-
84
- You can follow along via NNTP (read-only):
85
-
86
- nntp://news.public-inbox.org/inbox.comp.lang.ruby.unicorn
87
- nntp://news.gmane.org/gmane.comp.lang.ruby.unicorn.general
88
-
89
- Or Atom feeds:
90
-
91
- https://bogomips.org/unicorn-public/new.atom
92
- http://ou63pmih66umazou.onion/unicorn-public/new.atom
80
+ Mail is publicly-archived, SMTP subscription is discouraged to avoid
81
+ servers being a single-point-of-failure, so Cc: all participants.
93
82
 
94
- The HTML archives at https://bogomips.org/unicorn-public/
95
- also has links to per-thread Atom feeds and downloadable
96
- mboxes.
83
+ The HTTP(S) archives have links to per-thread Atom feeds and downloadable
84
+ mboxes. Read-only IMAP(S) folders and NNTP(S) newsgroups are also available.
97
85
 
98
- You may optionally subscribe via plain-text email:
86
+ * https://yhbt.net/unicorn-public/
87
+ * http://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/unicorn-public/
88
+ * imaps://yhbt.net/inbox.comp.lang.ruby.unicorn.0
89
+ * imap://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/inbox.comp.lang.ruby.unicorn.0
90
+ * nntps://news.public-inbox.org/inbox.comp.lang.ruby.unicorn
91
+ * nntp://news.gmane.io/gmane.comp.lang.ruby.unicorn.general
99
92
 
100
- mailto:unicorn-public+subscribe@bogomips.org
101
- (and confirming the auto-reply)
93
+ Full Atom feeds:
94
+ * https://yhbt.net/unicorn-public/new.atom
95
+ * http://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/unicorn-public/new.atom
102
96
 
103
- Just keep in mind we suck at delivering email, so using NNTP,
104
- or Atom feeds might be a better bet...
97
+ We only accept plain-text mail: mailto:unicorn-public@yhbt.net
data/KNOWN_ISSUES CHANGED
@@ -9,7 +9,7 @@ acceptable solution. Those issues are documented here.
9
9
  handlers.
10
10
 
11
11
  * Issues with FreeBSD jails can be worked around as documented by Tatsuya Ono:
12
- https://bogomips.org/unicorn-public/CAHBuKRj09FdxAgzsefJWotexw-7JYZGJMtgUp_dhjPz9VbKD6Q@mail.gmail.com/
12
+ https://yhbt.net/unicorn-public/CAHBuKRj09FdxAgzsefJWotexw-7JYZGJMtgUp_dhjPz9VbKD6Q@mail.gmail.com/
13
13
 
14
14
  * PRNGs (pseudo-random number generators) loaded before forking
15
15
  (e.g. "preload_app true") may need to have their internal state
@@ -60,7 +60,7 @@ acceptable solution. Those issues are documented here.
60
60
  application to use Rails 2.3.2 and you have no other choice, then
61
61
  you may edit your unicorn gemspec and remove the Rack dependency.
62
62
 
63
- ref: https://bogomips.org/unicorn-public/20091014221552.GA30624@dcvr.yhbt.net/
63
+ ref: https://yhbt.net/unicorn-public/20091014221552.GA30624@dcvr.yhbt.net/
64
64
  Note: the workaround described in the article above only made
65
65
  the issue more subtle and we didn't notice them immediately.
66
66
 
data/LATEST CHANGED
@@ -1,30 +1,24 @@
1
- === unicorn 5.5.0.pre1 / 2018-12-20 20:11 UTC
1
+ === unicorn 6.0.0 - no more recycling Rack env / 2021-03-17 06:38 UTC
2
2
 
3
- Jeremy Evans contributed the "default_middleware" configuration option:
3
+ This release allocates a new Rack `env' hash for every request.
4
+ This is done for safety with internally-(thread|event)-using Rack
5
+ apps which expect to use `env' after the normal Rack response is
6
+ complete, but without relying on rack.hijack[1]. Thanks to
7
+ Dirkjan Bussink <d.bussink@gmail.com> for the patch:
4
8
 
5
- https://bogomips.org/unicorn-public/20180913192055.GD48926@jeremyevans.local/
9
+ https://yhbt.net/unicorn-public/66A68DD8-83EF-4C7A-80E8-3F1F7AB31670@github.com/
6
10
 
7
- Jeremy also contributed the ability to use separate groups for the process
8
- and log files:
11
+ The major version is bumped since:
9
12
 
10
- https://bogomips.org/unicorn-public/20180913192449.GE48926@jeremyevans.local/
13
+ 1) there are performance regressions for some simple Rack apps
11
14
 
12
- There's also a couple of uninteresting minor optimizations and
13
- documentation additions.
15
+ 2) unsupported 3rd-party monkey patches which previously
16
+ relied on this behavior may be broken (our version of
17
+ OobGC was).
14
18
 
15
- Eric Wong (10):
16
- remove random seed reset atfork
17
- use IO#wait instead of kgio_wait_readable
18
- Merge branch '5.4-stable'
19
- shrink pipes under Linux
20
- socket_helper: add hint for FreeBSD users for accf_http(9)
21
- tests: ensure -N/--no-default-middleware not supported in config.ru
22
- doc: update more URLs to use HTTPS and avoid redirects
23
- deduplicate strings VM-wide in Ruby 2.5+
24
- doc/ISSUES: add links to git clone-able mail archives of our dependencies
25
- README: minor updates and additional disclaimer
19
+ The test suite is also more reliable on multi-core systems
20
+ and Ruby 3.x.
26
21
 
27
- Jeremy Evans (2):
28
- Make Worker#user support different process primary group and log file group
29
- Support default_middleware configuration option
22
+ [1] thread from 2017 around rack.hijack safety:
23
+ https://yhbt.net/unicorn-public/CAAtdryPG3nLuyo0jxfYW1YHu1Q+ZpkLkd4KdWC8vA46B5haZxw@mail.gmail.com/
30
24
 
data/Links CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  If you're interested in unicorn, you may be interested in some of the projects
4
4
  listed below. If you have any links to add/change/remove, please tell us at
5
- mailto:unicorn-public@bogomips.org!
5
+ mailto:unicorn-public@yhbt.net!
6
6
 
7
7
  == Disclaimer
8
8
 
@@ -23,10 +23,10 @@ or services behind them.
23
23
  * {golden_brindle}[https://github.com/simonoff/golden_brindle] - tool to
24
24
  manage multiple unicorn instances/applications on a single server
25
25
 
26
- * {raindrops}[https://bogomips.org/raindrops/] - real-time stats for
26
+ * {raindrops}[https://yhbt.net/raindrops/] - real-time stats for
27
27
  preforking Rack servers
28
28
 
29
- * {UnXF}[https://bogomips.org/unxf/] Un-X-Forward* the Rack environment,
29
+ * {UnXF}[https://yhbt.net/unxf/] Un-X-Forward* the Rack environment,
30
30
  useful since unicorn is designed to be deployed behind a reverse proxy.
31
31
 
32
32
  === unicorn is written to work with
@@ -52,7 +52,7 @@ or services behind them.
52
52
  * {Mongrel}[https://rubygems.org/gems/mongrel] - the awesome webserver
53
53
  unicorn is based on. A historical archive of the mongrel dev list
54
54
  featuring early discussions of unicorn is available at:
55
- https://bogomips.org/mongrel-devel/
55
+ https://yhbt.net/mongrel-devel/
56
56
 
57
- * {david}[https://bogomips.org/david.git] - a tool to explain why you need
57
+ * {david}[https://yhbt.net/david.git] - a tool to explain why you need
58
58
  nginx in front of unicorn
data/NEWS CHANGED
@@ -1,3 +1,158 @@
1
+ === unicorn 6.0.0 - no more recycling Rack env / 2021-03-17 06:38 UTC
2
+
3
+ This release allocates a new Rack `env' hash for every request.
4
+ This is done for safety with internally-(thread|event)-using Rack
5
+ apps which expect to use `env' after the normal Rack response is
6
+ complete, but without relying on rack.hijack[1]. Thanks to
7
+ Dirkjan Bussink <d.bussink@gmail.com> for the patch:
8
+
9
+ https://yhbt.net/unicorn-public/66A68DD8-83EF-4C7A-80E8-3F1F7AB31670@github.com/
10
+
11
+ The major version is bumped since:
12
+
13
+ 1) there are performance regressions for some simple Rack apps
14
+
15
+ 2) unsupported 3rd-party monkey patches which previously
16
+ relied on this behavior may be broken (our version of
17
+ OobGC was).
18
+
19
+ The test suite is also more reliable on multi-core systems
20
+ and Ruby 3.x.
21
+
22
+ [1] thread from 2017 around rack.hijack safety:
23
+ https://yhbt.net/unicorn-public/CAAtdryPG3nLuyo0jxfYW1YHu1Q+ZpkLkd4KdWC8vA46B5haZxw@mail.gmail.com/
24
+
25
+ === unicorn 5.8.0 - rack.after_reply support / 2020-12-24 20:39 UTC
26
+
27
+ This release supports env['rack.after_reply'] which allows
28
+ rack middleware to pass lambdas to be executed after the client
29
+ connection is closed, matching functionality in Puma.
30
+
31
+ Thanks to Blake Williams for this patch:
32
+ https://yhbt.net/unicorn-public/9873E53C-04D3-4759-9678-CA17DBAEF7B7@blakewilliams.me/
33
+
34
+ The top-level of our website is now simpler and no longer
35
+ redundant with the contents of https://yhbt.net/unicorn/README.html
36
+ (which contains the old content)
37
+
38
+ === unicorn 5.7.0 / 2020-09-08 08:41 UTC
39
+
40
+ Relaxed Ruby version requirements for Ruby 3.0.0dev.
41
+ Thanks to Jean Boussier for testing
42
+
43
+ === unicorn 5.6.0 - early_hints support / 2020-07-26 01:52 UTC
44
+
45
+ This release adds support for the early_hints configurator
46
+ directive for the 'rack.early_hints' API used by Rails 5.2+.
47
+
48
+ Thanks to Jean Boussier for the patch.
49
+
50
+ Link: https://yhbt.net/unicorn-public/242F0859-0F83-4F14-A0FF-5BE392BB01E6@shopify.com/
51
+
52
+ === unicorn 5.5.5 / 2020-04-27 02:48 UTC
53
+
54
+ This release fixes a bug for users of multiple listeners setups
55
+ where a busy listen socket could starve other listeners.
56
+
57
+ Thanks to Stan Hu for reporting and testing.
58
+
59
+ No need to upgrade if you're using a single listen socket.
60
+
61
+ Link: https://yhbt.net/unicorn-public/CAMBWrQ=Yh42MPtzJCEO7XryVknDNetRMuA87irWfqVuLdJmiBQ@mail.gmail.com/
62
+
63
+ === unicorn 5.5.4 / 2020-03-24 22:10 UTC
64
+
65
+ One change to improve RFC 7230 conformance in the HTTP parser:
66
+
67
+ https://yhbt.net/unicorn-public/20200319022823.32472-1-bofh@yhbt.net/
68
+
69
+ === unicorn 5.5.3 / 2020-01-31 20:39 UTC
70
+
71
+ Documentation updates to switch bogomips.org to yhbt.net since
72
+ the .org TLD won't be affordable in the near future.
73
+
74
+ There's also a few minor test cleanups.
75
+
76
+ === unicorn 5.5.2 / 2019-12-20 02:08 UTC
77
+
78
+ Thanks to Terry Scheingeld, we now workaround a Ruby bug
79
+ and can now run with taint checks enabled:
80
+ <https://bugs.ruby-lang.org/issues/14485>
81
+ <https://bogomips.org/unicorn-public/CABg1sXrvGv9G6CDQxePDUqTe6N-5UpLXm7eG3YQO=dda-Cgg7A@mail.gmail.com/>
82
+
83
+ There's also a few documentation updates and building packages
84
+ from source is easier since pandoc is no longer a dependency
85
+ (and I can no longer afford the bandwidth or space to install
86
+ it).
87
+
88
+ Eric Wong (7):
89
+ test/benchmark/ddstream: demo for slowly reading clients
90
+ test/benchmark/readinput: demo for slowly uploading clients
91
+ test/benchmark/uconnect: test for accept loop speed
92
+ examples/unicorn@.service: note the NonBlocking flag
93
+ Merge remote-tracking branch 'origin/ts/tmpio'
94
+ test_util: get rid of some unused variables in tests
95
+ doc: replace pandoc-"Markdown" with real manpages
96
+
97
+ Terry Scheingeld (1):
98
+ tmpio: workaround File#path being tainted on unlink
99
+
100
+ === unicorn 5.5.1 / 2019-05-06 06:40 UTC
101
+
102
+ This release fixes and works around issues from v5.5.0 (2019-03-04)
103
+
104
+ Stephen Demjanenko worked around a pipe resource accounting bug
105
+ present in old Linux kernels. Linux 3.x users from 3.16.57 and
106
+ on are unaffected. Linux 4.x users from 4.9 and on are
107
+ unaffected.
108
+
109
+ https://bogomips.org/unicorn-public/1556922018-24096-1-git-send-email-sdemjanenko@gmail.com/
110
+
111
+ Stan Pitucha reported a bug with the old `unicorn_rails' wrapper
112
+ (intended for Rails 2.x users) which was promptly fixed by
113
+ Jeremy Evans:
114
+
115
+ https://bogomips.org/unicorn-public/CAJ2_uEPifcv_ux4sX=t0C4zHTHGhqVfcLcSB2kTU3Rb_6pQ3nw@mail.gmail.com/
116
+
117
+ There's also some doc updates to warn users off `unicorn_rails';
118
+ the homepage is now energy-efficient for OLEDs and CRTs;
119
+ and I'm no longer advertising mailing list subscriptions
120
+ (because I hate centralization and mail archives are the priority)
121
+
122
+ Eric Wong (3):
123
+ doc: unicorn_rails: clarify that it is intended for rails <= 2.x
124
+ doc: stop advertising mailing list subscription
125
+ doc: switch homepage to dark216
126
+
127
+ Jeremy Evans (1):
128
+ unicorn_rails: fix regression with Rails >= 3.x in app build
129
+
130
+ Stephen Demjanenko (1):
131
+ Rescue failed pipe resizes due to permissions
132
+
133
+ === unicorn 5.5.0 / 2019-03-04 00:41 UTC
134
+
135
+ Mostly identical to 5.5.0.pre1, which I didn't hear any feedback
136
+ from:
137
+
138
+ https://bogomips.org/unicorn-public/20181220222842.GA27382@dcvr/
139
+
140
+ > Jeremy Evans contributed the "default_middleware" configuration option:
141
+ >
142
+ > https://bogomips.org/unicorn-public/20180913192055.GD48926@jeremyevans.local/
143
+ >
144
+ > Jeremy also contributed the ability to use separate groups for the process
145
+ > and log files:
146
+ >
147
+ > https://bogomips.org/unicorn-public/20180913192449.GE48926@jeremyevans.local/
148
+ >
149
+ > There's also a couple of uninteresting minor optimizations and
150
+ > documentation additions.
151
+
152
+ Otherwise, there's one extra change to use
153
+ rb_gc_register_mark_object which is finally a documented part of
154
+ the Ruby C-API, but has existed since the 1.9 days.
155
+
1
156
  === unicorn 5.5.0.pre1 / 2018-12-20 20:11 UTC
2
157
 
3
158
  Jeremy Evans contributed the "default_middleware" configuration option: