unicorn 5.4.1 → 5.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.manifest +7 -3
- data/.olddoc.yml +12 -7
- data/Application_Timeouts +4 -4
- data/Documentation/.gitignore +1 -3
- data/Documentation/unicorn.1 +222 -0
- data/Documentation/unicorn_rails.1 +207 -0
- data/FAQ +1 -1
- data/GIT-VERSION-FILE +1 -1
- data/GIT-VERSION-GEN +1 -1
- data/GNUmakefile +111 -57
- data/HACKING +1 -1
- data/ISSUES +21 -23
- data/KNOWN_ISSUES +2 -2
- data/LATEST +22 -28
- data/LICENSE +2 -2
- data/Links +13 -11
- data/NEWS +65 -0
- data/README +25 -11
- data/SIGNALS +1 -1
- data/Sandbox +4 -4
- data/archive/slrnpull.conf +1 -1
- data/bin/unicorn +3 -1
- data/bin/unicorn_rails +2 -2
- data/examples/big_app_gc.rb +1 -1
- data/examples/logrotate.conf +3 -3
- data/examples/nginx.conf +4 -3
- data/examples/unicorn.conf.minimal.rb +2 -2
- data/examples/unicorn.conf.rb +2 -2
- data/examples/unicorn@.service +7 -0
- data/ext/unicorn_http/common_field_optimization.h +24 -6
- data/ext/unicorn_http/extconf.rb +35 -0
- data/ext/unicorn_http/global_variables.h +2 -2
- data/ext/unicorn_http/httpdate.c +2 -2
- data/ext/unicorn_http/unicorn_http.c +257 -224
- data/ext/unicorn_http/unicorn_http.rl +47 -14
- data/lib/unicorn/configurator.rb +25 -4
- data/lib/unicorn/http_request.rb +12 -2
- data/lib/unicorn/http_server.rb +38 -11
- data/lib/unicorn/launcher.rb +1 -1
- data/lib/unicorn/oob_gc.rb +2 -2
- data/lib/unicorn/socket_helper.rb +1 -0
- data/lib/unicorn/tmpio.rb +8 -2
- data/lib/unicorn/util.rb +1 -1
- data/lib/unicorn/version.rb +1 -1
- data/lib/unicorn/worker.rb +16 -2
- data/lib/unicorn.rb +23 -9
- data/man/man1/unicorn.1 +89 -88
- data/man/man1/unicorn_rails.1 +78 -83
- data/t/GNUmakefile +3 -72
- data/t/README +4 -4
- data/t/t0301-no-default-middleware-ignored-in-config.sh +25 -0
- data/t/t0301.ru +13 -0
- data/test/benchmark/README +14 -4
- data/test/benchmark/ddstream.ru +50 -0
- data/test/benchmark/readinput.ru +40 -0
- data/test/benchmark/uconnect.perl +66 -0
- data/test/exec/test_exec.rb +9 -7
- data/test/test_helper.rb +22 -30
- data/test/unit/test_http_parser.rb +16 -0
- data/test/unit/test_http_parser_ng.rb +81 -0
- data/test/unit/test_server.rb +30 -0
- data/test/unit/test_upload.rb +4 -9
- data/test/unit/test_util.rb +25 -0
- data/unicorn.gemspec +8 -7
- metadata +15 -11
- data/Documentation/GNUmakefile +0 -30
- data/Documentation/unicorn.1.txt +0 -187
- data/Documentation/unicorn_rails.1.txt +0 -175
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
|
-
|
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: $(wildcard $(ext)/*.h)
|
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_h) | $(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
|
-
|
51
|
-
|
78
|
+
tmp_bins = $(addprefix $(tmp_bin)/, unicorn unicorn_rails)
|
79
|
+
pid := $(shell echo $$PPID)
|
52
80
|
|
53
|
-
|
54
|
-
$(
|
55
|
-
|
56
|
-
|
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
|
-
|
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): $(
|
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: $(
|
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
|
-
|
94
|
-
|
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 := $(
|
126
|
-
%.n: export RUBYLIB := $(
|
127
|
-
%.n: $(
|
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 := $(
|
133
|
-
$(T): export RUBYLIB := $(
|
134
|
-
$(T): $(
|
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 $(
|
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
|
-
|
159
|
-
$(
|
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,21 @@ 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
|
234
|
+
$(RDOC) -f dark216
|
179
235
|
$(OLDDOC) merge
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
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://
|
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/
|
248
|
+
$(RSYNC) -av doc/ yhbt.net:/srv/yhbt/unicorn/
|
193
249
|
git ls-files | xargs touch
|
194
250
|
|
195
251
|
# Create gzip variants of the same timestamp as the original so nginx
|
@@ -221,9 +277,8 @@ gem: $(pkggem)
|
|
221
277
|
install-gem: $(pkggem)
|
222
278
|
gem install --local $(CURDIR)/$<
|
223
279
|
|
224
|
-
$(pkggem): .manifest fix-perms
|
280
|
+
$(pkggem): .manifest fix-perms | pkg
|
225
281
|
gem build $(rfpackage).gemspec
|
226
|
-
mkdir -p pkg
|
227
282
|
mv $(@F) $@
|
228
283
|
|
229
284
|
$(pkgtgz): distdir = $(basename $@)
|
@@ -254,5 +309,4 @@ check-warnings:
|
|
254
309
|
do $(RUBY) --disable-gems -d -W2 -c \
|
255
310
|
$$i; done) | grep -v '^Syntax OK$$' || :
|
256
311
|
|
257
|
-
.PHONY: .FORCE-GIT-VERSION-FILE doc $(T) $(slow_tests) man
|
258
|
-
.PHONY: test-install
|
312
|
+
.PHONY: .FORCE-GIT-VERSION-FILE doc $(T) $(slow_tests) man $(T_sh) clean
|
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
|
-
<tt>https://
|
60
|
+
<tt>https://yhbt.net/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/ISSUES
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
= Issues
|
2
2
|
|
3
|
-
mailto:unicorn-public@
|
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://
|
6
|
-
{documentation}[https://
|
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,12 +12,12 @@ 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
|
16
|
-
https://
|
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@
|
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
23
|
If your issue is of a sensitive nature or you're just shy in public,
|
@@ -39,6 +39,7 @@ https://bugs.ruby-lang.org/ and discuss+fix them on the ruby-core
|
|
39
39
|
list at mailto:ruby-core@ruby-lang.org
|
40
40
|
Subscription to post is required to ruby-core, unfortunately:
|
41
41
|
mailto:ruby-core-request@ruby-lang.org?subject=subscribe
|
42
|
+
Unofficial archives are available at: https://public-inbox.org/ruby-core/
|
42
43
|
|
43
44
|
For uncommon bugs in Rack, we may forward bugs to
|
44
45
|
mailto:rack-devel@googlegroups.com and discuss there.
|
@@ -46,6 +47,7 @@ Subscription (without any web UI or Google account) is possible via:
|
|
46
47
|
mailto:rack-devel+subscribe@googlegroups.com
|
47
48
|
Note: not everyone can use the proprietary bug tracker used by Rack,
|
48
49
|
but their mailing list remains operational.
|
50
|
+
Unofficial archives are available at: https://public-inbox.org/rack-devel/
|
49
51
|
|
50
52
|
Uncommon bugs we encounter in the Linux kernel should be Cc:-ed to the
|
51
53
|
Linux kernel mailing list (LKML) at mailto:linux-kernel@vger.kernel.org
|
@@ -54,11 +56,12 @@ and subsystem maintainers such as mailto:netdev@vger.kernel.org
|
|
54
56
|
involved with any problematic commits (including those in the
|
55
57
|
Signed-off-by: and other trailer lines). No subscription is necessary,
|
56
58
|
and the our mailing list follows the same conventions as LKML for
|
57
|
-
interopability.
|
58
|
-
ignored by most
|
59
|
+
interopability. Archives are available at https://lore.kernel.org/lkml/
|
60
|
+
There is a kernel.org Bugzilla instance, but it is ignored by most.
|
59
61
|
|
60
62
|
Likewise for any rare glibc bugs we might encounter, we should Cc:
|
61
63
|
mailto:libc-alpha@sourceware.org
|
64
|
+
Unofficial archives are available at: https://public-inbox.org/libc-alpha/
|
62
65
|
Keep in mind glibc upstream does use Bugzilla for tracking bugs:
|
63
66
|
https://sourceware.org/bugzilla/
|
64
67
|
|
@@ -70,32 +73,27 @@ document distributed with git) on guidelines for patch submission.
|
|
70
73
|
|
71
74
|
== Contact Info
|
72
75
|
|
73
|
-
* public: mailto:unicorn-public@
|
74
|
-
* nntp://news.gmane.
|
76
|
+
* public: mailto:unicorn-public@yhbt.net
|
77
|
+
* nntp://news.gmane.io/gmane.comp.lang.ruby.unicorn.general
|
75
78
|
* nntp://news.public-inbox.org/inbox.comp.lang.ruby.unicorn
|
76
|
-
*
|
79
|
+
* imaps://news.public-inbox.org/inbox.comp.lang.ruby.unicorn.0
|
80
|
+
* https://yhbt.net/unicorn-public/
|
77
81
|
* http://ou63pmih66umazou.onion/unicorn-public/
|
78
82
|
|
79
83
|
Mailing list subscription is optional, so Cc: all participants.
|
80
84
|
|
81
|
-
You can follow along via NNTP (read-only):
|
85
|
+
You can follow along via NNTP or IMAP (read-only):
|
82
86
|
|
83
87
|
nntp://news.public-inbox.org/inbox.comp.lang.ruby.unicorn
|
84
|
-
nntp://news.gmane.
|
88
|
+
nntp://news.gmane.io/gmane.comp.lang.ruby.unicorn.general
|
89
|
+
imaps://news.public-inbox.org/inbox.comp.lang.ruby.unicorn.0
|
90
|
+
imap://ou63pmih66umazou.onion/inbox.comp.lang.ruby.unicorn.0
|
85
91
|
|
86
92
|
Or Atom feeds:
|
87
93
|
|
88
|
-
https://
|
94
|
+
https://yhbt.net/unicorn-public/new.atom
|
89
95
|
http://ou63pmih66umazou.onion/unicorn-public/new.atom
|
90
96
|
|
91
|
-
The HTML archives at https://
|
97
|
+
The HTML archives at https://yhbt.net/unicorn-public/
|
92
98
|
also has links to per-thread Atom feeds and downloadable
|
93
99
|
mboxes.
|
94
|
-
|
95
|
-
You may optionally subscribe via plain-text email:
|
96
|
-
|
97
|
-
mailto:unicorn-public+subscribe@bogomips.org
|
98
|
-
(and confirming the auto-reply)
|
99
|
-
|
100
|
-
Just keep in mind we suck at delivering email, so using NNTP,
|
101
|
-
or Atom feeds might be a better bet...
|
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://
|
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://
|
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,29 +1,23 @@
|
|
1
|
-
=== unicorn 5.
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
tests: cleanup some unused variable warnings
|
24
|
-
ISSUES: add a note about Debian BTS interopability
|
25
|
-
|
26
|
-
Roughly all mailing discussions since the last release:
|
27
|
-
|
28
|
-
https://bogomips.org/unicorn-public/?q=d:20171004..20171223
|
1
|
+
=== unicorn 5.5.0 / 2019-03-04 00:41 UTC
|
2
|
+
|
3
|
+
Mostly identical to 5.5.0.pre1, which I didn't hear any feedback
|
4
|
+
from:
|
5
|
+
|
6
|
+
https://bogomips.org/unicorn-public/20181220222842.GA27382@dcvr/
|
7
|
+
|
8
|
+
> Jeremy Evans contributed the "default_middleware" configuration option:
|
9
|
+
>
|
10
|
+
> https://bogomips.org/unicorn-public/20180913192055.GD48926@jeremyevans.local/
|
11
|
+
>
|
12
|
+
> Jeremy also contributed the ability to use separate groups for the process
|
13
|
+
> and log files:
|
14
|
+
>
|
15
|
+
> https://bogomips.org/unicorn-public/20180913192449.GE48926@jeremyevans.local/
|
16
|
+
>
|
17
|
+
> There's also a couple of uninteresting minor optimizations and
|
18
|
+
> documentation additions.
|
19
|
+
|
20
|
+
Otherwise, there's one extra change to use
|
21
|
+
rb_gc_register_mark_object which is finally a documented part of
|
22
|
+
the Ruby C-API, but has existed since the 1.9 days.
|
29
23
|
|
data/LICENSE
CHANGED
@@ -8,8 +8,8 @@ any later version. We currently prefer the GPLv3 or later for
|
|
8
8
|
derivative works, but the GPLv2 is fine.
|
9
9
|
|
10
10
|
The complete texts of the GPLv2 and GPLv3 are below:
|
11
|
-
GPLv2 -
|
12
|
-
GPLv3 -
|
11
|
+
GPLv2 - https://www.gnu.org/licenses/gpl-2.0.txt
|
12
|
+
GPLv3 - https://www.gnu.org/licenses/gpl-3.0.txt
|
13
13
|
|
14
14
|
You may (against our _preference_) also use the Ruby 1.8 license terms
|
15
15
|
which we inherited from the original Mongrel project when we forked it:
|
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@
|
5
|
+
mailto:unicorn-public@yhbt.net!
|
6
6
|
|
7
7
|
== Disclaimer
|
8
8
|
|
@@ -10,7 +10,7 @@ The unicorn project is not responsible for the content in these links.
|
|
10
10
|
Furthermore, the unicorn project has never, does not and will never endorse:
|
11
11
|
|
12
12
|
* any for-profit entities or services
|
13
|
-
* any non-{Free Software}[
|
13
|
+
* any non-{Free Software}[https://www.gnu.org/philosophy/free-sw.html]
|
14
14
|
|
15
15
|
The existence of these links does not imply endorsement of any entities
|
16
16
|
or services behind them.
|
@@ -23,34 +23,36 @@ 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://
|
26
|
+
* {raindrops}[https://yhbt.net/raindrops/] - real-time stats for
|
27
27
|
preforking Rack servers
|
28
28
|
|
29
|
-
* {UnXF}[https://
|
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
|
33
33
|
|
34
|
-
* {Rack}[
|
34
|
+
* {Rack}[https://rack.github.io/] - a minimal interface between webservers
|
35
35
|
supporting Ruby and Ruby frameworks
|
36
36
|
|
37
37
|
* {Ruby}[https://www.ruby-lang.org/en/] - the programming language of
|
38
38
|
Rack and unicorn
|
39
39
|
|
40
|
-
* {nginx}[
|
40
|
+
* {nginx}[https://nginx.org/] (Free versions) -
|
41
41
|
the reverse proxy for use with unicorn
|
42
42
|
|
43
43
|
=== Derivatives
|
44
44
|
|
45
|
-
* {Green Unicorn}[
|
45
|
+
* {Green Unicorn}[https://gunicorn.org/] - a Python version of unicorn
|
46
46
|
|
47
|
-
* {Starman}[
|
47
|
+
* {Starman}[https://metacpan.org/release/Starman/] - Plack/PSGI version
|
48
48
|
of unicorn
|
49
49
|
|
50
50
|
=== Prior Work
|
51
51
|
|
52
|
-
* {Mongrel}[
|
53
|
-
unicorn is based on
|
52
|
+
* {Mongrel}[https://rubygems.org/gems/mongrel] - the awesome webserver
|
53
|
+
unicorn is based on. A historical archive of the mongrel dev list
|
54
|
+
featuring early discussions of unicorn is available at:
|
55
|
+
https://yhbt.net/mongrel-devel/
|
54
56
|
|
55
|
-
* {david}[https://
|
57
|
+
* {david}[https://yhbt.net/david.git] - a tool to explain why you need
|
56
58
|
nginx in front of unicorn
|
data/NEWS
CHANGED
@@ -1,3 +1,68 @@
|
|
1
|
+
=== unicorn 5.5.0 / 2019-03-04 00:41 UTC
|
2
|
+
|
3
|
+
Mostly identical to 5.5.0.pre1, which I didn't hear any feedback
|
4
|
+
from:
|
5
|
+
|
6
|
+
https://bogomips.org/unicorn-public/20181220222842.GA27382@dcvr/
|
7
|
+
|
8
|
+
> Jeremy Evans contributed the "default_middleware" configuration option:
|
9
|
+
>
|
10
|
+
> https://bogomips.org/unicorn-public/20180913192055.GD48926@jeremyevans.local/
|
11
|
+
>
|
12
|
+
> Jeremy also contributed the ability to use separate groups for the process
|
13
|
+
> and log files:
|
14
|
+
>
|
15
|
+
> https://bogomips.org/unicorn-public/20180913192449.GE48926@jeremyevans.local/
|
16
|
+
>
|
17
|
+
> There's also a couple of uninteresting minor optimizations and
|
18
|
+
> documentation additions.
|
19
|
+
|
20
|
+
Otherwise, there's one extra change to use
|
21
|
+
rb_gc_register_mark_object which is finally a documented part of
|
22
|
+
the Ruby C-API, but has existed since the 1.9 days.
|
23
|
+
|
24
|
+
=== unicorn 5.5.0.pre1 / 2018-12-20 20:11 UTC
|
25
|
+
|
26
|
+
Jeremy Evans contributed the "default_middleware" configuration option:
|
27
|
+
|
28
|
+
https://bogomips.org/unicorn-public/20180913192055.GD48926@jeremyevans.local/
|
29
|
+
|
30
|
+
Jeremy also contributed the ability to use separate groups for the process
|
31
|
+
and log files:
|
32
|
+
|
33
|
+
https://bogomips.org/unicorn-public/20180913192449.GE48926@jeremyevans.local/
|
34
|
+
|
35
|
+
There's also a couple of uninteresting minor optimizations and
|
36
|
+
documentation additions.
|
37
|
+
|
38
|
+
Eric Wong (10):
|
39
|
+
remove random seed reset atfork
|
40
|
+
use IO#wait instead of kgio_wait_readable
|
41
|
+
Merge branch '5.4-stable'
|
42
|
+
shrink pipes under Linux
|
43
|
+
socket_helper: add hint for FreeBSD users for accf_http(9)
|
44
|
+
tests: ensure -N/--no-default-middleware not supported in config.ru
|
45
|
+
doc: update more URLs to use HTTPS and avoid redirects
|
46
|
+
deduplicate strings VM-wide in Ruby 2.5+
|
47
|
+
doc/ISSUES: add links to git clone-able mail archives of our dependencies
|
48
|
+
README: minor updates and additional disclaimer
|
49
|
+
|
50
|
+
Jeremy Evans (2):
|
51
|
+
Make Worker#user support different process primary group and log file group
|
52
|
+
Support default_middleware configuration option
|
53
|
+
|
54
|
+
=== unicorn 5.4.1 / 2018-07-23 17:13 UTC
|
55
|
+
|
56
|
+
This release quiets some warnings for Ruby 2.6 preview releases
|
57
|
+
and enables tests to pass under Ruby 1.9.3. Otherwise, nothing
|
58
|
+
interesting for Ruby 2.0..2.5 users. *YAWN*
|
59
|
+
|
60
|
+
Eric Wong (1):
|
61
|
+
quiet some mismatched indentation warnings
|
62
|
+
|
63
|
+
Fumiaki MATSUSHIMA (1):
|
64
|
+
Use IO#wait instead to fix test for Ruby 1.9
|
65
|
+
|
1
66
|
=== unicorn 5.4.0 / 2017-12-23 23:33 UTC
|
2
67
|
|
3
68
|
Rack hijack support improves as the app code can capture and use
|
data/README
CHANGED
@@ -10,7 +10,7 @@ both the the request and response in between unicorn and slow clients.
|
|
10
10
|
|
11
11
|
* Designed for Rack, Unix, fast clients, and ease-of-debugging. We
|
12
12
|
cut out everything that is better supported by the operating system,
|
13
|
-
{nginx}[
|
13
|
+
{nginx}[https://nginx.org/] or {Rack}[https://rack.github.io/].
|
14
14
|
|
15
15
|
* Compatible with Ruby 1.9.3 and later.
|
16
16
|
unicorn 4.x remains supported for Ruby 1.8 users.
|
@@ -37,12 +37,15 @@ both the the request and response in between unicorn and slow clients.
|
|
37
37
|
You can upgrade unicorn, your entire application, libraries
|
38
38
|
and even your Ruby interpreter without dropping clients.
|
39
39
|
|
40
|
+
* transparent upgrades using systemd socket activation is
|
41
|
+
supported since unicorn 5.0
|
42
|
+
|
40
43
|
* before_fork and after_fork hooks in case your application
|
41
44
|
has special needs when dealing with forked processes. These
|
42
45
|
should not be needed when the "preload_app" directive is
|
43
46
|
false (the default).
|
44
47
|
|
45
|
-
* Can be used with copy-on-write-friendly
|
48
|
+
* Can be used with copy-on-write-friendly GC in Ruby 2.0+
|
46
49
|
to save memory (by setting "preload_app" to true).
|
47
50
|
|
48
51
|
* Able to listen on multiple interfaces including UNIX sockets,
|
@@ -55,7 +58,7 @@ both the the request and response in between unicorn and slow clients.
|
|
55
58
|
|
56
59
|
== License
|
57
60
|
|
58
|
-
unicorn is copyright 2009-
|
61
|
+
unicorn is copyright 2009-2018 by all contributors (see logs in git).
|
59
62
|
It is based on Mongrel 1.1.5.
|
60
63
|
Mongrel is copyright 2007 Zed A. Shaw and contributors.
|
61
64
|
|
@@ -77,13 +80,13 @@ You may install it via RubyGems on RubyGems.org:
|
|
77
80
|
You can get the latest source via git from the following locations
|
78
81
|
(these versions may not be stable):
|
79
82
|
|
80
|
-
|
81
|
-
|
83
|
+
https://yhbt.net/unicorn.git
|
84
|
+
https://repo.or.cz/unicorn.git (mirror)
|
82
85
|
|
83
86
|
You may browse the code from the web:
|
84
87
|
|
85
|
-
* https://
|
86
|
-
*
|
88
|
+
* https://yhbt.net/unicorn.git
|
89
|
+
* https://repo.or.cz/w/unicorn.git (gitweb)
|
87
90
|
|
88
91
|
See the HACKING guide on how to contribute and build prerelease gems
|
89
92
|
from git.
|
@@ -122,17 +125,28 @@ unicorn is designed to only serve fast clients either on the local host
|
|
122
125
|
or a fast LAN. See the PHILOSOPHY and DESIGN documents for more details
|
123
126
|
regarding this.
|
124
127
|
|
128
|
+
Due to its ability to tolerate crashes and isolate clients, unicorn
|
129
|
+
is unfortunately known to prolong the existence of bugs in applications
|
130
|
+
and libraries which run on top of it.
|
131
|
+
|
125
132
|
== Contact
|
126
133
|
|
127
134
|
All feedback (bug reports, user/development dicussion, patches, pull
|
128
135
|
requests) go to the mailing list/newsgroup. See the ISSUES document for
|
129
|
-
information on the {mailing list}[mailto:unicorn-public@
|
136
|
+
information on the {mailing list}[mailto:unicorn-public@yhbt.net].
|
137
|
+
|
138
|
+
The mailing list is archived at https://yhbt.net/unicorn-public/
|
130
139
|
|
131
|
-
The mailing list is archived at https://bogomips.org/unicorn-public/
|
132
140
|
Read-only NNTP access is available at:
|
133
141
|
nntp://news.public-inbox.org/inbox.comp.lang.ruby.unicorn and
|
134
|
-
nntp://news.gmane.
|
142
|
+
nntp://news.gmane.io/gmane.comp.lang.ruby.unicorn.general
|
143
|
+
|
144
|
+
Read-only IMAP access is also avaialble at:
|
145
|
+
imaps://news.public-inbox.org/inbox.comp.lang.ruby.unicorn.0 and
|
146
|
+
imap://ou63pmih66umazou.onion/inbox.comp.lang.ruby.unicorn.0
|
147
|
+
AUTH=ANONYMOUS mechanism is supported, as is any username+password
|
148
|
+
combination.
|
135
149
|
|
136
150
|
For the latest on unicorn releases, you may also finger us at
|
137
|
-
unicorn@
|
151
|
+
unicorn@yhbt.net or check our NEWS page (and subscribe to our Atom
|
138
152
|
feed).
|