unicorn-heroku-wait 4.8.0.1.g0ed2.dirty

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