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