unicorn-simon 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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
+