preplay_unicorn 4.3.1.2.gc450

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