mega-max-tool 0.0.1

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.
Files changed (157) hide show
  1. checksums.yaml +7 -0
  2. data/mega-max-tool.gemspec +12 -0
  3. data/unicorn-6.1.0/Application_Timeouts +77 -0
  4. data/unicorn-6.1.0/CONTRIBUTORS +39 -0
  5. data/unicorn-6.1.0/COPYING +674 -0
  6. data/unicorn-6.1.0/DESIGN +95 -0
  7. data/unicorn-6.1.0/Documentation/unicorn.1 +222 -0
  8. data/unicorn-6.1.0/Documentation/unicorn_rails.1 +207 -0
  9. data/unicorn-6.1.0/FAQ +70 -0
  10. data/unicorn-6.1.0/GIT-VERSION-FILE +1 -0
  11. data/unicorn-6.1.0/GIT-VERSION-GEN +39 -0
  12. data/unicorn-6.1.0/GNUmakefile +313 -0
  13. data/unicorn-6.1.0/HACKING +112 -0
  14. data/unicorn-6.1.0/ISSUES +97 -0
  15. data/unicorn-6.1.0/KNOWN_ISSUES +79 -0
  16. data/unicorn-6.1.0/LATEST +24 -0
  17. data/unicorn-6.1.0/LICENSE +67 -0
  18. data/unicorn-6.1.0/Links +58 -0
  19. data/unicorn-6.1.0/NEWS +2890 -0
  20. data/unicorn-6.1.0/PHILOSOPHY +139 -0
  21. data/unicorn-6.1.0/README +151 -0
  22. data/unicorn-6.1.0/Rakefile +16 -0
  23. data/unicorn-6.1.0/SIGNALS +123 -0
  24. data/unicorn-6.1.0/Sandbox +104 -0
  25. data/unicorn-6.1.0/TODO +3 -0
  26. data/unicorn-6.1.0/TUNING +119 -0
  27. data/unicorn-6.1.0/archive/slrnpull.conf +4 -0
  28. data/unicorn-6.1.0/bin/unicorn +128 -0
  29. data/unicorn-6.1.0/bin/unicorn_rails +209 -0
  30. data/unicorn-6.1.0/examples/big_app_gc.rb +2 -0
  31. data/unicorn-6.1.0/examples/echo.ru +27 -0
  32. data/unicorn-6.1.0/examples/init.sh +102 -0
  33. data/unicorn-6.1.0/examples/logger_mp_safe.rb +25 -0
  34. data/unicorn-6.1.0/examples/logrotate.conf +44 -0
  35. data/unicorn-6.1.0/examples/nginx.conf +156 -0
  36. data/unicorn-6.1.0/examples/unicorn.conf.minimal.rb +13 -0
  37. data/unicorn-6.1.0/examples/unicorn.conf.rb +110 -0
  38. data/unicorn-6.1.0/examples/unicorn.socket +11 -0
  39. data/unicorn-6.1.0/examples/unicorn@.service +40 -0
  40. data/unicorn-6.1.0/ext/unicorn_http/CFLAGS +13 -0
  41. data/unicorn-6.1.0/ext/unicorn_http/c_util.h +116 -0
  42. data/unicorn-6.1.0/ext/unicorn_http/common_field_optimization.h +128 -0
  43. data/unicorn-6.1.0/ext/unicorn_http/epollexclusive.h +124 -0
  44. data/unicorn-6.1.0/ext/unicorn_http/ext_help.h +38 -0
  45. data/unicorn-6.1.0/ext/unicorn_http/extconf.rb +37 -0
  46. data/unicorn-6.1.0/ext/unicorn_http/global_variables.h +97 -0
  47. data/unicorn-6.1.0/ext/unicorn_http/httpdate.c +79 -0
  48. data/unicorn-6.1.0/ext/unicorn_http/unicorn_http.c +4319 -0
  49. data/unicorn-6.1.0/ext/unicorn_http/unicorn_http.rl +1025 -0
  50. data/unicorn-6.1.0/ext/unicorn_http/unicorn_http_common.rl +76 -0
  51. data/unicorn-6.1.0/lib/unicorn/app/old_rails/static.rb +59 -0
  52. data/unicorn-6.1.0/lib/unicorn/app/old_rails.rb +35 -0
  53. data/unicorn-6.1.0/lib/unicorn/cgi_wrapper.rb +147 -0
  54. data/unicorn-6.1.0/lib/unicorn/configurator.rb +743 -0
  55. data/unicorn-6.1.0/lib/unicorn/const.rb +21 -0
  56. data/unicorn-6.1.0/lib/unicorn/http_request.rb +201 -0
  57. data/unicorn-6.1.0/lib/unicorn/http_response.rb +61 -0
  58. data/unicorn-6.1.0/lib/unicorn/http_server.rb +893 -0
  59. data/unicorn-6.1.0/lib/unicorn/launcher.rb +62 -0
  60. data/unicorn-6.1.0/lib/unicorn/oob_gc.rb +81 -0
  61. data/unicorn-6.1.0/lib/unicorn/preread_input.rb +33 -0
  62. data/unicorn-6.1.0/lib/unicorn/select_waiter.rb +6 -0
  63. data/unicorn-6.1.0/lib/unicorn/socket_helper.rb +211 -0
  64. data/unicorn-6.1.0/lib/unicorn/stream_input.rb +147 -0
  65. data/unicorn-6.1.0/lib/unicorn/tee_input.rb +131 -0
  66. data/unicorn-6.1.0/lib/unicorn/tmpio.rb +33 -0
  67. data/unicorn-6.1.0/lib/unicorn/util.rb +90 -0
  68. data/unicorn-6.1.0/lib/unicorn/version.rb +1 -0
  69. data/unicorn-6.1.0/lib/unicorn/worker.rb +165 -0
  70. data/unicorn-6.1.0/lib/unicorn.rb +138 -0
  71. data/unicorn-6.1.0/man/man1/unicorn.1 +222 -0
  72. data/unicorn-6.1.0/man/man1/unicorn_rails.1 +207 -0
  73. data/unicorn-6.1.0/setup.rb +1586 -0
  74. data/unicorn-6.1.0/t/GNUmakefile +5 -0
  75. data/unicorn-6.1.0/t/README +42 -0
  76. data/unicorn-6.1.0/t/bin/content-md5-put +36 -0
  77. data/unicorn-6.1.0/t/bin/sha1sum.rb +17 -0
  78. data/unicorn-6.1.0/t/bin/unused_listen +40 -0
  79. data/unicorn-6.1.0/t/broken-app.ru +12 -0
  80. data/unicorn-6.1.0/t/detach.ru +11 -0
  81. data/unicorn-6.1.0/t/env.ru +3 -0
  82. data/unicorn-6.1.0/t/fails-rack-lint.ru +5 -0
  83. data/unicorn-6.1.0/t/heartbeat-timeout.ru +12 -0
  84. data/unicorn-6.1.0/t/listener_names.ru +4 -0
  85. data/unicorn-6.1.0/t/my-tap-lib.sh +201 -0
  86. data/unicorn-6.1.0/t/oob_gc.ru +20 -0
  87. data/unicorn-6.1.0/t/oob_gc_path.ru +20 -0
  88. data/unicorn-6.1.0/t/pid.ru +3 -0
  89. data/unicorn-6.1.0/t/preread_input.ru +17 -0
  90. data/unicorn-6.1.0/t/rack-input-tests.ru +21 -0
  91. data/unicorn-6.1.0/t/t0000-http-basic.sh +50 -0
  92. data/unicorn-6.1.0/t/t0001-reload-bad-config.sh +53 -0
  93. data/unicorn-6.1.0/t/t0002-config-conflict.sh +49 -0
  94. data/unicorn-6.1.0/t/t0002-parser-error.sh +94 -0
  95. data/unicorn-6.1.0/t/t0003-working_directory.sh +51 -0
  96. data/unicorn-6.1.0/t/t0004-heartbeat-timeout.sh +69 -0
  97. data/unicorn-6.1.0/t/t0004-working_directory_broken.sh +24 -0
  98. data/unicorn-6.1.0/t/t0005-working_directory_app.rb.sh +40 -0
  99. data/unicorn-6.1.0/t/t0006-reopen-logs.sh +83 -0
  100. data/unicorn-6.1.0/t/t0006.ru +13 -0
  101. data/unicorn-6.1.0/t/t0007-working_directory_no_embed_cli.sh +44 -0
  102. data/unicorn-6.1.0/t/t0008-back_out_of_upgrade.sh +110 -0
  103. data/unicorn-6.1.0/t/t0009-broken-app.sh +56 -0
  104. data/unicorn-6.1.0/t/t0009-winch_ttin.sh +59 -0
  105. data/unicorn-6.1.0/t/t0010-reap-logging.sh +55 -0
  106. data/unicorn-6.1.0/t/t0011-active-unix-socket.sh +79 -0
  107. data/unicorn-6.1.0/t/t0012-reload-empty-config.sh +86 -0
  108. data/unicorn-6.1.0/t/t0013-rewindable-input-false.sh +24 -0
  109. data/unicorn-6.1.0/t/t0013.ru +12 -0
  110. data/unicorn-6.1.0/t/t0014-rewindable-input-true.sh +24 -0
  111. data/unicorn-6.1.0/t/t0014.ru +12 -0
  112. data/unicorn-6.1.0/t/t0015-configurator-internals.sh +25 -0
  113. data/unicorn-6.1.0/t/t0018-write-on-close.sh +23 -0
  114. data/unicorn-6.1.0/t/t0019-max_header_len.sh +49 -0
  115. data/unicorn-6.1.0/t/t0020-at_exit-handler.sh +49 -0
  116. data/unicorn-6.1.0/t/t0021-process_detach.sh +29 -0
  117. data/unicorn-6.1.0/t/t0022-listener_names-preload_app.sh +32 -0
  118. data/unicorn-6.1.0/t/t0100-rack-input-tests.sh +124 -0
  119. data/unicorn-6.1.0/t/t0116-client_body_buffer_size.sh +80 -0
  120. data/unicorn-6.1.0/t/t0116.ru +16 -0
  121. data/unicorn-6.1.0/t/t0300-no-default-middleware.sh +20 -0
  122. data/unicorn-6.1.0/t/t0301-no-default-middleware-ignored-in-config.sh +25 -0
  123. data/unicorn-6.1.0/t/t0301.ru +13 -0
  124. data/unicorn-6.1.0/t/t9000-preread-input.sh +48 -0
  125. data/unicorn-6.1.0/t/t9001-oob_gc.sh +47 -0
  126. data/unicorn-6.1.0/t/t9002-oob_gc-path.sh +75 -0
  127. data/unicorn-6.1.0/t/test-lib.sh +129 -0
  128. data/unicorn-6.1.0/t/write-on-close.ru +11 -0
  129. data/unicorn-6.1.0/test/aggregate.rb +15 -0
  130. data/unicorn-6.1.0/test/benchmark/README +60 -0
  131. data/unicorn-6.1.0/test/benchmark/dd.ru +18 -0
  132. data/unicorn-6.1.0/test/benchmark/ddstream.ru +50 -0
  133. data/unicorn-6.1.0/test/benchmark/readinput.ru +40 -0
  134. data/unicorn-6.1.0/test/benchmark/stack.ru +8 -0
  135. data/unicorn-6.1.0/test/benchmark/uconnect.perl +66 -0
  136. data/unicorn-6.1.0/test/exec/README +5 -0
  137. data/unicorn-6.1.0/test/exec/test_exec.rb +1101 -0
  138. data/unicorn-6.1.0/test/test_helper.rb +306 -0
  139. data/unicorn-6.1.0/test/unit/test_ccc.rb +91 -0
  140. data/unicorn-6.1.0/test/unit/test_configurator.rb +175 -0
  141. data/unicorn-6.1.0/test/unit/test_droplet.rb +28 -0
  142. data/unicorn-6.1.0/test/unit/test_http_parser.rb +884 -0
  143. data/unicorn-6.1.0/test/unit/test_http_parser_ng.rb +714 -0
  144. data/unicorn-6.1.0/test/unit/test_request.rb +182 -0
  145. data/unicorn-6.1.0/test/unit/test_response.rb +111 -0
  146. data/unicorn-6.1.0/test/unit/test_server.rb +342 -0
  147. data/unicorn-6.1.0/test/unit/test_signals.rb +188 -0
  148. data/unicorn-6.1.0/test/unit/test_socket_helper.rb +201 -0
  149. data/unicorn-6.1.0/test/unit/test_stream_input.rb +203 -0
  150. data/unicorn-6.1.0/test/unit/test_tee_input.rb +304 -0
  151. data/unicorn-6.1.0/test/unit/test_upload.rb +301 -0
  152. data/unicorn-6.1.0/test/unit/test_util.rb +131 -0
  153. data/unicorn-6.1.0/test/unit/test_waiter.rb +34 -0
  154. data/unicorn-6.1.0/unicorn.gemspec +49 -0
  155. data/unicorn-6.1.0/unicorn_1 +1 -0
  156. data/unicorn-6.1.0/unicorn_rails_1 +1 -0
  157. metadata +196 -0
