unicorn-camilo 4.8.2.5.g0b28.dirty

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