@@ -0,0 +1,2890 @@
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
+
156
+ === unicorn 5.5.0.pre1 / 2018-12-20 20:11 UTC
157
+
158
+ Jeremy Evans contributed the "default_middleware" configuration option:
159
+
160
+ https://bogomips.org/unicorn-public/20180913192055.GD48926@jeremyevans.local/
161
+
162
+ Jeremy also contributed the ability to use separate groups for the process
163
+ and log files:
164
+
165
+ https://bogomips.org/unicorn-public/20180913192449.GE48926@jeremyevans.local/
166
+
167
+ There's also a couple of uninteresting minor optimizations and
168
+ documentation additions.
169
+
170
+ Eric Wong (10):
171
+ remove random seed reset atfork
172
+ use IO#wait instead of kgio_wait_readable
173
+ Merge branch '5.4-stable'
174
+ shrink pipes under Linux
175
+ socket_helper: add hint for FreeBSD users for accf_http(9)
176
+ tests: ensure -N/--no-default-middleware not supported in config.ru
177
+ doc: update more URLs to use HTTPS and avoid redirects
178
+ deduplicate strings VM-wide in Ruby 2.5+
179
+ doc/ISSUES: add links to git clone-able mail archives of our dependencies
180
+ README: minor updates and additional disclaimer
181
+
182
+ Jeremy Evans (2):
183
+ Make Worker#user support different process primary group and log file group
184
+ Support default_middleware configuration option
185
+
186
+ === unicorn 5.4.1 / 2018-07-23 17:13 UTC
187
+
188
+ This release quiets some warnings for Ruby 2.6 preview releases
189
+ and enables tests to pass under Ruby 1.9.3. Otherwise, nothing
190
+ interesting for Ruby 2.0..2.5 users. *YAWN*
191
+
192
+ Eric Wong (1):
193
+ quiet some mismatched indentation warnings
194
+
195
+ Fumiaki MATSUSHIMA (1):
196
+ Use IO#wait instead to fix test for Ruby 1.9
197
+
198
+ === unicorn 5.4.0 / 2017-12-23 23:33 UTC
199
+
200
+ Rack hijack support improves as the app code can capture and use
201
+ the Rack `env' privately without copying it (to avoid clobbering
202
+ by another client). Thanks to Sam Saffron for reporting and
203
+ testing this new feature:
204
+ https://bogomips.org/unicorn-public/CAAtdryPG3nLuyo0jxfYW1YHu1Q+ZpkLkd4KdWC8vA46B5haZxw@mail.gmail.com/T/
205
+
206
+ We also now support $DEBUG being set by the Rack app (instead of
207
+ relying on the "-d" CLI switch). Thanks to James P Robinson Jr
208
+ for reporting this bug:
209
+ https://bogomips.org/unicorn-public/D6324CB4.7BC3E%25james.robinson3@cigna.com/T/
210
+ (Coincidentally, this fix will be irrelevant for Ruby 2.5
211
+ which requires 'pp' by default)
212
+
213
+ There's a few minor test cleanups and documentation updates, too.
214
+
215
+ All commits since v5.3.1 (2017-10-03):
216
+
217
+ reduce method calls with String#start_with?
218
+ require 'pp' if $DEBUG is set by Rack app
219
+ avoid reusing env on hijack
220
+ tests: cleanup some unused variable warnings
221
+ ISSUES: add a note about Debian BTS interopability
222
+
223
+ Roughly all mailing discussions since the last release:
224
+
225
+ https://bogomips.org/unicorn-public/?q=d:20171004..20171223
226
+
227
+ === unicorn 5.3.1 / 2017-10-03 19:03 UTC
228
+
229
+ This release fixes an occasional GC problem introduced in v5.3.0
230
+ to reduce global variable overhead (commit 979ebcf91705709b)
231
+
232
+ Thanks to Xuanzhong Wei for the patch which lead to this release:
233
+
234
+ https://bogomips.org/unicorn-public/20171003182054.76392-1-azrlew@gmail.com/T/#u
235
+ https://bogomips.org/unicorn-public/20171003145718.30404-1-azrlew@gmail.com/T/#u
236
+
237
+ Xuanzhong Wei (1):
238
+ fix GC issue on rb_global_variable array
239
+
240
+ === unicorn 5.3.0 / 2017-04-01 08:03 UTC
241
+
242
+ A couple of portability fixes from Dylan Thacker-Smith and
243
+ Jeremy Evans since 5.3.0.pre1 over a week ago, but this looks
244
+ ready for a stable release, today.
245
+
246
+ When I started this over 8 years ago, I wondered if this would
247
+ just end up being an April Fools' joke. Guess not. I guess I
248
+ somehow tricked people into using a terribly marketed web server
249
+ that cannot talk directly to untrusted clients :x Anyways,
250
+ unicorn won't be able to handle slow clients 8 years from now,
251
+ either, or 80 years from now. And I vow never to learn to use
252
+ new-fangled things like epoll, kqueue, or threads :P
253
+
254
+ Anyways, this is a largish release with several new features,
255
+ and no backwards incompatibilities.
256
+
257
+ Simon Eskildsen contributed heavily using TCP_INFO under Linux
258
+ to implement the (now 5 year old) check_client_connection feature:
259
+
260
+ https://bogomips.org/unicorn/Unicorn/Configurator.html#method-i-check_client_connection
261
+ https://bogomips.org/unicorn-public/?q=s:check_client_connection&d:..20170401&x=t
262
+
263
+ This also led to FreeBSD and OpenBSD portability improvements in
264
+ one of our dependencies, raindrops:
265
+
266
+ https://bogomips.org/raindrops-public/20170323024829.GA5190@dcvr/T/#u
267
+
268
+ Jeremy Evans contributed several new features. First he
269
+ implemented after_worker_exit to aid debugging:
270
+
271
+ https://bogomips.org/unicorn/Unicorn/Configurator.html#method-i-after_worker_exit
272
+ https://bogomips.org/unicorn-public/?q=s:after_worker_exit&d:..20170401&x=t#t
273
+
274
+ And then security-related features to isolate workers. Workers
275
+ may now chroot to drop access to the master filesystem, and the
276
+ new after_worker_ready configuration hook now exists to aid with
277
+ chroot support in workers:
278
+
279
+ https://bogomips.org/unicorn/Unicorn/Configurator.html#method-i-after_worker_ready
280
+ https://bogomips.org/unicorn/Unicorn/Worker.html#method-i-user
281
+ https://bogomips.org/unicorn-public/?q=s:after_worker_ready&d:..20170401&x=t#t
282
+ https://bogomips.org/unicorn-public/?q=s:chroot&d:..20170401&x=t#t
283
+
284
+ Additionally, workers may run in a completely different VM space
285
+ (nullifying preload_app and any CoW savings) with the new
286
+ worker_exec option:
287
+
288
+ https://bogomips.org/unicorn/Unicorn/Configurator.html#method-i-worker_exec
289
+ https://bogomips.org/unicorn-public/?q=s:worker_exec&d:..20170401&x=t#t
290
+
291
+ There are also several improvements to FreeBSD and OpenBSD
292
+ support with the addition of these features.
293
+
294
+ shortlog of changes since v5.2.0 (2016-10-31):
295
+
296
+ Dylan Thacker-Smith (1):
297
+ Check for Socket::TCP_INFO constant before trying to get TCP_INFO
298
+
299
+ Eric Wong (30):
300
+ drop rb_str_set_len compatibility replacement
301
+ TUNING: document THP caveat for Linux users
302
+ tee_input: simplify condition for IO#write
303
+ remove response_start_sent
304
+ http_request: freeze constant strings passed IO#write
305
+ Revert "remove response_start_sent"
306
+ t/t0012-reload-empty-config.sh: access ivars directly if needed
307
+ t0011-active-unix-socket.sh: fix race condition in test
308
+ new test for check_client_connection
309
+ revert signature change to HttpServer#process_client
310
+ support "struct tcp_info" on non-Linux and Ruby 2.2+
311
+ unicorn_http: reduce rb_global_variable calls
312
+ oob_gc: rely on opt_aref_with optimization on Ruby 2.2+
313
+ http_request: reduce insn size for check_client_connection
314
+ freebsd: avoid EINVAL when setting accept filter
315
+ test-lib: expr(1) portability fix
316
+ tests: keep disabled tests defined
317
+ test_exec: SO_KEEPALIVE value only needs to be true
318
+ doc: fix links to raindrops project
319
+ http_request: support proposed Raindrops::TCP states on non-Linux
320
+ ISSUES: expand on mail archive info + subscription disclaimer
321
+ test_ccc: use a pipe to synchronize test
322
+ doc: remove private email support address
323
+ input: update documentation and hide internals.
324
+ http_server: initialize @pid ivar
325
+ gemspec: remove olddoc from build dependency
326
+ doc: add version annotations for new features
327
+ unicorn 5.3.0.pre1
328
+ doc: note after_worker_exit is also 5.3.0+
329
+ test_exec: SO_KEEPALIVE value only needs to be true (take #2)
330
+
331
+ Jeremy Evans (7):
332
+ Add after_worker_exit configuration option
333
+ Fix code example in after_worker_exit documentation
334
+ Add support for chroot to Worker#user
335
+ Add after_worker_ready configuration option
336
+ Add worker_exec configuration option
337
+ Don't pass a block for fork when forking workers
338
+ Check for SocketError on first ccc attempt
339
+
340
+ Simon Eskildsen (1):
341
+ check_client_connection: use tcp state on linux
342
+
343
+ === unicorn 5.3.0.pre1 / 2017-03-24 00:25 UTC
344
+
345
+ A largish release with several new features.
346
+
347
+ Simon Eskildsen contributed heavily using TCP_INFO under Linux
348
+ to implement the (now 5 year old) check_client_connection feature:
349
+
350
+ https://bogomips.org/unicorn/Unicorn/Configurator.html#method-i-check_client_connection
351
+ https://bogomips.org/unicorn-public/?q=s:check_client_connection&d:..20170324&x=t
352
+
353
+ This also led to FreeBSD and OpenBSD portability improvements in
354
+ one of our dependencies, raindrops:
355
+
356
+ https://bogomips.org/raindrops-public/20170323024829.GA5190@dcvr/T/#u
357
+
358
+ Jeremy Evans contributed several new features. First he
359
+ implemented after_worker_exit to aid debugging:
360
+
361
+ https://bogomips.org/unicorn/Unicorn/Configurator.html#method-i-after_worker_exit
362
+ https://bogomips.org/unicorn-public/?q=s:after_worker_exit&d:..20170324&x=t#t
363
+
364
+ And then security-related features to isolate workers. Workers
365
+ may now chroot to drop access to the master filesystem, and the
366
+ new after_worker_ready configuration hook now exists to aid with
367
+ chroot support in workers:
368
+
369
+ https://bogomips.org/unicorn/Unicorn/Configurator.html#method-i-after_worker_ready
370
+ https://bogomips.org/unicorn/Unicorn/Worker.html#method-i-user
371
+ https://bogomips.org/unicorn-public/?q=s:after_worker_ready&d:..20170324&x=t#t
372
+ https://bogomips.org/unicorn-public/?q=s:chroot&d:..20170324&x=t#t
373
+
374
+ Additionally, workers may run in a completely different VM space
375
+ (nullifying preload_app and any CoW savings) with the new
376
+ worker_exec option:
377
+
378
+ https://bogomips.org/unicorn/Unicorn/Configurator.html#method-i-worker_exec
379
+ https://bogomips.org/unicorn-public/?q=s:worker_exec&d:..20170324&x=t#t
380
+
381
+ There are also several improvements to FreeBSD and OpenBSD
382
+ support with the addition of these features.
383
+
384
+ 34 changes since 5.2.0 (2016-10-31):
385
+
386
+ Eric Wong (27):
387
+ drop rb_str_set_len compatibility replacement
388
+ TUNING: document THP caveat for Linux users
389
+ tee_input: simplify condition for IO#write
390
+ remove response_start_sent
391
+ http_request: freeze constant strings passed IO#write
392
+ Revert "remove response_start_sent"
393
+ t/t0012-reload-empty-config.sh: access ivars directly if needed
394
+ t0011-active-unix-socket.sh: fix race condition in test
395
+ new test for check_client_connection
396
+ revert signature change to HttpServer#process_client
397
+ support "struct tcp_info" on non-Linux and Ruby 2.2+
398
+ unicorn_http: reduce rb_global_variable calls
399
+ oob_gc: rely on opt_aref_with optimization on Ruby 2.2+
400
+ http_request: reduce insn size for check_client_connection
401
+ freebsd: avoid EINVAL when setting accept filter
402
+ test-lib: expr(1) portability fix
403
+ tests: keep disabled tests defined
404
+ test_exec: SO_KEEPALIVE value only needs to be true
405
+ doc: fix links to raindrops project
406
+ http_request: support proposed Raindrops::TCP states on non-Linux
407
+ ISSUES: expand on mail archive info + subscription disclaimer
408
+ test_ccc: use a pipe to synchronize test
409
+ doc: remove private email support address
410
+ input: update documentation and hide internals.
411
+ http_server: initialize @pid ivar
412
+ gemspec: remove olddoc from build dependency
413
+ doc: add version annotations for new features
414
+
415
+ Jeremy Evans (6):
416
+ Add after_worker_exit configuration option
417
+ Fix code example in after_worker_exit documentation
418
+ Add support for chroot to Worker#user
419
+ Add after_worker_ready configuration option
420
+ Add worker_exec configuration option
421
+ Don't pass a block for fork when forking workers
422
+
423
+ Simon Eskildsen (1):
424
+ check_client_connection: use tcp state on linux
425
+
426
+ === unicorn 5.2.0 / 2016-10-31 20:00 UTC
427
+
428
+ Most notably, this release allows us to support requests with
429
+ lines delimited by LF-only, as opposed to the standard CRLF
430
+ pair and allowed by RFC 2616 sec 19.3.
431
+
432
+ Thanks to Mishael A Sibiryakov for the explanation and change:
433
+
434
+ https://bogomips.org/unicorn-public/1476954332.1736.156.camel@junki.org/
435
+
436
+ Thanks to Let's Encrypt, the website also moves to HTTPS
437
+ <https://bogomips.org/unicorn/> to improve reader privacy. The
438
+ "unicorn.bogomips.org" subdomain will be retired soon to reduce
439
+ subjectAltName bloat and speed up certificate renewals.
440
+
441
+ There's also the usual round of documentation and example
442
+ updates, too.
443
+
444
+ Eric Wong (7):
445
+ examples/init.sh: update to reduce upgrade raciness
446
+ doc: systemd should only kill master in example
447
+ examples/logrotate.conf: update example for systemd
448
+ doc: update gmane URLs to point to our own archives
449
+ relocate website to https://bogomips.org/unicorn/
450
+ TODO: remove Rack 2.x item
451
+ build: "install-gem" target avoids network
452
+
453
+ Mishael A Sibiryakov (1):
454
+ Add some tolerance (RFC2616 sec. 19.3)
455
+
456
+ === unicorn 5.1.0 - rack is optional, again / 2016-04-01 00:35 UTC
457
+
458
+ Note: no code changes since 5.1.0.pre1 from January.^WNo, wait,
459
+ last minute performance improvement added today. See below.
460
+
461
+ The big change is rack is not required (but still recommended).
462
+ Applications are expected to depend on rack on their own so they can
463
+ specify the version of rack they prefer without unicorn pulling
464
+ in a newer, potentially incompatible version.
465
+
466
+ unicorn will always attempt to work with multiple versions of rack
467
+ as practical.
468
+
469
+ The HTTP parser also switched to using the TypedData C-API for
470
+ extra type safety and memory usage accounting support in the
471
+ 'objspace' extension.
472
+
473
+ Thanks to Adam Duke to bringing the rack change to our attention
474
+ and Aaron Patterson for helping with the matter.
475
+
476
+ Last minute change: we now support the new leftpad() syscall under
477
+ Linux for major performance and security improvement:
478
+
479
+ http://mid.gmane.org/1459463613-32473-1-git-send-email-richard@nod.at
480
+
481
+ 8^H9 changes since 5.0.1:
482
+
483
+ http: TypedData C-API conversion
484
+ various documentation updates
485
+ doc: bump olddoc to ~> 1.2 for extra NNTP URL
486
+ rack is optional at runtime, required for dev
487
+ doc update for ClientShutdown exceptions class
488
+ unicorn 5.1.0.pre1 - rack is optional, again
489
+ doc: reference --keep-file-descriptors for "bundle exec"
490
+ doc: further trimming to reduce noise
491
+ use leftpad Linux syscall for speed!
492
+
493
+ === unicorn 5.1.0.pre1 - rack is optional, again / 2016-01-27 23:08 UTC
494
+
495
+ The big change is rack is not required (but still recommended).
496
+ Applications are expected to depend on rack on their own so they can
497
+ specify the version of rack they prefer without unicorn pulling
498
+ in a newer, potentially incompatible version.
499
+
500
+ unicorn will always attempt to work with multiple versions of rack
501
+ as practical.
502
+
503
+ The HTTP parser also switched to using the TypedData C-API for
504
+ extra type safety and memory usage accounting support in the
505
+ 'objspace' extension.
506
+
507
+ Thanks to Adam Duke to bringing the rack change to our attention
508
+ and Aaron Patterson for helping with the matter.
509
+
510
+ There might be more documentation-related changes before 5.1.0
511
+ final. I am considering dropping pandoc from manpage generation
512
+ and relying on pod2man (from Perl) because it has a wider install
513
+ base.
514
+
515
+ 5 changes since v5.0.1:
516
+
517
+ http: TypedData C-API conversion
518
+ various documentation updates
519
+ doc: bump olddoc to ~> 1.2 for extra NNTP URL
520
+ rack is optional at runtime, required for dev
521
+ doc update for ClientShutdown exceptions class
522
+
523
+ === unicorn 5.0.1 - continuing to violate Rack SPEC / 2015-11-17 22:44 UTC
524
+
525
+ Once again, we allow nil values in response headers. We've had
526
+ this bug since March 2009, and thus cannot expect existing
527
+ applications and middlewares running unicorn to fix this.
528
+
529
+ Unfortunately, supporting this bug contributes to application
530
+ server lock-in, but at least we'll document it as such.
531
+
532
+ Thanks to Owen Ou <o@heroku.com> for reporting this regression:
533
+
534
+ http://bogomips.org/unicorn-public/CAO47=rJa=zRcLn_Xm4v2cHPr6c0UswaFC_omYFEH+baSxHOWKQ@mail.gmail.com/
535
+
536
+ Additionally, systemd examples are now in the examples/ directory
537
+ based on a post by Christos Trochalakis <yatiohi@ideopolis.gr>:
538
+
539
+ http://bogomips.org/unicorn-public/20150708130821.GA1361@luke.ws.skroutz.gr/
540
+
541
+ === unicorn 5.0.0 - most boring major release. EVER. / 2015-11-01 08:48 UTC
542
+
543
+ An evolutionary dead-end since its announcement[1] nearly six years
544
+ ago, this old-fashioned preforker has had enough bugs and missteps
545
+ that it's managed to hit version 5!
546
+
547
+ I wish I could say unicorn 5 is leaps and bounds better than 4, but
548
+ it is not. This major version change allows us to drop some cruft
549
+ and unused features which accumulated over the years, resulting in
550
+ several kilobytes of memory saved[2]!
551
+
552
+ Compatibility:
553
+
554
+ * The horrible, proprietary (:P) "Status:" response header is
555
+ finally gone, saving at least 16 precious bytes in every HTTP
556
+ response. This should make it easier to write custom HTTP clients
557
+ which are compatible across all HTTP servers. It will hopefully
558
+ make migrating between different Rack servers easier for new
559
+ projects.
560
+
561
+ * Ruby 1.8 support removed. Ruby 1.9.3 is currently the earliest
562
+ supported version. However, expect minor, likely-unnoticeable
563
+ performance regressions if you use Ruby 2.1 or earlier. Going
564
+ forward, unicorn will favor the latest version (currently 2.2) of
565
+ the mainline Ruby implementation, potentially sacrificing
566
+ performance on older Rubies.
567
+
568
+ * Some internal, undocumented features and APIs used by
569
+ derivative servers are gone; removing bloat and slightly lowering
570
+ memory use. We have never and will never endorse the use of any
571
+ applications or middleware with a dependency on unicorn,
572
+ applications should be written for Rack instead.
573
+ Note: Rainbows! 5.0 will be released next week or so to be
574
+ compatible with unicorn 5.x
575
+
576
+ New features:
577
+
578
+ * sd_listen_fds(3) emulation added for systemd compatibility.
579
+ You may now stop using PID files and other process monitoring
580
+ software when using systemd.
581
+
582
+ * Newly-set TCP socket options are now applied to inherited sockets.
583
+
584
+ * Dynamic changes in the application to Rack::Utils::HTTP_STATUS
585
+ hash is now supported; allowing users to set custom status lines
586
+ in Rack to be reflected in unicorn. This feature causes a minor
587
+ performance regression, but is made up for Ruby 2.2 users with
588
+ other optimizations.
589
+
590
+ * The monotonic clock is used under Ruby 2.1+, making the
591
+ timeout feature immune to system clock changes.
592
+
593
+ As unicorn may be used anonymously without registration, the
594
+ project is committed to supporting anonymous and pseudonymous
595
+ help requests, contributions and feedback via plain-text mail to:
596
+
597
+ unicorn-public@bogomips.org
598
+
599
+ The mail submission port (587) is open to those behind firewalls
600
+ and allows access via Tor and anonymous remailers.
601
+ Archives are accessible via: http://bogomips.org/unicorn-public/
602
+ and mirrored to various other places, so you do not need to use
603
+ a valid address when posting.
604
+
605
+ Finally, rest assured the core design of unicorn will never change.
606
+ It will never use new-fangled things like threads, kqueue or epoll;
607
+ but will always remain a preforking server serving one client
608
+ per-process.
609
+
610
+ [1] http://mid.gmane.org/20090211230457.GB22926@dcvr.yhbt.net
611
+ [2] this would've been like, totally gnarly in the 80s!
612
+
613
+ === unicorn 5.0.0.pre2 - another prerelease! / 2015-07-06 21:37 UTC
614
+
615
+ There is a minor TCP socket options are now applied to inherited
616
+ sockets, and we have native support for inheriting sockets from
617
+ systemd (by emulating the sd_listen_fds(3) function).
618
+
619
+ Dynamic changes in the application to Rack::Utils::HTTP_STATUS
620
+ codes is now supported, so you can use your own custom status
621
+ lines.
622
+
623
+ Ruby 2.2 and later is now favored for performance.
624
+ Optimizations by using constants which made sense in earlier
625
+ versions of Ruby are gone: so users of old Ruby versions
626
+ will see performance regressions. Ruby 2.2 users should
627
+ see the same or better performance, and we have less code
628
+ as a result.
629
+
630
+ * doc: update some invalid URLs
631
+ * apply TCP socket options on inherited sockets
632
+ * reflect changes in Rack::Utils::HTTP_STATUS_CODES
633
+ * reduce constants and optimize for Ruby 2.2
634
+ * http_response: reduce size of multi-line header path
635
+ * emulate sd_listen_fds for systemd support
636
+ * test/unit/test_response.rb: compatibility with older test-unit
637
+
638
+ This also includes all changes in unicorn 5.0.0.pre1:
639
+
640
+ http://bogomips.org/unicorn-public/m/20150615225652.GA16164@dcvr.yhbt.net.html
641
+
642
+ === unicorn 5.0.0.pre1 - incompatible changes! / 2015-06-15 22:49 UTC
643
+
644
+ This release finally drops Ruby 1.8 support and requires Ruby 1.9.3
645
+ or later. The horrible "Status:" header in our HTTP response is
646
+ finally gone, saving at least 16 precious bytes in every single HTTP
647
+ response.
648
+
649
+ Under Ruby 2.1 and later, the monotonic clock is used for timeout
650
+ handling for better accuracy.
651
+
652
+ Several experimental, unused and undocumented features are removed.
653
+
654
+ There's also tiny, minor performance and memory improvements from
655
+ dropping 1.8 compatibility, but probably nothing noticeable on a
656
+ typical real-life (bloated) app.
657
+
658
+ The biggest performance improvement we made was to our website by
659
+ switching to olddoc. Depending on connection speed, latency, and
660
+ renderer performance, it typically loads two to four times faster.
661
+
662
+ Finally, for the billionth time: unicorn must never be exposed
663
+ to slow clients, as it will never ever use new-fangled things
664
+ like non-blocking socket I/O, threads, epoll or kqueue. unicorn
665
+ must be used with a fully-buffering reverse proxy such as nginx
666
+ for slow clients.
667
+
668
+ * ISSUES: update with mailing list subscription
669
+ * GIT-VERSION-GEN: start 5.0.0 development
670
+ * http: remove xftrust options
671
+ * FAQ: add entry for Rails autoflush_log
672
+ * dev: remove isolate dependency
673
+ * unicorn.gemspec: depend on test-unit 3.0
674
+ * http_response: remove Status: header
675
+ * remove RubyForge and Freecode references
676
+ * remove mongrel.rubyforge.org references
677
+ * http: remove the keepalive requests limit
678
+ * http: reduce parser from 72 to 56 bytes on 64-bit
679
+ * examples: add run_once to before_fork hook example
680
+ * worker: remove old tmp accessor
681
+ * http_server: save 450+ bytes of memory on x86-64
682
+ * t/t0002-parser-error.sh: relax test for rack 1.6.0
683
+ * remove SSL support
684
+ * tmpio: drop the "size" method
685
+ * switch docs + website to olddoc
686
+ * README: clarify/reduce references to unicorn_rails
687
+ * gemspec: fixup olddoc migration
688
+ * use the monotonic clock under Ruby 2.1+
689
+ * http: -Wshorten-64-to-32 warnings on clang
690
+ * remove old inetd+git examples and exec_cgi
691
+ * http: standalone require + reduction in binary size
692
+ * GNUmakefile: fix clean gem build + reduce build cruft
693
+ * socket_helper: reduce constant lookups and caching
694
+ * remove 1.8, <= 1.9.1 fallback for missing IO#autoclose=
695
+ * favor IO#close_on_exec= over fcntl in 1.9+
696
+ * use require_relative to reduce syscalls at startup
697
+ * doc: update support status for Ruby versions
698
+ * fix uninstalled testing and reduce require paths
699
+ * test_socket_helper: do not depend on SO_REUSEPORT
700
+ * favor "a.b(&:c)" form over "a.b { |x| x.c }"
701
+ * ISSUES: add section for bugs in other projects
702
+ * http_server: favor ivars over constants
703
+ * explain 11 byte magic number for self-pipe
704
+ * const: drop constants used by Rainbows!
705
+ * reduce and localize constant string use
706
+ * Links: mark Rainbows! as historical, reference yahns
707
+ * save about 200 bytes of memory on x86-64
708
+ * http: remove deprecated reset method
709
+ * http: remove experimental dechunk! method
710
+ * socket_helper: update comments
711
+ * doc: document UNICORN_FD in manpage
712
+ * doc: document Etc.nprocessors for worker_processes
713
+ * favor more string literals for cold call sites
714
+ * tee_input: support for Rack::TempfileReaper middleware
715
+ * support TempfileReaper in deployment and development envs
716
+ * favor kgio_wait_readable for single FD over select
717
+ * Merge tag 'v4.9.0'
718
+ * http_request: support rack.hijack by default
719
+ * avoid extra allocation for hijack proc creation
720
+ * FAQ: add note about ECONNRESET errors from bodies
721
+ * process SIGWINCH unless stdin is a TTY
722
+ * ISSUES: discourage HTML mail strongly, welcome nyms
723
+ * http: use rb_hash_clear in Ruby 2.0+
724
+ * http_response: avoid special-casing for Rack < 1.5
725
+ * www: install NEWS.atom.xml properly
726
+ * http_server: remove a few more accessors and constants
727
+ * http_response: simplify regular expression
728
+ * move the socket into Rack env for hijacking
729
+ * http: move response_start_sent into the C ext
730
+ * FAQ: reorder bit on Rack 1.1.x and Rails 2.3.x
731
+ * ensure body is closed during hijack
732
+
733
+ === unicorn 4.9.0 - TempfileReaper support in Rack 1.6 / 2015-04-24 03:09 UTC
734
+
735
+ This release supports the Rack::TempfileReaper middleware found
736
+ in rack 1.6 for cleaning up disk space used by temporary files.
737
+ We also use Rack::TempfileReaper for cleaning up large temporary
738
+ files buffered with TeeInput. Users on rack 1.5 and earlier
739
+ will see no changes.
740
+
741
+ There's also a bunch of documentation/build system improvements.
742
+
743
+ This is likely to be the last Ruby 1.8-compatible release,
744
+ unicorn 5.x will require 1.9.3 or later as well as dropping lots
745
+ of cruft (the stupid "Status:" header in responses being the
746
+ most notable).
747
+
748
+ 21 changes backported from master:
749
+
750
+ ISSUES: update with mailing list subscription
751
+ FAQ: add entry for Rails autoflush_log
752
+ dev: remove isolate dependency
753
+ unicorn.gemspec: depend on test-unit 3.0
754
+ remove RubyForge and Freecode references
755
+ remove mongrel.rubyforge.org references
756
+ examples: add run_once to before_fork hook example
757
+ t/t0002-parser-error.sh: relax test for rack 1.6.0
758
+ switch docs + website to olddoc
759
+ README: clarify/reduce references to unicorn_rails
760
+ gemspec: fixup olddoc migration
761
+ GNUmakefile: fix clean gem build + reduce build cruft
762
+ doc: update support status for Ruby versions
763
+ fix uninstalled testing and reduce require paths
764
+ test_socket_helper: do not depend on SO_REUSEPORT
765
+ ISSUES: add section for bugs in other projects
766
+ explain 11 byte magic number for self-pipe
767
+ Links: mark Rainbows! as historical, reference yahns
768
+ doc: document UNICORN_FD in manpage
769
+ tee_input: support for Rack::TempfileReaper middleware
770
+ support TempfileReaper in deployment and development envs
771
+
772
+ === unicorn 4.8.3 - the end of an era / 2014-05-07 07:50 UTC
773
+
774
+ This release updates documentation to reflect the migration of the
775
+ mailing list to a new public-inbox[1] instance. This is necessary
776
+ due to the impending RubyForge shutdown on May 15, 2014.
777
+
778
+ The public-inbox address is: unicorn-public@bogomips.org
779
+ (no subscription required, plain text only)
780
+ ssoma[2] git archives: git://bogomips.org/unicorn-public
781
+ browser-friendly archives: http://bogomips.org/unicorn-public/
782
+
783
+ Using, getting help for, and contributing to unicorn will never
784
+ require any of the following:
785
+
786
+ 1) non-Free software (including SaaS)
787
+ 2) registration or sign-in of any kind
788
+ 3) a real identity (we accept mail from Mixmaster)
789
+ 4) a graphical user interface
790
+
791
+ Nowadays, plain-text email is the only ubiquitous platform which
792
+ meets all our requirements for communication.
793
+
794
+ There is also one small bugfix to handle premature grandparent death
795
+ upon initial startup. Most users are unaffected.
796
+
797
+ [1] policy: http://public-inbox.org/ - git://80x24.org/public-inbox
798
+ an "archives first" approach to mailing lists
799
+ [2] mechanism: http://ssoma.public-inbox.org/ - git://80x24.org/ssoma
800
+ some sort of mail archiver (using git)
801
+
802
+ === unicorn 4.8.2 - avoid race condition during worker startup / 2014-02-05 18:24 UTC
803
+
804
+ We close SELF_PIPE in the worker immediately, but signal handlers
805
+ do not get setup immediately. So prevent workers from erroring out
806
+ due to invalid SELF_PIPE.
807
+
808
+ === unicorn 4.8.1 / 2014-01-29 08:48 UTC
809
+
810
+ fix races/error handling in worker SIGQUIT handler
811
+
812
+ This protects us from two problems:
813
+
814
+ 1) we (or our app) somehow called IO#close on one of the sockets
815
+ we listen on without removing it from the readers array.
816
+ We'll ignore IOErrors from IO#close and assume we wanted to
817
+ close it.
818
+
819
+ 2) our SIGQUIT handler is interrupted by itself. This can happen as
820
+ a fake signal from the master could be handled and a real signal
821
+ from an outside user is sent to us (e.g. from unicorn-worker-killer)
822
+ or if a user uses the killall(1) command.
823
+
824
+ === unicorn 4.8.0 - big internal changes, but compatible / 2014-01-11 07:34 UTC
825
+
826
+ This release contains fairly major internal workings of master-to-worker
827
+ notifications. The master process no longer sends signals to workers
828
+ for most tasks. This works around some compatibility issues with some
829
+ versions of the "pg" gem (and potentially any other code which may not
830
+ handle EINTR properly). One extra benefit is it also helps stray
831
+ workers notice a rare, unexpected master death more easily. Workers
832
+ continue to (and will always) accept existing signals for compatibility
833
+ with tools/scripts which may signal workers.
834
+
835
+ PID file are always written early (even on upgrade) again to avoid
836
+ breaking strange monitoring setups which use PID files. Keep in mind we
837
+ have always discouraged monitoring based on PID files as they are
838
+ fragile.
839
+
840
+ We now avoid bubbling IOError to the Rack app on premature client
841
+ disconnects when streaming the input body. This is usually not a
842
+ problem with nginx, but may be on some LAN setups without nginx).
843
+
844
+ Thanks to Sam Saffron, Jimmy Soho, Rodrigo Rosenfeld Rosas,
845
+ Michael Fischer, and Andrew Hobson for their help with this release.
846
+
847
+ Note: the unicorn mailing list will be moved/changed soon due to the
848
+ RubyForge shutdown. unicorn will always rely only on Free Software.
849
+ There will never be any sign-up requirements nor terms-of-service to
850
+ agree to when communicating with us.
851
+
852
+ === unicorn 4.8.0pre1 / 2013-12-09 09:51 UTC
853
+
854
+ Eric Wong (6):
855
+ tests: fix SO_REUSEPORT tests for old Linux and non-Linux
856
+ stream_input: avoid IO#close on client disconnect
857
+ t0300: kill off stray processes in test
858
+ always write PID file early for compatibility
859
+ doc: clarify SIGNALS and reference init example
860
+ rework master-to-worker signaling to use a pipe
861
+
862
+ === unicorn 4.7.0 - minor updates, license tweak / 2013-11-04 06:59 UTC
863
+
864
+ * support SO_REUSEPORT on new listeners (:reuseport)
865
+
866
+ This allows users to start an independent instance of unicorn on
867
+ a the same port as a running unicorn (as long as both instances
868
+ use :reuseport).
869
+
870
+ ref: https://lwn.net/Articles/542629/
871
+
872
+ * unicorn is now GPLv2-or-later and Ruby 1.8-licensed
873
+ (instead of GPLv2-only, GPLv3-only, and Ruby 1.8-licensed)
874
+
875
+ This changes nothing at the moment. Once the FSF publishes the next
876
+ version of the GPL, users may choose the newer GPL version without the
877
+ unicorn BDFL approving it. Two years ago when I got permission to add
878
+ GPLv3 to the license options, I also got permission from all past
879
+ contributors to approve future versions of the GPL. So now I'm
880
+ approving all future versions of the GPL for use with unicorn.
881
+
882
+ Reasoning below:
883
+
884
+ In case the GPLv4 arrives and I am not alive to approve/review it,
885
+ the lesser of evils is have give blanket approval of all future GPL
886
+ versions (as published by the FSF). The worse evil is to be stuck
887
+ with a license which cannot guarantee the Free-ness of this project
888
+ in the future.
889
+
890
+ This unfortunately means the FSF can theoretically come out with
891
+ license terms I do not agree with, but the GPLv2 and GPLv3 will
892
+ always be an option to all users.
893
+
894
+ Note: we currently prefer GPLv3
895
+
896
+ Two improvements thanks to Ernest W. Durbin III:
897
+
898
+ * USR2 redirects fixed for Ruby 1.8.6 (broken since 4.1.0)
899
+ * unicorn(1) and unicorn_rails(1) enforces valid integer for -p/--port
900
+
901
+ A few more odd, minor tweaks and fixes:
902
+
903
+ * attempt to rename PID file when possible (on USR2)
904
+ * workaround reopen atomicity issues for stdio vs non-stdio
905
+ * improve handling of client-triggerable socket errors
906
+
907
+ === unicorn 4.6.3 - fix --no-default-middleware option / 2013-06-21 08:01 UTC
908
+
909
+ Thanks to Micah Chalmer for this fix. There are also minor
910
+ documentation updates and internal cleanups.
911
+
912
+ === unicorn 4.6.2 - HTTP parser fix for Rainbows! / 2013-02-26 02:59 UTC
913
+
914
+ This release fixes a bug in Unicorn::HttpParser#filter_body
915
+ which affected some configurations of Rainbows! There is
916
+ also a minor size reduction in the DSO.
917
+
918
+ === unicorn 4.6.1 - minor cleanups / 2013-02-21 08:38 UTC
919
+
920
+ Unicorn::Const::UNICORN_VERSION is now auto-generated from
921
+ GIT-VERSION-GEN and always correct. Minor cleanups for
922
+ hijacking.
923
+
924
+ === unicorn 4.6.0 - hijacking support / 2013-02-06 11:23 UTC
925
+
926
+ This pre-release adds hijacking support for Rack 1.5 users.
927
+ See Rack documentation for more information about hijacking.
928
+ There is also a new --no-default-middleware/-N option
929
+ for the `unicorn' command to ignore RACK_ENV within unicorn
930
+ thanks to Lin Jen-Shin.
931
+
932
+ There are only documentation and test-portability updates
933
+ since 4.6.0pre1, no code changes.
934
+
935
+ === unicorn 4.6.0pre1 - hijacking support / 2013-01-29 21:05 UTC
936
+
937
+ This pre-release adds hijacking support for Rack 1.5 users.
938
+ See Rack documentation for more information about hijacking.
939
+ There is also a new --no-default-middleware/-N option
940
+ for the `unicorn' command to ignore RACK_ENV within unicorn.
941
+
942
+ === unicorn 4.5.0 - check_client_connection option / 2012-12-07 22:59 UTC
943
+
944
+ The new check_client_connection option allows unicorn to detect
945
+ most disconnected local clients before potentially expensive
946
+ application processing begins.
947
+
948
+ This feature is useful for applications experiencing spikes of
949
+ traffic leading to undesirable queue times, as clients will
950
+ disconnect (and perhaps even retry, compounding the problem)
951
+ before unicorn can even start processing the request.
952
+
953
+ To enable this feature, add the following line to a unicorn
954
+ config file:
955
+
956
+ check_client_connection true
957
+
958
+ This feature only works when nginx (or any other HTTP/1.0+
959
+ client) is on the same machine as unicorn.
960
+
961
+ A huge thanks to Tom Burns for implementing and testing this
962
+ change in production with real traffic (including mitigating
963
+ an unexpected DoS attack).
964
+
965
+ ref: http://mid.gmane.org/CAK4qKG3rkfVYLyeqEqQyuNEh_nZ8yw0X_cwTxJfJ+TOU+y8F+w@mail.gmail.com
966
+
967
+ This release fixes broken Rainbows! compatibility in 4.5.0pre1.
968
+
969
+ === unicorn 4.5.0pre1 - check_client_connection option / 2012-11-29 23:48 UTC
970
+
971
+ The new check_client_connection option allows unicorn to detect
972
+ most disconnected clients before potentially expensive
973
+ application processing begins.
974
+
975
+ This feature is useful for applications experiencing spikes of
976
+ traffic leading to undesirable queue times, as clients will
977
+ disconnect (and perhaps even retry, compounding the problem)
978
+ before unicorn can even start processing the request.
979
+
980
+ To enable this feature, add the following line to a unicorn
981
+ config file:
982
+
983
+ check_client_connection true
984
+
985
+ A huge thanks to Tom Burns for implementing and testing this
986
+ change in production with real traffic (including mitigating
987
+ an unexpected DoS attack).
988
+
989
+ === unicorn 4.4.0 - minor updates / 2012-10-11 09:11 UTC
990
+
991
+ Non-regular files are no longer reopened on SIGUSR1. This
992
+ allows users to specify FIFOs as log destinations.
993
+
994
+ TCP_NOPUSH/TCP_CORK is no longer set/unset by default. Use
995
+ :tcp_nopush explicitly with the "listen" directive if you wish
996
+ to enable TCP_NOPUSH/TCP_CORK.
997
+
998
+ Listen sockets are now bound _after_ loading the application for
999
+ preload_app(true) users. This prevents load balancers from
1000
+ sending traffic to an application server while the application
1001
+ is still loading.
1002
+
1003
+ There are also minor test suite cleanups.
1004
+
1005
+ === unicorn 4.3.1 - shutdown() fixes / 2012-04-29 07:04 UTC
1006
+
1007
+ * Call shutdown(2) if a client EOFs on us during upload.
1008
+ We can avoid holding a socket open if the Rack app forked a
1009
+ process during uploads.
1010
+
1011
+ * ignore potential Errno::ENOTCONN errors (from shutdown(2)).
1012
+ Even on LANs, connections can occasionally be accept()-ed but
1013
+ be unusable afterwards.
1014
+
1015
+ Thanks to Joel Nimety <jnimety@continuity.net>,
1016
+ Matt Smith <matt@nearapogee.com> and George <lists@southernohio.net>
1017
+ on the mongrel-unicorn@rubyforge.org mailing list for their
1018
+ feedback and testing for this release.
1019
+
1020
+ === unicorn 4.3.0 - minor fixes and updates / 2012-04-17 21:51 UTC
1021
+
1022
+ * PATH_INFO (aka REQUEST_PATH) increased to 4096 (from 1024).
1023
+ This allows requests with longer path components and matches
1024
+ the system PATH_MAX value common to GNU/Linux systems for
1025
+ serving filesystem components with long names.
1026
+
1027
+ * Apps that fork() (but do not exec()) internally for background
1028
+ tasks now indicate the end-of-request immediately after
1029
+ writing the Rack response.
1030
+
1031
+ Thanks to Hongli Lai, Lawrence Pit, Patrick Wenger and Nuo Yan
1032
+ for their valuable feedback for this release.
1033
+
1034
+ === unicorn 4.2.1 - minor fix and doc updates / 2012-03-26 21:39 UTC
1035
+
1036
+ * Stale pid files are detected if a pid is recycled by processes
1037
+ belonging to another user, thanks to Graham Bleach.
1038
+ * nginx example config updates thanks to to Eike Herzbach.
1039
+ * KNOWN_ISSUES now documents issues with apps/libs that install
1040
+ conflicting signal handlers.
1041
+
1042
+ === unicorn 4.2.0 / 2012-01-28 09:18 UTC
1043
+
1044
+ The GPLv3 is now an option to the Unicorn license. The existing GPLv2
1045
+ and Ruby-only terms will always remain options, but the GPLv3 is
1046
+ preferred.
1047
+
1048
+ Daemonization is correctly detected on all terminals for development
1049
+ use (Brian P O'Rourke).
1050
+
1051
+ Unicorn::OobGC respects applications that disable GC entirely
1052
+ during application dispatch (Yuichi Tateno).
1053
+
1054
+ Many test fixes for OpenBSD, which may help other *BSDs, too.
1055
+ (Jeremy Evans).
1056
+
1057
+ There is now _optional_ SSL support (via the "kgio-monkey"
1058
+ RubyGem). On fast, secure LANs, SSL is only intended for
1059
+ detecting data corruption that weak TCP checksums cannot detect.
1060
+ Our SSL support is remains unaudited by security experts.
1061
+
1062
+ There are also some minor bugfixes and documentation
1063
+ improvements.
1064
+
1065
+ Ruby 2.0.0dev also has a copy-on-write friendly GC which can save memory
1066
+ when combined with "preload_app true", so if you're in the mood, start
1067
+ testing Unicorn with the latest Ruby!
1068
+
1069
+ === unicorn 4.1.1 - fix last-resort timeout accuracy / 2011-08-25 21:30 UTC
1070
+
1071
+ The last-resort timeout mechanism was inaccurate and often
1072
+ delayed in activation since the 2.0.0 release. It is now fixed
1073
+ and remains power-efficient in idle situations, especially with
1074
+ the wakeup reduction in MRI 1.9.3+.
1075
+
1076
+ There is also a new document on application timeouts
1077
+ intended to discourage the reliance on this last-resort
1078
+ mechanism. It is visible on the web at:
1079
+
1080
+ http://unicorn.bogomips.org/Application_Timeouts.html
1081
+
1082
+ === unicorn 4.1.0 - small updates and fixes / 2011-08-20 00:33 UTC
1083
+
1084
+ * Rack::Chunked and Rack::ContentLength middlewares are loaded
1085
+ by default for RACK_ENV=(development|deployment) users to match
1086
+ Rack::Server behavior. As before, use RACK_ENV=none if you want
1087
+ fine-grained control of your middleware. This should also
1088
+ help users of Rainbows! and Zbatery.
1089
+
1090
+ * CTL characters are now rejected from HTTP header values
1091
+
1092
+ * Exception messages are now filtered for [:cntrl:] characters
1093
+ since application/middleware authors may forget to do so
1094
+
1095
+ * Workers will now terminate properly if a SIGQUIT/SIGTERM/SIGINT
1096
+ is received while during worker process initialization.
1097
+
1098
+ * close-on-exec is explicitly disabled to future-proof against
1099
+ Ruby 2.0 changes [ruby-core:38140]
1100
+
1101
+ === unicorn 4.0.1 - regression bugfixes / 2011-06-29 18:59 UTC
1102
+
1103
+ This release fixes things for users of per-worker "listen"
1104
+ directives in the after_fork hook. Thanks to ghazel@gmail.com
1105
+ for reporting the bug.
1106
+
1107
+ The "timeout" configurator directive is now truncated to
1108
+ 0x7ffffffe seconds to prevent overflow when calling
1109
+ IO.select.
1110
+
1111
+ === unicorn 4.0.0 - for mythical hardware! / 2011-06-27 09:05 UTC
1112
+
1113
+ A single Unicorn instance may manage more than 1024 workers
1114
+ without needing privileges to modify resource limits. As a
1115
+ result of this, the "raindrops"[1] gem/library is now a required
1116
+ dependency.
1117
+
1118
+ TCP socket defaults now favor low latency to mimic UNIX domain
1119
+ socket behavior (tcp_nodelay: true, tcp_nopush: false). This
1120
+ hurts throughput, users who want to favor throughput should
1121
+ specify "tcp_nodelay: false, tcp_nopush: true" in the listen
1122
+ directive.
1123
+
1124
+ Error logging is more consistent and all lines should be
1125
+ formatted correctly in backtraces. This may break the
1126
+ behavior of some log parsers.
1127
+
1128
+ The call stack is smaller and thus easier to examine backtraces
1129
+ when debugging Rack applications.
1130
+
1131
+ There are some internal API changes and cleanups, but none that
1132
+ affect applications designed for Rack. See "git log v3.7.0.."
1133
+ for details.
1134
+
1135
+ For users who cannot install kgio[2] or raindrops, Unicorn 1.1.x
1136
+ remains supported indefinitely. Unicorn 3.x will remain
1137
+ supported if there is demand. We expect raindrops to introduce
1138
+ fewer portability problems than kgio did, however.
1139
+
1140
+ [1] http://raindrops.bogomips.org/
1141
+ [2] http://bogomips.org/kgio/
1142
+
1143
+ === unicorn 3.7.0 - minor feature update / 2011-06-09 20:51 UTC
1144
+
1145
+ * miscellaneous documentation improvements
1146
+ * return 414 (instead of 400) for Request-URI Too Long
1147
+ * strip leading and trailing linear whitespace in header values
1148
+
1149
+ User-visible improvements meant for Rainbows! users:
1150
+
1151
+ * add :ipv6only "listen" option (same as nginx)
1152
+
1153
+ === unicorn 3.6.2 - fix Unicorn::OobGC module / 2011-04-30 06:40 UTC
1154
+
1155
+ The optional Unicorn::OobGC module is reimplemented to fix
1156
+ breakage that appeared in v3.3.1. There are also minor
1157
+ documentation updates, but no code changes as of 3.6.1 for
1158
+ non-OobGC users.
1159
+
1160
+ There is also a v1.1.7 release to fix the same OobGC breakage
1161
+ that appeared for 1.1.x users in the v1.1.6 release.
1162
+
1163
+ === unicorn 1.1.7 - major fixes to minor components / 2011-04-30 06:33 UTC
1164
+
1165
+ No changes to the core code, so this release only affects users
1166
+ of the Unicorn::OobGC and Unicorn::ExecCGI modules.
1167
+ Unicorn::OobGC was totally broken by the fix in the v1.1.6
1168
+ release and is now reimplemented. Unicorn::ExecCGI (which
1169
+ hardly anybody uses) now returns proper HTTP status codes.
1170
+
1171
+ === unicorn 3.6.1 - fix OpenSSL PRNG workaround / 2011-04-26 23:06 UTC
1172
+
1173
+ Our attempt in 3.6.0 to workaround a problem with the OpenSSL
1174
+ PRNG actually made the problem worse. This release corrects the
1175
+ workaround to properly reseed the OpenSSL PRNG after forking.
1176
+
1177
+ === unicorn 3.6.0 - small fixes, PRNG workarounds / 2011-04-21 06:46 UTC
1178
+
1179
+ Mainly small fixes, improvements, and workarounds for fork() issues
1180
+ with pseudo-random number generators shipped with Ruby (Kernel#rand,
1181
+ OpenSSL::Random (used by SecureRandom and also by Rails).
1182
+
1183
+ The PRNG issues are documented in depth here (and links to Ruby Redmine):
1184
+
1185
+ http://bogomips.org/unicorn.git/commit?id=1107ede7
1186
+ http://bogomips.org/unicorn.git/commit?id=b3241621
1187
+
1188
+ If you're too lazy to upgrade, you can just do this in your after_fork
1189
+ hooks:
1190
+
1191
+ after_fork do |server,worker|
1192
+ tmp = srand
1193
+ OpenSSL::Random.seed(tmp.to_s) if defined?(OpenSSL::Random)
1194
+ end
1195
+
1196
+ There are also small log reopening (SIGUSR1) improvements:
1197
+
1198
+ * relative paths may also be reopened, there's a small chance this
1199
+ will break with a handful of setups, but unlikely. This should
1200
+ make configuration easier especially since the "working_directory"
1201
+ configurator directive exists. Brought up by Matthew Kocher:
1202
+ http://thread.gmane.org/gmane.comp.lang.ruby.unicorn.general/900
1203
+
1204
+ * workers will just die (and restart) if log reopening fails for
1205
+ any reason (including user error). This is to workaround the issue
1206
+ reported by Emmanuel Gomez:
1207
+ http://thread.gmane.org/gmane.comp.lang.ruby.unicorn.general/906
1208
+
1209
+ === unicorn 3.5.0 - very minor improvements / 2011-03-15 12:27 UTC
1210
+
1211
+ A small set of small changes but it's been more than a month
1212
+ since our last release. There are minor memory usage and
1213
+ efficiently improvements (for graceful shutdowns). MRI 1.8.7
1214
+ users on *BSD should be sure they're using the latest patchlevel
1215
+ (or upgrade to 1.9.x) because we no longer workaround their
1216
+ broken stdio (that's MRI's job :)
1217
+
1218
+ === unicorn 3.4.0 - for people with very big LANs / 2011-02-04 21:23 UTC
1219
+
1220
+ * IPv6 support in the HTTP hostname parser and configuration
1221
+ language. Configurator syntax for "listen" addresses should
1222
+ be the same as nginx. Even though we support IPv6, we will
1223
+ never support non-LAN/localhost clients connecting to Unicorn.
1224
+
1225
+ * TCP_NOPUSH/TCP_CORK is enabled by default to optimize
1226
+ for bandwidth usage and avoid unnecessary wakeups in nginx.
1227
+
1228
+ * Updated KNOWN_ISSUES document for bugs in recent Ruby 1.8.7
1229
+ (RNG needs reset after fork) and nginx+sendfile()+FreeBSD 8.
1230
+
1231
+ * examples/nginx.conf updated for modern stable versions of nginx.
1232
+
1233
+ * "Status" in headers no longer ignored in the response,
1234
+ Rack::Lint already enforces this so we don't duplicate
1235
+ the work.
1236
+
1237
+ * All tests pass under Ruby 1.9.3dev
1238
+
1239
+ * various bugfixes in the (mostly unused) ExecCGI class that
1240
+ powers http://bogomips.org/unicorn.git
1241
+
1242
+ === unicorn 3.3.1 - one minor, esoteric bugfix / 2011-01-06 23:48 UTC
1243
+
1244
+ We now close the client socket after closing the response body.
1245
+ This does not affect most applications that run under Unicorn,
1246
+ in fact, it may not affect any.
1247
+
1248
+ There is also a new v1.1.6 release for users who do not use
1249
+ kgio.
1250
+
1251
+ === unicorn 1.1.6 - one minor, esoteric bugfix / 2011-01-06 23:46 UTC
1252
+
1253
+ We now close the client socket after closing the response body.
1254
+ This does not affect most applications that run under Unicorn,
1255
+ in fact, it may not affect any.
1256
+
1257
+ === unicorn 3.3.0 - minor optimizations / 2011-01-05 23:43 UTC
1258
+
1259
+ Certain applications that already serve hundreds/thousands of requests a
1260
+ second should experience performance improvements due to
1261
+ Time.now.httpdate usage being removed and reimplemented in C.
1262
+
1263
+ There are also minor internal changes and cleanups for Rainbows!
1264
+
1265
+ === unicorn 3.2.1 - parser improvements for Rainbows! / 2010-12-26 08:04 UTC
1266
+
1267
+ There are numerous improvements in the HTTP parser for
1268
+ Rainbows!, none of which affect Unicorn-only users.
1269
+
1270
+ The kgio dependency is incremented to 2.1: this should avoid
1271
+ ENOSYS errors for folks building binaries on newer Linux
1272
+ kernels and then deploying to older ones.
1273
+
1274
+ There are also minor documentation improvements, the website
1275
+ is now JavaScript-free!
1276
+
1277
+ (Ignore the 3.2.0 release, I fat-fingered some packaging things)
1278
+
1279
+ === unicorn 3.2.0 - parser improvements for Rainbows! / 2010-12-26 07:50 UTC
1280
+
1281
+ There are numerous improvements in the HTTP parser for
1282
+ Rainbows!, none of which affect Unicorn-only users.
1283
+
1284
+ The kgio dependency is incremented to 2.1: this should avoid
1285
+ ENOSYS errors for folks building binaries on newer Linux
1286
+ kernels and then deploying to older ones.
1287
+
1288
+ There are also minor documentation improvements, the website
1289
+ is now JavaScript-free!
1290
+
1291
+ === unicorn 3.1.0 - client_buffer_body_size tuning / 2010-12-09 22:28 UTC
1292
+
1293
+ This release enables tuning the client_buffer_body_size to raise
1294
+ or lower the threshold for buffering request bodies to disk.
1295
+ This only applies to users who have not disabled rewindable
1296
+ input. There is also a TeeInput bugfix for uncommon usage
1297
+ patterns and Configurator examples in the FAQ should be fixed
1298
+
1299
+ === unicorn 3.0.1 - one bugfix for Rainbows! / 2010-12-03 00:34 UTC
1300
+
1301
+ ...and only Rainbows! This release fixes HTTP pipelining for
1302
+ requests with bodies for users of synchronous Rainbows!
1303
+ concurrency models.
1304
+
1305
+ Since Unicorn itself does not support keepalive nor pipelining,
1306
+ Unicorn-only users need not upgrade.
1307
+
1308
+ === unicorn 3.0.0 - disable rewindable input! / 2010-11-20 02:41 UTC
1309
+
1310
+ Rewindable "rack.input" may be disabled via the
1311
+ "rewindable_input false" directive in the configuration file.
1312
+ This will violate Rack::Lint for Rack 1.x applications, but can
1313
+ reduce I/O for applications that do not need a rewindable
1314
+ input.
1315
+
1316
+ This release updates us to the Kgio 2.x series which should play
1317
+ more nicely with other libraries and applications. There are
1318
+ also internal cleanups and improvements for future versions of
1319
+ Rainbows!
1320
+
1321
+ The Unicorn 3.x series supercedes the 2.x series
1322
+ while the 1.x series will remain supported indefinitely.
1323
+
1324
+ === unicorn 3.0.0pre2 - less bad than 2.x or 3.0.0pre1! / 2010-11-19 00:07 UTC
1325
+
1326
+ This release updates us to the Kgio 2.x series which should play
1327
+ more nicely with other applications. There are also bugfixes
1328
+ from the 2.0.1 release and a small bugfix to the new StreamInput
1329
+ class.
1330
+
1331
+ The Unicorn 3.x series will supercede the 2.x series
1332
+ while the 1.x series will remain supported indefinitely.
1333
+
1334
+ === unicorn 2.0.1 - fix errors in error handling / 2010-11-17 23:48 UTC
1335
+
1336
+ This release fixes errors in our own error handling,
1337
+ causing certain errors to not be logged nor responded
1338
+ to correctly.
1339
+
1340
+ Eric Wong (3):
1341
+ t0012: fix race condition in reload
1342
+ http_server: fix HttpParserError constant resolution
1343
+ tests: add parser error test from Rainbows!
1344
+
1345
+ === unicorn 3.0.0pre1 / 2010-11-17 00:04 UTC
1346
+
1347
+ Rewindable "rack.input" may be disabled via the
1348
+ "rewindable_input false" directive in the configuration file.
1349
+ This will violate Rack::Lint for Rack 1.x applications, but
1350
+ can reduce I/O for applications that do not need it.
1351
+
1352
+ There are also internal cleanups and enhancements for future
1353
+ versions of Rainbows!
1354
+
1355
+ Eric Wong (11):
1356
+ t0012: fix race condition in reload
1357
+ enable HTTP keepalive support for all methods
1358
+ http_parser: add HttpParser#next? method
1359
+ tee_input: switch to simpler API for parsing trailers
1360
+ switch versions to 3.0.0pre
1361
+ add stream_input class and build tee_input on it
1362
+ configurator: enable "rewindable_input" directive
1363
+ http_parser: ensure keepalive is disabled when reset
1364
+ *_input: make life easier for subclasses/modules
1365
+ tee_input: restore read position after #size
1366
+ preread_input: no-op for non-rewindable "rack.input"
1367
+
1368
+ === unicorn 2.0.0 - mostly internal cleanups / 2010-10-27 23:44 UTC
1369
+
1370
+ Despite the version number, this release mostly features
1371
+ internal cleanups for future versions of Rainbows!. User
1372
+ visible changes include reductions in CPU wakeups on idle sites
1373
+ using high timeouts.
1374
+
1375
+ Barring possible portability issues due to the introduction of
1376
+ the kgio library, this release should be ready for all to use.
1377
+ However, 1.1.x (and possibly 1.0.x) will continue to be
1378
+ maintained. Unicorn 1.1.5 and 1.0.2 have also been released
1379
+ with bugfixes found during development of 2.0.0.
1380
+
1381
+ === unicorn 1.1.5 / 2010-10-27 23:30 UTC
1382
+
1383
+ This maintenance release fixes several long-standing but
1384
+ recently-noticed bugs. SIGHUP reloading now correctly restores
1385
+ default values if they're erased or commented-out in the Unicorn
1386
+ configuration file. Delays/slowdowns in signal handling since
1387
+ 0.990 are fixed, too.
1388
+
1389
+ === unicorn 1.0.2 / 2010-10-27 23:12 UTC
1390
+
1391
+ This is the latest maintenance release of the 1.0.x series.
1392
+ All users are encouraged to upgrade to 1.1.x stable series
1393
+ and report bugs there.
1394
+
1395
+ Shortlog of changes since 1.0.1:
1396
+
1397
+ Eric Wong (8):
1398
+ SIGTTIN works after SIGWINCH
1399
+ fix delays in signal handling
1400
+ Rakefile: don't post freshmeat on empty changelogs
1401
+ Rakefile: capture prerelease tags
1402
+ configurator: use "__send__" instead of "send"
1403
+ configurator: reloading with unset values restores default
1404
+ gemspec: depend on Isolate 3.0.0 for dev
1405
+ doc: stop using deprecated rdoc CLI options
1406
+
1407
+ === unicorn 2.0.0pre3 - more small fixes / 2010-10-09 00:06 UTC
1408
+
1409
+ There is a new Unicorn::PrereadInput middleware to which allows
1410
+ input bodies to be drained off the socket and buffered to disk
1411
+ (or memory) before dispatching the application.
1412
+
1413
+ HTTP Pipelining behavior is fixed for Rainbows! There
1414
+ are some small Kgio fixes and updates for Rainbows!
1415
+ users as well.
1416
+
1417
+ === unicorn 2.0.0pre2 - releases are cheap / 2010-10-07 07:23 UTC
1418
+
1419
+ Internal changes/cleanups for Rainbows!
1420
+
1421
+ === unicorn 2.0.0pre1 - a boring "major" release / 2010-10-06 01:17 UTC
1422
+
1423
+ Mostly internal cleanups for future versions of Rainbows! and
1424
+ people trying out Rubinius. There are tiny performance
1425
+ improvements for Ruby 1.9.2 users which may only be noticeable
1426
+ with Rainbows!.
1427
+
1428
+ There is a new dependency on the "kgio" library for kinder,
1429
+ gentler I/O :) Please report any bugs and portability issues
1430
+ with kgio to the Unicorn mailing list[1].
1431
+
1432
+ Unicorn 1.1.x users are NOT required nor even encouraged to
1433
+ upgrade yet. Unicorn 1.1.x will be maintained for the
1434
+ forseeable future.
1435
+
1436
+ [1] - mongrel-unicorn@rubyforge.org
1437
+
1438
+ === unicorn 1.1.4 - small bug fix and doc updates / 2010-10-04 20:32 UTC
1439
+
1440
+ We no longer unlinking actively listening sockets upon startup
1441
+ (but continue to unlink dead ones). This bug could trigger
1442
+ downtime and nginx failures if a user makes an error and
1443
+ attempts to start Unicorn while it is already running.
1444
+
1445
+ Thanks to Jordan Ritter for the detailed bug report leading to
1446
+ this fix.
1447
+
1448
+ ref: http://mid.gmane.org/8D95A44B-A098-43BE-B532-7D74BD957F31@darkridge.com
1449
+
1450
+ There are also minor documentation and test updates pulled in
1451
+ from master. This is hopefully the last bugfix release of the
1452
+ 1.1.x series.
1453
+
1454
+ === unicorn 1.1.3 - small bug fixes / 2010-08-28 19:27 UTC
1455
+
1456
+ This release fixes race conditions during SIGUSR1 log cycling.
1457
+ This bug mainly affects Rainbows! users serving static files,
1458
+ but some Rack apps use threads internally even under Unicorn.
1459
+
1460
+ Other small fixes:
1461
+ * SIGTTIN works as documented after SIGWINCH
1462
+ * --help output from `unicorn` and `unicorn_rails` is more consistent
1463
+
1464
+ === unicorn 1.1.2 - fixing upgrade rollbacks / 2010-07-13 20:04 UTC
1465
+
1466
+ This release is fixes a long-standing bug where the original PID
1467
+ file is not restored when rolling back from a USR2 upgrade.
1468
+ Presumably most upgrades aren't rolled back, so it took over a
1469
+ year to notice this issue. Thanks to Lawrence Pit for
1470
+ discovering and reporting this issue.
1471
+
1472
+ === unicorn 1.0.1 - bugfixes only / 2010-07-13 20:01 UTC
1473
+
1474
+ The first maintenance release of 1.0.x, this release is
1475
+ primarily to fix a long-standing bug where the original PID file
1476
+ is not restored when rolling back from a USR2 upgrade.
1477
+ Presumably most upgrades aren't rolled back, so it took over a
1478
+ year to notice this issue. Thanks to Lawrence Pit for
1479
+ discovering and reporting this issue.
1480
+
1481
+ There is also a pedantic TeeInput bugfix which shouldn't affect
1482
+ real apps from the 1.1.x series and a test case fix for OSX,
1483
+ too.
1484
+
1485
+ === unicorn 1.1.1 - fixing cleanups gone bad :x / 2010-07-11 02:13 UTC
1486
+
1487
+ Unicorn::TeeInput constant resolution for Unicorn::ClientError
1488
+ got broken simplifying code for RDoc. This affects users
1489
+ of Rainbows! and Zbatery.
1490
+
1491
+ === unicorn 1.1.0 - small changes and cleanups / 2010-07-08 07:57 UTC
1492
+
1493
+ This is a small, incremental feature release with some internal
1494
+ changes to better support upcoming versions of the Rainbows! and
1495
+ Zbatery web servers. There is no need to upgrade if you're
1496
+ happy with 1.0.0, but also little danger in upgrading.
1497
+
1498
+ There is one pedantic bugfix which shouldn't affect anyone
1499
+ and small documentation updates as well.
1500
+
1501
+ === unicorn 1.0.0 - yes, this is a real project / 2010-06-17 09:18 UTC
1502
+
1503
+ There are only minor changes since 0.991.0.
1504
+
1505
+ For users clinging onto the past, MRI 1.8.6 support has been
1506
+ restored. Users are strongly encouraged to upgrade to the
1507
+ latest 1.8.7, REE or 1.9.1.
1508
+
1509
+ For users looking towards the future, the core test suite and
1510
+ the Rails 3 (beta) integration tests pass entirely under 1.9.2
1511
+ preview3. As of the latest rubinius.git[1], Rubinius support is
1512
+ nearly complete as well.
1513
+
1514
+ Under Rubinius, signals may corrupt responses as they're being
1515
+ written to the socket, but that should be fixable transparently
1516
+ to us[4]. Support for the hardly used, hardly documented[2]
1517
+ embedded command-line switches in rackup config (.ru) files is
1518
+ is also broken under Rubinius.
1519
+
1520
+ The recently-released Rack 1.2.1 introduced no compatiblity
1521
+ issues[3] in core Unicorn. We remain compatible with all Rack
1522
+ releases starting with 0.9.1 (and possibly before).
1523
+
1524
+ [1] tested with Rubinius upstream commit
1525
+ cf4a5a759234faa3f7d8a92d68fa89d8c5048f72
1526
+ [2] lets avoid the Dueling Banjos effect here :x
1527
+ [3] actually, Rack 1.2.1 is broken under 1.8.6.
1528
+ [4] http://github.com/evanphx/rubinius/issues/373
1529
+
1530
+ === unicorn 0.991.0 - startup improvements / 2010-06-11 02:18 UTC
1531
+
1532
+ The "working_directory" configuration parameter is now handled
1533
+ before config.ru. That means "unicorn" and "unicorn_rails" no
1534
+ longer barfs when initially started outside of the configured
1535
+ "working_directory" where a config.ru is required. A huge
1536
+ thanks to Pierre Baillet for catching this ugly UI inconsistency
1537
+ before the big 1.0 release
1538
+
1539
+ Thanks to Hongli Lai, out-of-the-box Rails 3 (beta) support
1540
+ should be improved for deployments lacking a config.ru
1541
+
1542
+ There are more new integration tests, cleanups and some
1543
+ documentation improvements.
1544
+
1545
+ === unicorn 0.990.0 - inching towards 1.0 / 2010-06-08 09:41 UTC
1546
+
1547
+ Thanks to Augusto Becciu for finding a bug in the HTTP parser
1548
+ that caused a TypeError (and 500) when a rare client set the
1549
+ "Version:" header which conflicts with the HTTP_VERSION header
1550
+ we parse in the first line of the request[1].
1551
+
1552
+ Horizontal tabs are now allowed as leading whitespace in header
1553
+ values as according to RFC 2616 as pointed out by
1554
+ Iñaki Baz Castillo[2].
1555
+
1556
+ Taking a hint from Rack 1.1, the "logger" configuration
1557
+ parameter no longer requires a "close" method. This means some
1558
+ more Logger replacements may be used.
1559
+
1560
+ There's a new, optional, Unicorn (and maybe Passenger)-only
1561
+ middleware, Unicorn::OobGC[2] that runs GC outside of the normal
1562
+ request/response cycle to help out memory-hungry applications.
1563
+ Thanks to Luke Melia for being brave enough to test and report
1564
+ back on my big_app_gc.rb monkey patch[3] which lead up to this.
1565
+
1566
+ Rails 3 (beta) support:
1567
+
1568
+ Using "unicorn" is still recommended as Rails 3 comes with
1569
+ a config.ru, but "unicorn_rails" is cleaned up a bit and
1570
+ *should* work as well as "unicorn" out-of-the-box. Feedback
1571
+ is much appreciated.
1572
+
1573
+ Rubinius updates:
1574
+
1575
+ USR2 binary upgrades are broken due to
1576
+ {TCPServer,UNIXServer}.for_fd[5][6] being broken
1577
+ (differently).
1578
+
1579
+ Repeatedly hitting the server with signals in a tight
1580
+ loop is unusual and not recommended[7].
1581
+
1582
+ There are some workarounds and general code cleanups for other
1583
+ issues[8], as well but things should generally work unless you
1584
+ need USR2 upgrades. Feedback and reports would be greatly
1585
+ appreciated as usual.
1586
+
1587
+ MRI support:
1588
+
1589
+ All tests (except old Rails) run and pass under 1.9.2-preview3.
1590
+ 1.8.7 and 1.9.1 work well as usual and will continue to be
1591
+ supported indefinitely.
1592
+
1593
+ Lets hope this is the last release before 1.0. Please report
1594
+ any issues on the mailing list[9] or email us privately[a].
1595
+ Don't send HTML mail.
1596
+
1597
+ [1] - http://mid.gmane.org/AANLkTimuGgcwNAMcVZdViFWdF-UcW_RGyZAue7phUXps@mail.gmail.com
1598
+ [2] - http://mid.gmane.org/i2xcc1f582e1005070651u294bd83oc73d1e0adf72373a@mail.gmail.com
1599
+ [3] - http://unicorn.bogomips.org/Unicorn/OobGC.html
1600
+ [4] - http://unicorn.bogomips.org/examples/big_app_gc.rb
1601
+ [5] - http://github.com/evanphx/rubinius/issues/354
1602
+ [6] - http://github.com/evanphx/rubinius/issues/355
1603
+ [7] - http://github.com/evanphx/rubinius/issues/356
1604
+ [8] - http://github.com/evanphx/rubinius/issues/347
1605
+ [9] - mailto:mongrel-unicorn@rubyforge.org
1606
+ [a] - mailto:unicorn@bogomips.org
1607
+
1608
+ === unicorn 0.99.0 - simplicity wins / 2010-05-06 19:32 UTC
1609
+
1610
+ Starting with this release, we'll always load Rack up front at
1611
+ startup.
1612
+
1613
+ Previously we had complicated ways to avoid loading Rack until
1614
+ after the application was loaded to allow the application to
1615
+ load an alternate version of Rack. However this has proven too
1616
+ error-prone to be worth supporting even though Unicorn does not
1617
+ have strict requirements on currently released Rack versions.
1618
+
1619
+ If an app requires a different version of Rack than what Unicorn
1620
+ would load by default, it is recommended they only install that
1621
+ version of Rack (and no others) since Unicorn does not have any
1622
+ strict requirements on currently released Rack versions.
1623
+
1624
+ Rails 2.3.x users should be aware of this as those versions are
1625
+ not compatible with Rack 1.1.0.
1626
+
1627
+ If it is not possible to only have one Rack version installed
1628
+ "globally", then they should either use Isolate or Bundler and
1629
+ install a private version of Unicorn along with their preferred
1630
+ version of Rack. Users who install in this way are recommended
1631
+ to execute the isolated/bundled version of Unicorn, instead of
1632
+ what would normally be in $PATH.
1633
+
1634
+ Feedback/tips to mailto:mongrel-unicorn@rubyforge.org from
1635
+ Isolate and Bundler users would be greatly appreciated.
1636
+
1637
+ === unicorn 0.98.0 / 2010-05-05 00:53 UTC
1638
+
1639
+ Deployments that suspend or hibernate servers should no longer
1640
+ have workers killed off (and restarted) upon resuming.
1641
+
1642
+ For Linux users of {raindrops}[http://raindrops.bogomips.org/]
1643
+ (v0.2.0+) configuration is easier as raindrops can now
1644
+ automatically detect the active listeners on the server
1645
+ via the new Unicorn.listener_names singleton method.
1646
+
1647
+ For the pedantic, chunked request bodies without trailers are no
1648
+ longer allowed to omit the final CRLF. This shouldn't affect
1649
+ any real and RFC-compliant clients out there. Chunked requests
1650
+ with trailers have always worked and continue to work the same
1651
+ way.
1652
+
1653
+ The rest are mostly small internal cleanups and documentation
1654
+ fixes. See the commit logs for full details.
1655
+
1656
+ === unicorn 0.97.1 - fix HTTP parser for Rainbows!/Zbatery / 2010-04-19 21:00 UTC
1657
+
1658
+ This release fixes a denial-of-service vector for derived
1659
+ servers exposed directly to untrusted clients.
1660
+
1661
+ This bug does not affect most Unicorn deployments as Unicorn is
1662
+ only supported with trusted clients (such as nginx) on a LAN.
1663
+ nginx is known to reject clients that send invalid
1664
+ Content-Length headers, so any deployments on a trusted LAN
1665
+ and/or behind nginx are safe.
1666
+
1667
+ Servers affected by this bug include (but are not limited to)
1668
+ Rainbows! and Zbatery. This bug does not affect Thin nor
1669
+ Mongrel, as neither got the request body filtering treatment
1670
+ that the Unicorn HTTP parser got in August 2009.
1671
+
1672
+ The bug fixed in this release could result in a
1673
+ denial-of-service as it would trigger a process-wide assertion
1674
+ instead of raising an exception. For servers such as
1675
+ Rainbows!/Zbatery that serve multiple clients per worker
1676
+ process, this could abort all clients connected to the
1677
+ particular worker process that hit the assertion.
1678
+
1679
+ === unicorn 0.97.0 - polishing and cleaning up / 2010-03-01 18:26 UTC
1680
+
1681
+ A bunch of small fixes related to startup/configuration and hot
1682
+ reload issues with HUP:
1683
+
1684
+ * Variables in the user-generated config.ru files no longer
1685
+ risk clobbering variables used in laucher scripts.
1686
+
1687
+ * signal handlers are initialized before the pid file is
1688
+ dropped, so over-eager firing of init scripts won't
1689
+ mysteriously nuke a process.
1690
+
1691
+ * SIGHUP will return app to original state if an updated
1692
+ config.ru fails to load due to {Syntax,Load}Error.
1693
+
1694
+ * unicorn_rails should be Rails 3 compatible out-of-the-box
1695
+ ('unicorn' works as always, and is recommended for Rails 3)
1696
+
1697
+ * unicorn_rails is finally "working_directory"-aware when
1698
+ generating default temporary paths and pid file
1699
+
1700
+ * config.ru encoding is the application's default in 1.9,
1701
+ not forced to binary like many parts of Unicorn.
1702
+
1703
+ * configurator learned to handle the "user" directive outside
1704
+ of after_fork hook (which will always remain supported).
1705
+
1706
+ There are also various internal cleanups and possible speedups.
1707
+
1708
+ === unicorn 0.96.1 - fix leak in Rainbows!/Zbatery / 2010-02-13 08:35 UTC
1709
+
1710
+ This maintenance release is intended for users of Rainbows! and
1711
+ Zbatery servers (and anybody else using Unicorn::HttpParser).
1712
+
1713
+ This memory leak DID NOT affect Unicorn itself: Unicorn always
1714
+ allocates the HttpParser once and always reuses it in every
1715
+ sequential request.
1716
+
1717
+ This leak affects applications that repeatedly allocate a new
1718
+ HTTP parser. Thus this bug affects _all_ deployments of
1719
+ Rainbows! and Zbatery. These servers allocate a new parser for
1720
+ every client connection to serve clients concurrently.
1721
+
1722
+ I misread the Data_Make_Struct()/Data_Wrap_Struct()
1723
+ documentation and ended up passing NULL as the "free" argument
1724
+ instead of -1, causing the memory to never be freed.
1725
+
1726
+ From README.EXT in the MRI source which I misread:
1727
+ > The free argument is the function to free the pointer
1728
+ > allocation. If this is -1, the pointer will be just freed.
1729
+ > The functions mark and free will be called from garbage
1730
+ > collector.
1731
+
1732
+ === unicorn 0.96.0 - Rack 1.1 bump / 2010-01-08 05:18 UTC
1733
+
1734
+ This release includes small changes for things allowed by Rack
1735
+ 1.1. It is also now easier to detect if daemonized process
1736
+ fails to start. Manpages received some minor updates as well.
1737
+
1738
+ Rack 1.1 allowed us to make the following environment changes:
1739
+
1740
+ * "rack.logger" is now set to the "logger" specified in
1741
+ the Unicorn config file. This defaults to a Logger
1742
+ instance pointing to $stderr.
1743
+
1744
+ * "rack.version" is now at [1,1]. Unicorn remains
1745
+ compatible with previous Rack versions if your app
1746
+ depends on it.
1747
+
1748
+ While only specified since Rack 1.1, Unicorn has always exposed
1749
+ "rack.input" in binary mode (and has ridiculous integration
1750
+ tests that go outside of Ruby to prove it!).
1751
+
1752
+ === unicorn 0.95.3 / 2009-12-21 21:51 UTC
1753
+
1754
+ The HTTP parser now allows (but does not parse) the userinfo
1755
+ component in the very rare requests that send absoluteURIs.
1756
+ Thanks to Scott Chacon for reporting and submitting a test case
1757
+ for this fix.
1758
+
1759
+ There are also minor documentation updates and tiny cleanups.
1760
+
1761
+ === unicorn 0.95.2 / 2009-12-07 09:52 UTC
1762
+
1763
+ Small fixes to our HTTP parser to allows semicolons in PATH_INFO
1764
+ as allowed by RFC 2396, section 3.3. This is low impact for
1765
+ existing apps as semicolons are rarely seen in URIs. Our HTTP
1766
+ parser runs properly under Rubinius 0.13.0 and 1.0.0-rc1 again
1767
+ (though not yet the rest of the server since we rely heavily on
1768
+ signals).
1769
+
1770
+ Another round of small documentation tweaks and minor cleanups.
1771
+
1772
+ === unicorn 0.95.1 / 2009-11-21 21:13 UTC
1773
+
1774
+ Configuration files paths given on the command-line are no
1775
+ longer expanded. This should make configuration reloads
1776
+ possible when a non-absolute path is specified for --config-file
1777
+ and Unicorn was deployed to a symlink directories (as with
1778
+ Capistrano). Since deployments have always been strongly
1779
+ encouraged to use absolute paths in the config file, this
1780
+ change does not affect them.
1781
+
1782
+ This is our first gem release using gemcutter.
1783
+
1784
+ Eric Wong (3):
1785
+ SIGNALS: HUP + preload_app cannot reload app code
1786
+ Do not expand paths given on the shell
1787
+ GNUmakefile: prep release process for gemcutter
1788
+
1789
+ === unicorn 0.95.0 / 2009-11-15 22:21 UTC
1790
+
1791
+ Mostly internal cleanups and documentation updates. Irrelevant
1792
+ stacktraces from client disconnects/errors while reading
1793
+ "rack.input" are now cleared to avoid unnecessary noise. If
1794
+ user switching in workers is used, ownership of logs is now
1795
+ preserved when reopening worker logs (send USR1 only to the the
1796
+ master in this case). The timeout config no longer affects long
1797
+ after_fork hooks or application startups.
1798
+
1799
+ New features include the addition of the :umask option for the
1800
+ "listen" config directive and error reporting for non-portable
1801
+ socket options.
1802
+
1803
+ No ponies have ever been harmed in our development.
1804
+
1805
+ Eric Wong (28):
1806
+ unicorn.1: document RACK_ENV changes in 0.94.0
1807
+ HACKING: update with "gmake" in examples
1808
+ don't nuke children for long after_fork and app loads
1809
+ local.mk.sample: steal some updates from Rainbows!
1810
+ Load Unicorn constants when building app
1811
+ tee_input: fix RDoc argument definition for tee
1812
+ Add FAQ
1813
+ FAQ: fix links to Configurator docs
1814
+ tee_input: better premature disconnect handling
1815
+ tee_input: don't shadow struct members
1816
+ raise Unicorn::ClientShutdown if client aborts in TeeInput
1817
+ tee_input: fix comment from an intermediate commit
1818
+ FAQ: additional notes on getting HTTPS redirects right
1819
+ configurator: update RDoc and comments in examples
1820
+ bump version to 0.95.0pre
1821
+ configurator: listen :umask parameter for UNIX sockets
1822
+ preserve user/group ownership when reopening logs
1823
+ old_rails/static: avoid freezing strings
1824
+ old_rails: autoload Static
1825
+ const: no need to freeze HTTP_EXPECT
1826
+ test_server: ensure stderr is written to before reading
1827
+ tee_input: expand client error handling
1828
+ replace "rescue => e" with "rescue Object => e"
1829
+ socket_helper: do not hide errors when setting socket options
1830
+ socket_helper: RDoc for constants
1831
+ ClientShutdown: RDoc
1832
+ Rakefile: add raa_update task
1833
+ tee_input: client_error always raises
1834
+
1835
+ === unicorn 0.94.0 / 2009-11-05 09:52 UTC
1836
+
1837
+ The HTTP parser is fix for oddly-aligned reads of trailers (this
1838
+ technically affects headers, too, but is highly unlikely due to
1839
+ our non-support of slow clients). This allows our HTTP parser
1840
+ to better support very slow clients when used by other servers
1841
+ (like Rainbows!). Fortunately this bug does not appear to lead
1842
+ to any invalid memory accesses (and potential arbitrary code
1843
+ execution).
1844
+
1845
+ FreeBSD (and possibly other *BSDs) support is improved and and
1846
+ all the test cases pass under FreeBSD 7.2. Various flavors of
1847
+ GNU/Linux remains our primary platform for development and
1848
+ production.
1849
+
1850
+ New features added include the "working_directory" directive in
1851
+ the configurator . Even without specifying a
1852
+ "working_directory", symlink-aware detection of the current path
1853
+ no longer depends on /bin/sh so it should work out-of-the-box on
1854
+ FreeBSD and Solaris and not just systems where /bin/sh is dash,
1855
+ ksh93 or bash.
1856
+
1857
+ User-switching support is finally supported but only intended
1858
+ for use in the after_fork hook of worker processes. Putting it
1859
+ in the after_fork hook allows allows users to set things like
1860
+ CPU affinity[1] on a per-worker basis before dropping
1861
+ privileges. The master process retains all privileges it
1862
+ started with.
1863
+
1864
+ The ENV["RACK_ENV"] (process-wide) environment variable is now
1865
+ both read and set for `unicorn' in the same way RAILS_ENV is
1866
+ used by `unicorn_rails'. This allows the Merb launcher to read
1867
+ ENV["RACK_ENV"] in config.ru. Other web servers already set
1868
+ this and there may be applications or libraries that already
1869
+ rely on this de facto standard.
1870
+
1871
+ Eric Wong (26):
1872
+ cleanup: avoid redundant error checks for fstat
1873
+ test_helper: connect(2) may fail with EINVAL
1874
+ GNUmakefile: fix non-portable tar(1) usage
1875
+ tests: provide a pure Ruby setsid(8) equivalent
1876
+ more portable symlink awareness for START_CTX[:cwd]
1877
+ test_signals: avoid portability issues with fchmod(2)
1878
+ cleanup error handling and make it less noisy
1879
+ Do not override Dir.chdir in config files
1880
+ configurator: add "working_directory" directive
1881
+ configurator: working_directory is expanded
1882
+ configurator: set ENV["PWD"] with working_directory, too
1883
+ configurator: working_directory affects pid, std{err,out}_paths
1884
+ configurator: update documentation for working_directory
1885
+ TODO: remove working_directory bit, done
1886
+ Util.reopen_logs: remove needless Range
1887
+ worker: user/group switching for after_fork hooks
1888
+ Fix autoload of Etc in Worker for Ruby 1.9
1889
+ bin/unicorn: allow RACK_ENV to be passed from parent
1890
+ tests for RACK_ENV preservation
1891
+ http: allow headers/trailers to be written byte-wise
1892
+ http: extra test for bytewise chunked bodies
1893
+ tee_input: do not clobber trailer buffer on partial uploads
1894
+ test_exec: ensure master is killed after test
1895
+ Util::tmpio returns a TmpIO that responds to #size
1896
+ TODO: remove user-switching bit, done
1897
+ unicorn 0.94.0
1898
+
1899
+ Wayne Larsen (1):
1900
+ bin/unicorn: set ENV["RACK_ENV"] on startup
1901
+
1902
+ [1] - Unicorn does not support CPU affinity directly, but it is
1903
+ possible to load code that allows it inside after_fork hooks,
1904
+ or even just call sched_tool(8).
1905
+
1906
+ === unicorn 0.93.5 / 2009-10-29 21:41 UTC
1907
+
1908
+ This release fixes a regression introduced in 0.93.3 where
1909
+ timed-out worker processes run a chance of not being killed off
1910
+ at all if they're hung. While it's not ever advisable to have
1911
+ requests take a long time, we realize it's easy to fix
1912
+ everything :)
1913
+
1914
+ Eric Wong (3):
1915
+ TODO: remove --kill
1916
+ fix reliability of timeout kills
1917
+ TODO: update for next version (possibly 1.0-pre)
1918
+
1919
+ === unicorn 0.93.4 / 2009-10-27 07:57 UTC
1920
+
1921
+ This release mainly works around BSD stdio compatibility issues
1922
+ that affect at least FreeBSD and OS X. While this issues was
1923
+ documented and fixed in [ruby-core:26300][1], no production
1924
+ release of MRI 1.8 has it, and users typically upgrade MRI more
1925
+ slowly than gems. This issue does NOT affect 1.9 users. Thanks
1926
+ to Vadim Spivak for reporting and testing this issue and Andrey
1927
+ Stikheev for the fix.
1928
+
1929
+ Additionally there are small documentation bits, one error
1930
+ handling improvement, and one minor change that should improve
1931
+ reliability of signal delivery.
1932
+
1933
+ Andrey Stikheev (1):
1934
+ workaround FreeBSD/OSX IO bug for large uploads
1935
+
1936
+ Eric Wong (7):
1937
+ DESIGN: address concerns about on-demand and thundering herd
1938
+ README: alter reply conventions for the mailing list
1939
+ configurator: stop testing for non-portable listens
1940
+ KNOWN_ISSUES: document Rack gem issue w/Rails 2.3.2
1941
+ stop continually resends signals during shutdowns
1942
+ add news bodies to site NEWS.atom.xml
1943
+ configurator: fix broken example in RDoc
1944
+
1945
+ Suraj N. Kurapati (1):
1946
+ show configuration file path in errors instead of '(eval)'
1947
+
1948
+ [1] http://redmine.ruby-lang.org/issues/show/2267
1949
+
1950
+ === unicorn 0.93.3 / 2009-10-09 22:50 UTC
1951
+
1952
+ This release fixes compatibility with OpenBSD (and possibly
1953
+ other Unices with stricter fchmod(2) implementations) thanks to
1954
+ Jeremy Evans. Additionally there are small documentation
1955
+ changes all around.
1956
+
1957
+ Eric Wong (12):
1958
+ doc: expand on the SELF_PIPE description
1959
+ fchmod heartbeat flips between 0/1 for compatibility
1960
+ examples/init.sh: remove "set -u"
1961
+ configurator: update with nginx fail_timeout=0 example
1962
+ PHILOSOPHY: clarify experience other deployments
1963
+ PHILOSOPHY: plug the Rainbows! spin-off project
1964
+ README: remove unnecessary and extraneous dash
1965
+ DESIGN: clarification and possibly improve HTML validity
1966
+ README: remove the "non-existent" part
1967
+ README: emphasize the "fast clients"-only part
1968
+ drop the whitespace cleaner for Ragel->C
1969
+ unicorn 0.93.3
1970
+
1971
+ === unicorn 0.93.2 / 2009-10-07 08:45 UTC
1972
+
1973
+ Avoid truncated POST bodies from with URL-encoded forms in Rails
1974
+ by switching TeeInput to use read-in-full semantics (only) when
1975
+ a Content-Length: header exists. Chunked request bodies
1976
+ continue to exhibit readpartial semantics to support
1977
+ simultaneous bidirectional chunking.
1978
+
1979
+ The lack of return value checking in Rails to protect against a
1980
+ short ios.read(length) is entirely reasonable even if not
1981
+ pedantically correct. Most ios.read(length) implementations
1982
+ return the full amount requested except right before EOF.
1983
+
1984
+ Also there are some minor documentation improvements.
1985
+
1986
+ Eric Wong (8):
1987
+ Fix NEWS generation on single-paragraph tag messages
1988
+ Include GPLv2 in docs
1989
+ doc: make it clear contributors retain copyrights
1990
+ TODO: removed Rainbows! (see rainbows.rubyforge.org)
1991
+ Document the START_CTX hash contents
1992
+ more-compatible TeeInput#read for POSTs with Content-Length
1993
+ tests for read-in-full vs readpartial semantics
1994
+ unicorn 0.93.2
1995
+
1996
+ === unicorn 0.93.1 / 2009-10-03 01:17 UTC
1997
+
1998
+ Fix permissions for release tarballs/gems, no other changes.
1999
+ Thanks to Jay Reitz for reporting this.
2000
+
2001
+ === unicorn 0.93.0 / 2009-10-02 21:04 UTC
2002
+
2003
+ The one minor bugfix is only for Rails 2.3.x+ users who set the
2004
+ RAILS_RELATIVE_URL_ROOT environment variable in a config file.
2005
+ Users of the "--path" switch or those who set the environment
2006
+ variable in the shell were unaffected by this bug. Note that we
2007
+ still don't have relative URL root support for Rails < 2.3, and
2008
+ are unlikely to bother with it unless there is visible demand
2009
+ for it.
2010
+
2011
+ New features includes support for :tries and :delay when
2012
+ specifying a "listen" in an after_fork hook. This was inspired
2013
+ by Chris Wanstrath's example of binding per-worker listen
2014
+ sockets in a loop while migrating (or upgrading) Unicorn.
2015
+ Setting a negative value for :tries means we'll retry the listen
2016
+ indefinitely until the socket becomes available.
2017
+
2018
+ So you can do something like this in an after_fork hook:
2019
+
2020
+ after_fork do |server, worker|
2021
+ addr = "127.0.0.1:#{9293 + worker.nr}"
2022
+ server.listen(addr, :tries => -1, :delay => 5)
2023
+ end
2024
+
2025
+ There's also the usual round of added documentation, packaging
2026
+ fixes, code cleanups, small fixes and minor performance
2027
+ improvements that are viewable in the "git log" output.
2028
+
2029
+ Eric Wong (55):
2030
+ build: hardcode the canonical git URL
2031
+ build: manifest dropped manpages
2032
+ build: smaller ChangeLog
2033
+ doc/LATEST: remove trailing newline
2034
+ http: don't force -fPIC if it can't be used
2035
+ .gitignore on *.rbc files Rubinius generates
2036
+ README/gemspec: a better description, hopefully
2037
+ GNUmakefile: add missing .manifest dep on test installs
2038
+ Add HACKING document
2039
+ configurator: fix user switch example in RDoc
2040
+ local.mk.sample: time and perms enforcement
2041
+ unicorn_rails: show "RAILS_ENV" in help message
2042
+ gemspec: compatibility with older Rubygems
2043
+ Split out KNOWN_ISSUES document
2044
+ KNOWN_ISSUES: add notes about the "isolate" gem
2045
+ gemspec: fix test_files regexp match
2046
+ gemspec: remove tests that fork from test_files
2047
+ test_signals: ensure we can parse pids in response
2048
+ GNUmakefile: cleanup test/manifest generation
2049
+ util: remove APPEND_FLAGS constant
2050
+ http_request: simplify and remove handle_body method
2051
+ http_response: simplify and remove const dependencies
2052
+ local.mk.sample: fix .js times
2053
+ TUNING: notes about benchmarking a high :backlog
2054
+ HttpServer#listen accepts :tries and :delay parameters
2055
+ "make install" avoids installing multiple .so objects
2056
+ Use Configurator#expand_addr in HttpServer#listen
2057
+ configurator: move initialization stuff to #initialize
2058
+ Remove "Z" constant for binary strings
2059
+ cgi_wrapper: don't warn about stdoutput usage
2060
+ cgi_wrapper: simplify status handling in response
2061
+ cgi_wrapper: use Array#concat instead of +=
2062
+ server: correctly unset reexec_pid on child death
2063
+ configurator: update and modernize examples
2064
+ configurator: add colons in front of listen() options
2065
+ configurator: remove DEFAULT_LOGGER constant
2066
+ gemspec: clarify commented-out licenses section
2067
+ Add makefile targets for non-release installs
2068
+ cleanup: use question mark op for 1-byte comparisons
2069
+ RDoc for Unicorn::HttpServer::Worker
2070
+ small cleanup to pid file handling + documentation
2071
+ rails: RAILS_RELATIVE_URL_ROOT may be set in Unicorn config
2072
+ unicorn_rails: undeprecate --path switch
2073
+ manpages: document environment variables
2074
+ README: remove reference to different versions
2075
+ Avoid a small window when a pid file can be empty
2076
+ configurator: update some migration examples
2077
+ configurator: listen :delay must be Numeric
2078
+ test: don't rely on .manifest for test install
2079
+ SIGNALS: state that we stole semantics from nginx
2080
+ const: DEFAULT_PORT as a string doesn't make sense
2081
+ test_helper: unused_port rejects 8080 unconditionally
2082
+ GNUmakefile: SINCE variable may be unset
2083
+ tests: GIT-VERSION-GEN is a test install dependency
2084
+ unicorn 0.93.0
2085
+
2086
+ === unicorn 0.92.0 / 2009-09-18 21:40 UTC
2087
+
2088
+ Small fixes and documentation are the focus of this release.
2089
+
2090
+ James Golick reported and helped me track down a bug that caused
2091
+ SIGHUP to drop the default listener (0.0.0.0:8080) if and only
2092
+ if listeners were completely unspecified in both the
2093
+ command-line and Unicorn config file. The Unicorn config file
2094
+ remains the recommended option for specifying listeners as it
2095
+ allows fine-tuning of the :backlog, :rcvbuf, :sndbuf,
2096
+ :tcp_nopush, and :tcp_nodelay options.
2097
+
2098
+ There are some documentation (and resulting website)
2099
+ improvements. setup.rb users will notice the new section 1
2100
+ manpages for `unicorn` and `unicorn_rails`, Rubygems users
2101
+ will have to install manpages manually or use the website.
2102
+
2103
+ The HTTP parser got a 3rd-party code review which resulted in
2104
+ some cleanups and one insignificant bugfix as a result.
2105
+
2106
+ Additionally, the HTTP parser compiles, runs and passes unit
2107
+ tests under Rubinius. The pure-Ruby parts still do not work yet
2108
+ and we currently lack the resources/interest to pursue this
2109
+ further but help will be gladly accepted.
2110
+
2111
+ The website now has an Atom feed for new release announcements.
2112
+ Those unfamiliar with Atom or HTTP may finger unicorn@bogomips.org
2113
+ for the latest announcements.
2114
+
2115
+ Eric Wong (53):
2116
+ README: update with current version
2117
+ http: cleanup and avoid potential signedness warning
2118
+ http: clarify the setting of the actual header in the hash
2119
+ http: switch to macros for bitflag handling
2120
+ http: refactor keepalive tracking to functions
2121
+ http: use explicit elses for readability
2122
+ http: remove needless goto
2123
+ http: extra assertion when advancing p manually
2124
+ http: verbose assertions
2125
+ http: NIL_P(var) instead of var == Qnil
2126
+ http: rb_gc_mark already ignores immediates
2127
+ http: ignore Host: continuation lines with absolute URIs
2128
+ doc/SIGNALS: fix the no-longer-true bit about socket options
2129
+ "encoding: binary" comments for all sources (1.9)
2130
+ http_response: don't "rescue nil" for body.close
2131
+ CONTRIBUTORS: fix capitalization for why
2132
+ http: support Rubies without the OBJ_FROZEN macro
2133
+ http: define OFFT2NUM macro on Rubies without it
2134
+ http: no-op rb_str_modify() for Rubies without it
2135
+ http: compile with -fPIC
2136
+ http: use rb_str_{update,flush} if available
2137
+ http: create a new string buffer on empty values
2138
+ Update documentation for Rubinius support status
2139
+ http: cleanup assertion for memoized header strings
2140
+ http: add #endif comment labels where appropriate
2141
+ Add .mailmap file for "git shortlog" and other tools
2142
+ Update Manifest with mailmap
2143
+ Fix comment about speculative accept()
2144
+ SIGNALS: use "Unicorn" when referring to the web server
2145
+ Add new Documentation section for manpages
2146
+ test_exec: add extra tests for HUP and preload_app
2147
+ socket_helper: (FreeBSD) don't freeze the accept filter constant
2148
+ Avoid freezing objects that don't benefit from it
2149
+ SIGHUP no longer drops lone, default listener
2150
+ doc: generate ChangeLog and NEWS file for RDoc
2151
+ Remove Echoe and roll our own packaging/release...
2152
+ unicorn_rails: close parentheses in help message
2153
+ launchers: deprecate ambiguous -P/--p* switches
2154
+ man1/unicorn: avoid unnecessary emphasis
2155
+ Add unicorn_rails(1) manpage
2156
+ Documentation: don't force --rsyncable flag with gzip(1)
2157
+ Simplify and standardize manpages build/install
2158
+ GNUmakefile: package .tgz includes all generated files
2159
+ doc: begin integration of HTML manpages into RDoc
2160
+ Update TODO
2161
+ html: add Atom feeds
2162
+ doc: latest news is available through finger
2163
+ NEWS.atom: file timestamp matches latest entry
2164
+ pandoc needs the standalone switch for manpages
2165
+ man1/unicorn: split out RACK ENVIRONMENT section
2166
+ man1/unicorn_rails: fix unescaped underscore
2167
+ NEWS.atom.xml only lists the first 10 entries
2168
+ unicorn 0.92.0
2169
+
2170
+ === unicorn 0.10.3r / 2009-09-09 00:09 UTC
2171
+
2172
+ Removes the Rev monkey patch, rev 0.3.0 is out now so we can
2173
+ just depend on that instead of monkey patching it. Experimental
2174
+ HTTP keepalive/pipelining support has arrived as well.
2175
+
2176
+ Three features from mainline Unicorn are now working again with
2177
+ this branch:
2178
+
2179
+ * Deadlocked workers can be detected by the master and nuked
2180
+ * multiple (TCP) listeners per process
2181
+ * graceful shutdown
2182
+
2183
+ This (pre-)release does NOT feature HTTP/0.9 support that
2184
+ Unicorn 0.91.0 had, expect that when this branch is ready for
2185
+ merging with mainline.
2186
+
2187
+ === unicorn 0.91.0 / 2009-09-04 19:04 UTC
2188
+
2189
+ HTTP/0.9 support, multiline header support, small fixes
2190
+
2191
+ 18 years too late, Unicorn finally gets HTTP/0.9 support
2192
+ as HTTP was implemented in 1991.
2193
+
2194
+ Eric Wong (16):
2195
+ Documentation updates
2196
+ examples/echo: "Expect:" value is case-insensitive
2197
+ http: make strings independent before modification
2198
+ http: support for multi-line HTTP headers
2199
+ tee_input: fix rdoc
2200
+ unicorn_http: "fix" const warning
2201
+ http: extension-methods allow any tokens
2202
+ http: support for simple HTTP/0.9 GET requests
2203
+ test_http_parser_ng: fix failing HTTP/0.9 test case
2204
+ launcher: defer daemonized redirects until config is read
2205
+ test to ensure stderr goes *somewhere* when daemonized
2206
+ http: SERVER_PROTOCOL matches HTTP_VERSION
2207
+ http: add HttpParser#headers? method
2208
+ Support HTTP/0.9 entity-body-only responses
2209
+ Redirect files in binary mode
2210
+ unicorn 0.91.0
2211
+
2212
+ === unicorn v0.10.2r --rainbows / 2009-08-18 22:28 UTC
2213
+
2214
+ Two botched releases in one day, hopefully this is the last...
2215
+
2216
+ Eric Wong (3):
2217
+ rainbows: monkey-patch Rev::TCPListener for now
2218
+ rainbows: make the embedded SHA1 app Rack::Lint-safe
2219
+ unicorn 0.10.2r
2220
+
2221
+ === unicorn 0.10.1r --rainbows / 2009-08-18 22:01 UTC
2222
+
2223
+ Ruby 1.9 only, again
2224
+
2225
+ Eric Wong (2):
2226
+ Actually hook up Rainbows to the rest of the beast
2227
+ unicorn 0.10.1r
2228
+
2229
+ === unicorn 0.10.0r -- rainbows! / 2009-08-18 21:41 UTC
2230
+
2231
+ This "release" is for Ruby 1.9 only
2232
+
2233
+ === unicorn 0.90.0 / 2009-08-17 00:24 UTC
2234
+
2235
+ switch chunking+trailer handling to Ragel, v0.8.4 fixes
2236
+
2237
+ Moved chunked decoding and trailer parsing over to C/Ragel.
2238
+ Minor bug fixes, internal code cleanups, and API changes.
2239
+
2240
+ Eric Wong (55):
2241
+ README: update version numbers for website
2242
+ Update Rails tests to run on Rails 2.3.3.1
2243
+ README: latest stable version is 0.8.4
2244
+ unicorn_http: small cleanups and size reduction
2245
+ Remove Ragel-generated file from version control
2246
+ unicorn_http: remove typedef from http_parser
2247
+ unicorn_http: update copyright
2248
+ unicorn_http: change "global_" prefix to "g_"
2249
+ unicorn_http: add helpful macros
2250
+ extconf: SIZEOF_OFF_T should be a ruby.h macro
2251
+ Refactoring unicorn_http C/Ragel code
2252
+ http: find_common_field_value => find_common_field
2253
+ http: split uncommon_field into a separate function
2254
+ http: remove some redundant functions
2255
+ http: "hp" denotes http_parser structs for consistency
2256
+ http: small cleanup in "https" detection
2257
+ http: minor cleanup of http_field handling
2258
+ http: split out server params handling
2259
+ http: move global initialization code
2260
+ http: cleanup setting for common values => globals
2261
+ http: remove noise functions
2262
+ http: move non-Ruby-specific macros c_util.h
2263
+ http: prepare http_parser struct for body processing
2264
+ http: generic C string vs VALUEs comparison function
2265
+ http: process Content-Length and Transfer-Encoding
2266
+ http: preliminary chunk decoding
2267
+ test_upload: extra CRLF is needed
2268
+ Switch to Ragel/C-based chunk/trailer parser
2269
+ http: unit tests for overflow and bad lengths
2270
+ http: add test for invalid trailer
2271
+ http: join repeated headers with a comma
2272
+ test_util: explicitly close tempfiles for GC-safety
2273
+ test_exec: wait for worker readiness
2274
+ Documentation updates
2275
+ test_signals: unlink log files of KILL-ed process
2276
+ http: rename read_body to filter_body
2277
+ http: add CONST_MEM_EQ macro
2278
+ http: add "HttpParser#keepalive?" method
2279
+ http: freeze fields when creating them, always
2280
+ README: everybody loves Ruby DSLs
2281
+ http_request: reinstate empty StringIO optimization
2282
+ tee_input: make interface more usable outside of Unicorn
2283
+ Drop the micro benchmarks
2284
+ http: fix warning when sizeof(off_t) == sizeof(long long)
2285
+ GNUmakefile: Fix "install" target
2286
+ Fix documentation for Util.reopen_logs
2287
+ http_response: pass through unknown status codes
2288
+ const: remove unused constants
2289
+ update TODO
2290
+ http: support for "Connection: keep-alive"
2291
+ TODO: remove keep-alive/pipelining
2292
+ Make launchers __END__-aware
2293
+ Remove explicit requires for Rack things
2294
+ app/inetd: explicitly close pipe descriptors on CatBody#close
2295
+ unicorn 0.90.0
2296
+
2297
+ === unicorn 0.8.4 / 2009-08-06 22:48 UTC
2298
+
2299
+ pass through unknown HTTP status codes
2300
+
2301
+ This release allows graceful degradation in case a user is using a
2302
+ status code not defined by Rack::Utils::HTTP_STATUS_CODES. A patch has
2303
+ been submitted[1] upstream to Rack but this issue may still affect users
2304
+ of yet-to-be-standardized status codes.
2305
+
2306
+ Eric Wong (2):
2307
+ http_response: pass through unknown status codes
2308
+ unicorn 0.8.4
2309
+
2310
+ [1] - http://rack.lighthouseapp.com/projects/22435-rack/tickets/70
2311
+
2312
+ === unicorn 0.9.2 / 2009-07-20 01:29 UTC
2313
+
2314
+ Ruby 1.9.2 preview1 compatibility
2315
+
2316
+ This release mainly fixes compatibility issues the Ruby 1.9.2 preview1
2317
+ release (and one existing 1.9.x issue). Note that Rails 2.3.2.1 does
2318
+ NOT appear to work with Ruby 1.9.2 preview1, but that is outside the
2319
+ scope of this project.
2320
+
2321
+ The 0.9.x series (including this release) is only recommended for
2322
+ development/experimental use. This series is NOT recommended for
2323
+ production use, use 0.8.x instead.
2324
+
2325
+ Eric Wong (10):
2326
+ README: add Gmane newsgroup info
2327
+ README: update about development/stable versions
2328
+ Rename unicorn/http11 => unicorn_http
2329
+ move all #gets logic to tee_input out of chunked_reader
2330
+ http_request: don't support apps that close env["rack.input"]
2331
+ HttpRequest: no need for a temporary variable
2332
+ Remove core Tempfile dependency (1.9.2-preview1 compat)
2333
+ fix tests to run correctly under 1.9.2preview1
2334
+ app/exec_cgi: fix 1.9 compatibility
2335
+ unicorn 0.9.2
2336
+
2337
+ === unicorn 0.8.3 / 2009-07-20 01:26 UTC
2338
+
2339
+ Ruby 1.9.2 preview1 compatibility
2340
+
2341
+ This release fixes compatibility issues the Ruby 1.9.2 preview1
2342
+ release (and one existing 1.9.x issue). Note that Rails 2.3.2.1
2343
+ does NOT appear to work with Ruby 1.9.2 preview1, but that
2344
+ is outside the scope of this project.
2345
+
2346
+ Eric Wong (4):
2347
+ Remove core Tempfile dependency (1.9.2-preview1 compat)
2348
+ fix tests to run correctly under 1.9.2preview1
2349
+ app/exec_cgi: fix 1.9 compatibility
2350
+ unicorn 0.8.3
2351
+
2352
+ === unicorn 0.8.2 / 2009-07-09 08:59 UTC
2353
+
2354
+ socket handling bugfixes and usability tweaks
2355
+
2356
+ Socket handling bugfixes and socket-related usability and
2357
+ performance tweaks. We no longer trust FD_CLOEXEC to be
2358
+ inherited across accept(); thanks to Paul Sponagl for diagnosing
2359
+ this issue on OSX. There are also minor tweaks backported from
2360
+ 0.9.0 to make non-graceful restarts/upgrades go more smoothly.
2361
+
2362
+ Eric Wong (6):
2363
+ Unbind listeners as before stopping workers
2364
+ Retry listen() on EADDRINUSE 5 times every 500ms
2365
+ Re-add support for non-portable socket options
2366
+ Minor cleanups to core
2367
+ always set FD_CLOEXEC on sockets post-accept()
2368
+ unicorn 0.8.2
2369
+
2370
+ === unicorn 0.9.1 / 2009-07-09 08:49 UTC
2371
+
2372
+ FD_CLOEXEC portability fix (v0.8.2 port)
2373
+
2374
+ Minor cleanups, set FD_CLOEXEC on accepted listen sockets
2375
+ instead of relying on the flag to be inherited across accept.
2376
+
2377
+ The 0.9.x series (including this release) is NOT recommended for
2378
+ production use, try 0.8.x instead.
2379
+
2380
+ Eric Wong (10):
2381
+ Avoid temporary array creation
2382
+ Favor Struct members to instance variables
2383
+ Minor cleanups to core
2384
+ Unbind listeners as before stopping workers
2385
+ Retry listen() on EADDRINUSE 5 times ever 500ms
2386
+ Re-add support for non-portable socket options
2387
+ Minor cleanups to core (cherry picked from commit ec70433f84664af0dff1336845ddd51f50a714a3)
2388
+ always set FD_CLOEXEC on sockets post-accept()
2389
+ unicorn 0.8.2
2390
+ unicorn 0.9.1 (merge 0.8.2)
2391
+
2392
+ === unicorn 0.9.0 / 2009-07-01 22:24 UTC
2393
+
2394
+ bodies: "Transfer-Encoding: chunked", rewindable streaming
2395
+
2396
+ We now have support for "Transfer-Encoding: chunked" bodies in
2397
+ requests. Not only that, Rack applications reading input bodies
2398
+ get that data streamed off to the client socket on an as-needed
2399
+ basis. This allows the application to do things like upload
2400
+ progress notification and even tunneling of arbitrary stream
2401
+ protocols via bidirectional chunked encoding.
2402
+
2403
+ See Unicorn::App::Inetd and examples/git.ru (including the
2404
+ comments) for an example of tunneling the git:// protocol over
2405
+ HTTP.
2406
+
2407
+ This release also gives applications the ability to respond
2408
+ positively to "Expect: 100-continue" headers before being rerun
2409
+ without closing the socket connection. See Unicorn::App::Inetd
2410
+ for an example of how this is used.
2411
+
2412
+ This release is NOT recommended for production use.
2413
+
2414
+ Eric Wong (43):
2415
+ http_request: no need to reset the request
2416
+ http_request: StringIO is binary for empty bodies (1.9)
2417
+ http_request: fix typo for 1.9
2418
+ Transfer-Encoding: chunked streaming input support
2419
+ Unicorn::App::Inetd: reinventing Unix, poorly :)
2420
+ README: update with mailing list info
2421
+ local.mk.sample: publish_doc gzips all html, js, css
2422
+ Put copyright text in new files, include GPL2 text
2423
+ examples/cat-chunk-proxy: link to proposed curl(1) patch
2424
+ Update TODO
2425
+ Avoid duplicating the "Z" constant
2426
+ Optimize body-less GET/HEAD requests (again)
2427
+ tee_input: Don't expose the @rd object as a return value
2428
+ exec_cgi: small cleanups
2429
+ README: another note about older Sinatra
2430
+ tee_input: avoid defining a @rd.size method
2431
+ Make TeeInput easier to use
2432
+ test_upload: add tests for chunked encoding
2433
+ GNUmakefile: more stringent error checking in tests
2434
+ test_upload: fix ECONNRESET with 1.9
2435
+ GNUmakefile: allow TRACER= to be specified for tests
2436
+ test_rails: workaround long-standing 1.9 bug
2437
+ tee_input: avoid rereading fresh data
2438
+ "Fix" tests that break with stream_input=false
2439
+ inetd: fix broken constant references
2440
+ configurator: provide stream_input (true|false) option
2441
+ chunked_reader: simpler interface
2442
+ http_request: force BUFFER to be Encoding::BINARY
2443
+ ACK clients on "Expect: 100-continue" header
2444
+ Only send "100 Continue" when no body has been sent
2445
+ http_request: tighter Transfer-Encoding: "chunked" check
2446
+ Add trailer_parser for parsing trailers
2447
+ chunked_reader: Add test for chunk parse failure
2448
+ TeeInput: use only one IO for tempfile
2449
+ trailer_parser: set keys with "HTTP_" prefix
2450
+ TrailerParser integration into ChunkedReader
2451
+ Unbind listeners as before stopping workers
2452
+ Retry listen() on EADDRINUSE 5 times ever 500ms
2453
+ Re-add support for non-portable socket options
2454
+ Move "Expect: 100-continue" handling to the app
2455
+ tee_input: avoid ignoring initial body blob
2456
+ Force streaming input onto apps by default
2457
+ unicorn 0.9.0
2458
+
2459
+ === unicorn 0.8.1 / 2009-05-28 21:45 UTC
2460
+
2461
+ safer timeout handling, more consistent reload behavior
2462
+
2463
+ This release features safer, more descriptive timeout handling, more
2464
+ consistent reload behavior, and is a miniscule amount faster on
2465
+ "Hello World" benchmarks
2466
+
2467
+ Eric Wong (7):
2468
+ doc: cleanup summary/description
2469
+ Fix potential race condition in timeout handling
2470
+ SIGHUP reloads app even if preload_app is true
2471
+ Make our HttpRequest object a global constant
2472
+ Avoid instance variables lookups in a critical path
2473
+ Consistent logger assignment for multiple objects
2474
+ unicorn 0.8.1
2475
+
2476
+ === unicorn 0.8.0 / 2009-05-26 22:59 UTC
2477
+
2478
+ enforce Rack dependency, minor performance improvements and fixes
2479
+
2480
+ The RubyGem now has a hard dependency on Rack. Minor performance
2481
+ improvements and code cleanups. If RubyGems are in use, the Gem index
2482
+ is refreshed when SIGHUP is issued.
2483
+
2484
+ Eric Wong (66):
2485
+ test_request: enable with Ruby 1.9 now Rack 1.0.0 is out
2486
+ Small cleanup
2487
+ test_upload: still uncomfortable with 1.9 IO encoding...
2488
+ Add example init script
2489
+ app/exec_cgi: GC prevention
2490
+ Add TUNING document
2491
+ Make speculative accept() faster for the common case
2492
+ app/old_rails: correctly log errors in output
2493
+ http_request: avoid StringIO.new for GET/HEAD requests
2494
+ http_response: luserspace buffering is barely faster
2495
+ benchmark/*: updates for newer versions of Unicorn
2496
+ http_request: switch to readpartial over sysread
2497
+ No point in unsetting the O_NONBLOCK flag
2498
+ Merge commit 'origin/benchmark'
2499
+ Safer timeout handling and test case
2500
+ Ignore unhandled master signals in the workers
2501
+ TUNING: add a note about somaxconn with UNIX sockets
2502
+ Remove redundant socket closing/checking
2503
+ Instant shutdown signals really mean instant shutdown
2504
+ test_signals: ready workers before connecting
2505
+ Speed up the worker accept loop
2506
+ Fix a warning about @pid being uninitialized
2507
+ Inline and remove the HttpRequest#reset method
2508
+ Preserve 1.9 IO encodings in reopen_logs
2509
+ configurator: fix rdoc formatting
2510
+ http_request: use Rack::InputWrapper-compatible methods
2511
+ app/exec_cgi: use explicit buffers for read/sysread
2512
+ Enforce minimum timeout at 3 seconds
2513
+ Avoid killing sleeping workers
2514
+ Remove trickletest
2515
+ HttpRequest::DEF_PARAMS => HttpRequest::DEFAULTS
2516
+ exec_cgi: don't assume the body#each consumer is a socket
2517
+ Reopen master logs on SIGHUP, too
2518
+ Require Rack for HTTP Status codes
2519
+ http_response: allow string status codes
2520
+ test_response: correct OFS test
2521
+ privatize constants only used by old_rails/static
2522
+ Disable formatting for command-line switches
2523
+ GNUmakefile: glob all files in bin/*
2524
+ test_request: enable with Ruby 1.9 now Rack 1.0.0 is out
2525
+ test_upload: still uncomfortable with 1.9 IO encoding...
2526
+ Add example init script
2527
+ app/exec_cgi: GC prevention
2528
+ Add TUNING document
2529
+ app/old_rails: correctly log errors in output
2530
+ Safer timeout handling and test case
2531
+ Ignore unhandled master signals in the workers
2532
+ TUNING: add a note about somaxconn with UNIX sockets
2533
+ Fix a warning about @pid being uninitialized
2534
+ Preserve 1.9 IO encodings in reopen_logs
2535
+ configurator: fix rdoc formatting
2536
+ Enforce minimum timeout at 3 seconds
2537
+ http_response: allow string status codes
2538
+ test_response: correct OFS test
2539
+ Disable formatting for command-line switches
2540
+ GNUmakefile: glob all files in bin/*
2541
+ Merge branch '0.7.x-stable'
2542
+ Define HttpRequest#reset if missing
2543
+ Merge branch 'benchmark'
2544
+ unicorn 0.7.1
2545
+ Merge commit 'v0.7.1'
2546
+ Refresh Gem list when building the app
2547
+ Only refresh the gem list when building the app
2548
+ Switch to autoload to defer requires
2549
+ remove trickletest from Manifest
2550
+ unicorn 0.8.0
2551
+
2552
+ === unicorn 0.7.1 / 2009-05-22 09:06 UTC
2553
+
2554
+ minor fixes, cleanups and documentation improvements
2555
+
2556
+ Eric Wong (18):
2557
+ test_request: enable with Ruby 1.9 now Rack 1.0.0 is out
2558
+ test_upload: still uncomfortable with 1.9 IO encoding...
2559
+ Add example init script
2560
+ app/exec_cgi: GC prevention
2561
+ Add TUNING document
2562
+ app/old_rails: correctly log errors in output
2563
+ Safer timeout handling and test case
2564
+ Ignore unhandled master signals in the workers
2565
+ TUNING: add a note about somaxconn with UNIX sockets
2566
+ Fix a warning about @pid being uninitialized
2567
+ Preserve 1.9 IO encodings in reopen_logs
2568
+ configurator: fix rdoc formatting
2569
+ Enforce minimum timeout at 3 seconds
2570
+ http_response: allow string status codes
2571
+ test_response: correct OFS test
2572
+ Disable formatting for command-line switches
2573
+ GNUmakefile: glob all files in bin/*
2574
+ unicorn 0.7.1
2575
+
2576
+ === unicorn 0.7.0 / 2009-04-25 18:59 UTC
2577
+
2578
+ rack.version is 1.0
2579
+
2580
+ Rack 1.0.0 compatibility, applications are now passed
2581
+ env["rack.version"] == [1, 0]
2582
+
2583
+ Eric Wong (5):
2584
+ doc: formatting changes for SIGNALS doc
2585
+ configurator: "listen" directive more nginx-like
2586
+ Fix log rotation being delayed in workers when idle
2587
+ Rack 1.0.0 compatibility
2588
+ unicorn 0.7.0
2589
+
2590
+ === unicorn 0.6.0 / 2009-04-24 21:47 UTC
2591
+
2592
+ cleanups + optimizations, signals to {in,de}crement processes
2593
+
2594
+ * Mostly OCD-induced yak-shaving changes
2595
+
2596
+ * SIGTTIN and SIGTTOU are now used to control incrementing and
2597
+ decrementing of worker processes without needing to change
2598
+ the config file and SIGHUP.
2599
+
2600
+ Eric Wong (46):
2601
+ test_upload: ensure StringIO objects are binary
2602
+ http11: cleanup #includes and whitespace
2603
+ GNUmakefile: Fix ragel dependencies
2604
+ GNUmakefile: kill trailing whitespace after ragel
2605
+ Move absolute URI parsing into HTTP parser
2606
+ http11: remove unused variables/elements
2607
+ http_request: freeze modifiable elements
2608
+ HttpParser: set QUERY_STRING for Rack-compliance
2609
+ GNUmakefile: mark test_signals as a slow test
2610
+ const: remove unused QUERY_STRING constant
2611
+ http11: formatting cleanups
2612
+ http11: remove callbacks from structure
2613
+ replace DATA_GET macro with a function
2614
+ http11: minor cleanups in return types
2615
+ http11: make parser obey HTTP_HOST with empty port
2616
+ http11: cleanup some CPP macros
2617
+ http11: rfc2616 handling of absolute URIs
2618
+ http_response: small speedup by eliminating loop
2619
+ Stop extending core classes
2620
+ rename socket.rb => socket_helper.rb
2621
+ Remove @start_ctx instance variable
2622
+ http11: support underscores in URI hostnames
2623
+ test: empty port test for absolute URIs
2624
+ Cleanup some unnecessary requires
2625
+ Cleanup GNUmakefile and fix dependencies
2626
+ Fix data corruption with small uploads via browsers
2627
+ Get rid of UNICORN_TMP_BASE constant
2628
+ GNUmakefile: mark test_upload as a slow test
2629
+ unicorn_rails: avoid nesting lambdas
2630
+ test_exec: cleanup stale socket on exit
2631
+ Merge commit 'v0.5.4'
2632
+ http_request: micro optimizations
2633
+ IO_PURGATORY should be a global constant
2634
+ Make LISTENERS and WORKERS global constants, too
2635
+ test_socket_helper: disable GC for this test
2636
+ http_response: just barely faster
2637
+ http_response: minor performance gains
2638
+ make SELF_PIPE is a global constant
2639
+ Describe the global constants we use.
2640
+ Fixup reference to a dead variable
2641
+ Avoid getppid() if serving heavy traffic
2642
+ minor cleanups and save a few variables
2643
+ Allow std{err,out}_path to be changed via HUP
2644
+ SIGTT{IN,OU} {in,de}crements worker_processes
2645
+ cleanup: avoid duped self-pipe init/replacement logic
2646
+ unicorn 0.6.0
2647
+
2648
+ === unicorn 0.5.4 / 2009-04-24 01:41 UTC
2649
+
2650
+ fix data corruption with some small uploads (not curl)
2651
+
2652
+ Eric Wong (2):
2653
+ Fix data corruption with small uploads via browsers
2654
+ unicorn 0.5.4
2655
+
2656
+ === unicorn 0.5.3 / 2009-04-17 05:32 UTC
2657
+
2658
+ fix 100% CPU usage when idle, small cleanups
2659
+
2660
+ fix 100% CPU usage when idle
2661
+
2662
+ Eric Wong (7):
2663
+ update Manifest (add test_signals.rb)
2664
+ Fix forgotten Rails tests
2665
+ Fix my local.mk file to always run Rails tests
2666
+ fix 100% CPU usage when idle
2667
+ remove DATE constant
2668
+ Small garbage reduction in HttpResponse
2669
+ unicorn 0.5.3
2670
+
2671
+ === unicorn 0.5.2 / 2009-04-16 23:32 UTC
2672
+
2673
+ force Status: header for compat, small cleanups
2674
+
2675
+ * Ensure responses always have the "Status:" header. This
2676
+ is needed for compatibility with some broken clients.
2677
+
2678
+ * Other small and minor cleanups
2679
+
2680
+ Eric Wong (10):
2681
+ Explicitly trap SIGINT/SIGTERM again
2682
+ s/rotating/reopening/g in log messages
2683
+ before_commit and before_exec can never be nil/false
2684
+ worker_loop cleanups, var golf, and yak-shaving
2685
+ http11: default server port is 443 for https
2686
+ ensure responses always have the "Status:" header
2687
+ test: fix dependency issue with "make test-unit"
2688
+ GNUmakefile: small dependency cleanups
2689
+ unicorn/const: kill trailing whitespace
2690
+ unicorn 0.5.2
2691
+
2692
+ === unicorn 0.5.1 / 2009-04-13 21:24 UTC
2693
+
2694
+ exit correctly on INT/TERM, QUIT is still recommended, however
2695
+
2696
+ We now exit correctly on INT/TERM signals, QUIT is still
2697
+ recommended as it does graceful shutdowns.
2698
+
2699
+ Eric Wong (2):
2700
+ Fix SIGINT/SIGTERM handling (broken in 0.5.0)
2701
+ unicorn 0.5.1
2702
+
2703
+ === unicorn 0.5.0 / 2009-04-13 19:08 UTC
2704
+
2705
+ {after,before}_fork API change, small tweaks/fixes
2706
+
2707
+ * There is an API change in the {after,before}_fork hooks
2708
+ so now the entire Worker struct is exposed to the user.
2709
+ This allows Unicorn to unofficially support user/group
2710
+ privilege changing.
2711
+
2712
+ * The "X-Forwarded-Proto:" header can be set by proxies
2713
+ to ensure rack.url_scheme is "https" for SSL-enabled
2714
+ sites.
2715
+
2716
+ * Small cleanups and tweaks throughout, see shortlog (below)
2717
+ or changelog for details.
2718
+
2719
+ Eric Wong (32):
2720
+ test_helper: redirect_io uses append and sync
2721
+ configurator: allow hooks to be passed callable objects
2722
+ Add a test for signal recovery
2723
+ Documentation updates
2724
+ Enforce umask 0000 with UNIX domain sockets
2725
+ local.mk: touch files after set-file-times
2726
+ Add test for :preload_app config option
2727
+ GNUmakefile: remove unnecessary asterisks in output
2728
+ GNUmakefile: allow "make V=1 ..." for verbosity
2729
+ test_configurator: rename test name that never ran
2730
+ cleanup some log messages
2731
+ test_request: tests esoteric/rare REQUEST_URIs
2732
+ http11: Remove qsort/bsearch code paths
2733
+ http11: handle "X-Forwarded-Proto: https"
2734
+ close listeners when removing them from our array
2735
+ config: handle listener unbind/replace in config file
2736
+ README: doc updates
2737
+ Restore unlinked UNIX sockets on SIGHUP
2738
+ listen backlog, sndbuf, rcvbuf are always changeable
2739
+ Remove _all_ non-POSIX socket options
2740
+ http11: cleanup+safer rack.url_scheme handling
2741
+ test_exec: fix potential races in fd leak test
2742
+ test_http_parser: fix broken URL in comment
2743
+ Save one fcntl() syscall on every request
2744
+ Remove unnecessary sync assignment
2745
+ Don't bother restoring ENV or umask across reexec
2746
+ old_rails: try harder to ensure valid responses
2747
+ small cleanups in signal handling and worker init
2748
+ Remove unnecessary local variables in process_client
2749
+ Expose worker to {before,after}_fork hooks
2750
+ Configurator: add example for user/group switching
2751
+ unicorn 0.5.0
2752
+
2753
+ === unicorn 0.4.2 / 2009-04-02 19:14 UTC
2754
+
2755
+ fix Rails ARStore, FD leak prevention, descriptive proctitles
2756
+
2757
+ Eric Wong (16):
2758
+ Manifest: updates
2759
+ Merge unicorn
2760
+ test_exec: add test case for per-worker listeners
2761
+ Remove set_cloexec wrapper and require FD_CLOEXEC
2762
+ All IOs created in workers have FD_CLOEXEC set
2763
+ FD_CLOEXEC all non-listen descriptors before exec
2764
+ Close std{err,out} redirection targets
2765
+ test_upload: fix a race condition in unlink test
2766
+ More descriptive process titles
2767
+ unicorn_rails: cleanup redundant bits
2768
+ test/rails: v2.1.2 + ActiveRecordStore all around
2769
+ Use File.basename instead of a regexp
2770
+ Add log directories to tests
2771
+ unicorn: remove unnecessary lambda generation
2772
+ GNUmakefile: "install" preserves unicorn_rails
2773
+ unicorn 0.4.2
2774
+
2775
+ === unicorn v0.4.1 / 2009-04-01 10:52 UTC
2776
+
2777
+ Rails support, per-listener backlog and {snd,rcv}buf
2778
+
2779
+ Eric Wong (50):
2780
+ All new benchmarks, old ones removed
2781
+ benchmark: header values must be strings
2782
+ Merge commit 'origin/benchmark' into release
2783
+ HttpResponse: speed up non-multivalue headers
2784
+ Streamline rack environment generation
2785
+ Don't bother unlinking UNIX sockets
2786
+ unicorn_rails: support non-Rack versions of Rails
2787
+ HttpRequest: small improvement for GET requests
2788
+ simplify the HttpParser interface
2789
+ Socket: add {snd,rcv}buf opts to bind_listen
2790
+ Merge commit 'v0.2.3'
2791
+ Don't allow failed log rotation to to break app
2792
+ Deferred log rotation in workers
2793
+ style: symbols instead of strings for signal names
2794
+ No need to disable luserspace buffering on client socket
2795
+ test_server: quieter tests
2796
+ Remove needless line break
2797
+ Always try to send a valid HTTP response back
2798
+ test_response: ensure closed socket after write
2799
+ test_response: ensure response body is closed
2800
+ TODO: update roadmap to 1.0.0
2801
+ configurator: per-listener backlog, {rcv,snd}buf config
2802
+ configurator: favor "listen" directive over "listeners"
2803
+ http11: use :http_body instead of "HTTP_BODY"
2804
+ Avoid having two pid files pointing to the same pid
2805
+ test_exec: fix race conditions
2806
+ test_exec: fix response bodies
2807
+ Fix default listener setup
2808
+ test_exec: fix another race condition
2809
+ bin/*: parse CLI switches in config.ru sooner
2810
+ app/old_rails/static: define missing constant
2811
+ unicorn_rails: give more info when aborting
2812
+ GNUmakefile: add test-exec and test-unit targets
2813
+ cgi_wrapper: ensure "Status:" header is not set
2814
+ Better canonicalization of listener paths + tests
2815
+ configurator: remove unnecessary SocketHelper include
2816
+ unicorn_rails: minor cleanup for dead variable
2817
+ Use {read,write}_nonblock on the pipe
2818
+ unicorn_rails: cleanup path mapping usage
2819
+ Rails stack tests for unicorn_rails
2820
+ test: factor out exec helpers into common code for Rails tests
2821
+ cgi_wrapper: fix cookies and other headers
2822
+ GNUmakefile: prefix errors with $(extra) variable
2823
+ cgi_wrapper: HTTP status code cleanups
2824
+ Add more tests for Rails
2825
+ test_rails: 4x speedup
2826
+ Manifest update
2827
+ Documentation updates, prep for 0.4.1 release
2828
+ Add local.mk.sample file that I use
2829
+ unicorn 0.4.1
2830
+
2831
+ === unicorn v0.2.3 / 2009-03-25 23:31 UTC
2832
+
2833
+ Unlink Tempfiles after use (they were closed, just not unlinked)
2834
+
2835
+ Eric Wong (3):
2836
+ Don't bother unlinking UNIX sockets
2837
+ Ensure Tempfiles are unlinked after every request
2838
+ unicorn 0.2.3
2839
+
2840
+ === unicorn v0.2.2 / 2009-03-22 23:45 UTC
2841
+
2842
+ small bug fixes, fix Rack multi-value headers (Set-Cookie:)
2843
+
2844
+ Eric Wong (19):
2845
+ Fix link to Rubyforge releases page
2846
+ start libifying common launcher code
2847
+ unicorn_rails: fix standard pid path setup
2848
+ Move listen path and address expansion to Configurator
2849
+ Trap WINCH to QUIT children without respawning
2850
+ Remove Mongrel stuff from CHANGELOG
2851
+ HttpResponse: close body if it can close
2852
+ Add Unicorn::App::ExecCgi
2853
+ Process management cleanups
2854
+ documentation/disclaimer updates
2855
+ unicorn_rails: remove unnecessary Rack-loading logic
2856
+ unicorn/http11: remove GATEWAY_INTERFACE
2857
+ http11: don't set headers Rack doesn't like
2858
+ HttpRequest test so our requests pass Rack::Lint
2859
+ HttpRequest: correctly reference logger
2860
+ Rotate master logs before workers.
2861
+ Simplify code for sleeping/waking up the master
2862
+ Handle Rack multivalue headers correctly
2863
+ unicorn 0.2.2
2864
+
2865
+ === unicorn v0.2.1 / 2009-03-19 03:20 UTC
2866
+
2867
+ Fix broken Manifest that cause unicorn_rails to not be bundled
2868
+
2869
+ Eric Wong (1):
2870
+ unicorn v0.2.1, fix the Manifest
2871
+
2872
+ === unicorn v0.2.0 / 2009-03-19 03:16 UTC
2873
+
2874
+ unicorn_rails launcher script.
2875
+
2876
+ Eric Wong (8):
2877
+ Start _Known Issues_ section in README
2878
+ Allow binding to UNIX sockets relative to "~"
2879
+ tests: do not trust (our correct use of) 1.9 encodings
2880
+ gracefully die if working dir is invalid at fork
2881
+ Add signal queueing for test reliability
2882
+ Add unicorn_rails script for Rails 2.3.2
2883
+ Documentation updates, prepare for 0.2.0
2884
+ unicorn 0.2.0
2885
+
2886
+ === unicorn v0.1.0 / 2009-03-11 01:50 UTC
2887
+
2888
+ Unicorn - UNIX-only fork of Mongrel free of threading
2889
+
2890
+