rainbows 0.91.1 → 0.92.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +1 -1
- data/.gitignore +1 -0
- data/.manifest +13 -4
- data/ChangeLog +237 -219
- data/DEPLOY +13 -13
- data/Documentation/comparison.haml +1 -1
- data/GIT-VERSION-FILE +1 -1
- data/GIT-VERSION-GEN +1 -1
- data/GNUmakefile +18 -7
- data/NEWS +29 -0
- data/README +5 -4
- data/Rakefile +7 -0
- data/SIGNALS +5 -1
- data/TODO +2 -5
- data/config/.gitignore +1 -0
- data/config/isolate.rb +25 -0
- data/lib/rainbows/base.rb +32 -8
- data/lib/rainbows/const.rb +3 -2
- data/lib/rainbows/ev_core.rb +42 -2
- data/lib/rainbows/event_machine.rb +48 -5
- data/lib/rainbows/fiber/base.rb +4 -2
- data/lib/rainbows/fiber/rev.rb +1 -1
- data/lib/rainbows/http_response.rb +21 -20
- data/lib/rainbows/http_server.rb +13 -6
- data/lib/rainbows/max_body.rb +82 -0
- data/lib/rainbows/rev/deferred_response.rb +10 -11
- data/lib/rainbows/revactor.rb +38 -4
- data/lib/rainbows/tee_input.rb +17 -0
- data/lib/rainbows.rb +26 -2
- data/local.mk.sample +13 -23
- data/rainbows.gemspec +2 -2
- data/t/app_deferred.ru +23 -0
- data/t/async_examples/async_app.ru +8 -8
- data/t/rack-fiber_pool/app.ru +5 -0
- data/t/{t0100-rack-input-hammer.sh → t0100-rack-input-hammer-chunked.sh} +1 -1
- data/t/t0100-rack-input-hammer-content-length.sh +50 -0
- data/t/t0103-rack-input-limit.sh +60 -0
- data/t/t0104-rack-input-limit-tiny.sh +62 -0
- data/t/t0105-rack-input-limit-bigger.sh +105 -0
- data/t/t0401-em-async-tailer.sh +1 -1
- data/t/t0600-rack-fiber_pool.sh +49 -0
- data/t/t0700-app-deferred.sh +45 -0
- data/t/test-lib.sh +1 -0
- metadata +22 -10
- data/lib/rainbows/event_machine_defer.rb +0 -59
- data/lib/rainbows/revactor/tee_input.rb +0 -52
- data/t/simple-http_EventMachineDefer.ru +0 -11
data/ChangeLog
CHANGED
@@ -1,349 +1,367 @@
|
|
1
|
-
ChangeLog from git://git.bogomips.org/rainbows.git (v0.
|
1
|
+
ChangeLog from git://git.bogomips.org/rainbows.git (v0.91.1..v0.92.0)
|
2
2
|
|
3
|
-
commit
|
3
|
+
commit 0619e62285d25763ac1dee8a9aab18da7d39f80e
|
4
4
|
Author: Eric Wong <normalperson@yhbt.net>
|
5
|
-
Date:
|
5
|
+
Date: Tue May 4 14:02:26 2010 -0700
|
6
6
|
|
7
|
-
Rainbows! 0.
|
7
|
+
Rainbows! 0.92.0 - inching towards the pot of gold
|
8
8
|
|
9
|
-
|
10
|
-
exposed directly to untrusted clients.
|
9
|
+
Mostly internal cleanups and small improvements.
|
11
10
|
|
12
|
-
The
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
the assertion would be aborted.
|
11
|
+
The only backwards incompatible change was the addition of the
|
12
|
+
"client_max_body_size" parameter to limit upload sizes to
|
13
|
+
prevent DoS. This defaults to one megabyte (same as nginx), so
|
14
|
+
any apps relying on the limit-less behavior of previous will
|
15
|
+
have to configure this in the Unicorn/Rainbows! config file:
|
18
16
|
|
19
|
-
|
20
|
-
|
21
|
-
|
17
|
+
Rainbows! do
|
18
|
+
# nil for unlimited, or any number in bytes
|
19
|
+
client_max_body_size nil
|
20
|
+
end
|
22
21
|
|
23
|
-
The
|
24
|
-
|
25
|
-
at all) are certainly affected by this DoS.
|
22
|
+
The ThreadSpawn and ThreadPool models are now optimized for serving
|
23
|
+
large static files under Ruby 1.9 using IO.copy_stream[1].
|
26
24
|
|
27
|
-
|
28
|
-
|
29
|
-
0.91.0 nor Unicorn 0.97.0
|
25
|
+
The EventMachine model has always had optimized static file
|
26
|
+
serving (using EM::Connection#stream_file_data[2]).
|
30
27
|
|
31
|
-
|
32
|
-
|
28
|
+
The EventMachine model (finally) gets conditionally deferred app
|
29
|
+
dispatch in a separate thread, as described by Ezra Zygmuntowicz
|
30
|
+
for Merb, Ebb and Thin[3].
|
31
|
+
|
32
|
+
[1] - http://euruko2008.csrug.cz/system/assets/documents/0000/0007/tanaka-IOcopy_stream-euruko2008.pdf
|
33
|
+
[2] - http://eventmachine.rubyforge.org/EventMachine/Connection.html#M000312
|
34
|
+
[3] - http://brainspl.at/articles/2008/04/18/deferred-requests-with-merb-ebb-and-thin
|
33
35
|
|
34
|
-
commit
|
36
|
+
commit ec50b892e5d3bc6f585780ebbbf071d489b2c3ae
|
35
37
|
Author: Eric Wong <normalperson@yhbt.net>
|
36
|
-
Date:
|
38
|
+
Date: Tue May 4 14:56:44 2010 -0700
|
37
39
|
|
38
|
-
|
39
|
-
|
40
|
-
Unicorn 0.97.0 has a bunch of internal cleanups and small fixes
|
41
|
-
and this is mainly to resync with those changes.
|
42
|
-
|
43
|
-
keepalive_timeout now defaults to 5 seconds (from 2 seconds
|
44
|
-
previous). This should help out clients on slower connections.
|
45
|
-
|
46
|
-
Some small fixes and cleanups:
|
40
|
+
revactor: match IO behavior for readpartial wrapper
|
47
41
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
* quiet down ENOTCONN handling, there's nothing we can do about
|
52
|
-
this error so we won't fill our logs with it.
|
42
|
+
IO#readpartial on zero bytes will always return an empty
|
43
|
+
string, so ensure the emulator for Revactor does that as
|
44
|
+
well.
|
53
45
|
|
54
|
-
commit
|
46
|
+
commit 3130edb35b3289149cbe7a36ce4e86406a39de35
|
55
47
|
Author: Eric Wong <normalperson@yhbt.net>
|
56
|
-
Date:
|
48
|
+
Date: Tue May 4 14:27:06 2010 -0700
|
57
49
|
|
58
|
-
|
50
|
+
TODO: fix rdoc link
|
59
51
|
|
60
|
-
commit
|
52
|
+
commit 47ab2c1e81251abc36ca83565292c3ecdfc33eeb
|
61
53
|
Author: Eric Wong <normalperson@yhbt.net>
|
62
|
-
Date:
|
54
|
+
Date: Tue May 4 14:01:00 2010 -0700
|
63
55
|
|
64
|
-
|
56
|
+
tee_input: remember "encoding: binary" comment
|
65
57
|
|
66
|
-
|
58
|
+
Even if it's just an empty file for now, it's critical in
|
59
|
+
case we ever add any code that returns user-visible strings
|
60
|
+
since Rack::Lint (and mere sanity) require binary encoding
|
61
|
+
for "rack.input".
|
67
62
|
|
68
|
-
commit
|
63
|
+
commit 53be61846ad12d1ae243e287f81608b43fbdd318
|
69
64
|
Author: Eric Wong <normalperson@yhbt.net>
|
70
|
-
Date:
|
65
|
+
Date: Tue May 4 13:58:14 2010 -0700
|
71
66
|
|
72
|
-
|
73
|
-
|
74
|
-
The previous 2 second default was not enough for folks on slow
|
75
|
-
connections where our OS socket buffers would've masked the time
|
76
|
-
it took to write out larger responses.
|
67
|
+
gemspec: bump Unicorn dependency
|
77
68
|
|
78
|
-
|
69
|
+
We expect no API changes in Unicorn for a while
|
79
70
|
|
80
|
-
commit
|
71
|
+
commit 588af09a7fa0a950d711c3828c93a6a9414daacf
|
81
72
|
Author: Eric Wong <normalperson@yhbt.net>
|
82
|
-
Date:
|
73
|
+
Date: Tue May 4 13:54:23 2010 -0700
|
83
74
|
|
84
|
-
|
85
|
-
|
86
|
-
Just create an empty string instead and let Unicorn::HttpParser
|
87
|
-
allocate it internally to whatever size is needed.
|
75
|
+
local.mk.sample: isolate needs the correct Rake
|
88
76
|
|
89
|
-
commit
|
77
|
+
commit 89841227d51977cc58e77b68309d4aef633fa61e
|
90
78
|
Author: Eric Wong <normalperson@yhbt.net>
|
91
|
-
Date:
|
79
|
+
Date: Tue May 4 13:52:56 2010 -0700
|
92
80
|
|
93
|
-
|
81
|
+
doc: DEPLOY - more strongly recommend Rainbows!-only
|
94
82
|
|
95
|
-
|
96
|
-
don't care about.
|
83
|
+
Paragraph ordering matters psychologically.
|
97
84
|
|
98
|
-
commit
|
85
|
+
commit 52b306c5cd47e34644f7ec5f7ab100855929b618
|
99
86
|
Author: Eric Wong <normalperson@yhbt.net>
|
100
|
-
Date:
|
87
|
+
Date: Tue May 4 13:47:11 2010 -0700
|
101
88
|
|
102
|
-
|
89
|
+
eventmachine: "rack.multithread" is always true when deferring
|
103
90
|
|
104
|
-
|
91
|
+
Since deferred requests run in a separate thread, this affects
|
92
|
+
the root (non-deferred) thread as well since it may share
|
93
|
+
data with other threads.
|
105
94
|
|
106
|
-
commit
|
95
|
+
commit e8cedc2584d23a8ab214ff96a973dc37344c2796
|
107
96
|
Author: Eric Wong <normalperson@yhbt.net>
|
108
|
-
Date:
|
97
|
+
Date: Tue May 4 13:41:55 2010 -0700
|
109
98
|
|
110
|
-
|
99
|
+
drop EventMachineDefer concurrency model
|
100
|
+
|
101
|
+
Since we have conditional deferred execution in the regular
|
102
|
+
EventMachine concurrency model, we can drop this one.
|
103
|
+
|
104
|
+
This concurrency model never fully worked due to lack of
|
105
|
+
graceful shut downs, and was never promoted nor supported, either.
|
111
106
|
|
112
|
-
commit
|
107
|
+
commit e61f0f4f901848e59b7b756224c765afde217a71
|
113
108
|
Author: Eric Wong <normalperson@yhbt.net>
|
114
|
-
Date:
|
109
|
+
Date: Tue May 4 13:37:28 2010 -0700
|
115
110
|
|
116
|
-
|
111
|
+
SIGNALS: document app.deferred? caveat for graceful shutdown
|
117
112
|
|
118
|
-
|
119
|
-
|
120
|
-
when we try to call getpeername(2)
|
113
|
+
There doesn't appear to be a good/easy way to do this with
|
114
|
+
the built-in EventMachine thread pool :/
|
121
115
|
|
122
|
-
commit
|
116
|
+
commit def62fdc46f064ad61491021d46d223abe68100d
|
123
117
|
Author: Eric Wong <normalperson@yhbt.net>
|
124
|
-
Date:
|
118
|
+
Date: Tue May 4 13:33:25 2010 -0700
|
125
119
|
|
126
|
-
|
127
|
-
|
128
|
-
For the very rare apps out there using Rainbows::Fiber::IO, the
|
129
|
-
FiberSpawn and FiberPool (but not RevFiberSpawn) models could
|
130
|
-
leak memory if the app-created Rainbows::Fiber::IO objects
|
131
|
-
were dereferenced without being removed from the RD/WR hashes.
|
120
|
+
TODO: update EventMachine-related bits
|
132
121
|
|
133
|
-
commit
|
122
|
+
commit 57909fb76dd0bcf95bed94ec41933ec85afda885
|
134
123
|
Author: Eric Wong <normalperson@yhbt.net>
|
135
|
-
Date:
|
124
|
+
Date: Tue May 4 13:23:38 2010 -0700
|
136
125
|
|
137
|
-
|
126
|
+
eventmachine: add app.deferred?(env) support as middleware
|
138
127
|
|
139
|
-
|
140
|
-
|
141
|
-
|
128
|
+
Merb (and possibly other) frameworks that support conditionally
|
129
|
+
deferred app dispatch can now use it just like Ebb and Thin.
|
130
|
+
|
131
|
+
http://brainspl.at/articles/2008/04/18/deferred-requests-with-merb-ebb-and-thin
|
142
132
|
|
143
|
-
commit
|
133
|
+
commit dcf280239978e00435760470b5ddf67254312c75
|
144
134
|
Author: Eric Wong <normalperson@yhbt.net>
|
145
|
-
Date:
|
135
|
+
Date: Mon May 3 18:51:18 2010 -0700
|
146
136
|
|
147
|
-
|
148
|
-
|
149
|
-
The Unicorn.builder helper will help us avoid namespace
|
150
|
-
conflicts inside config.ru, allowing us to pass tests.
|
151
|
-
|
152
|
-
While we're at it, port some tests over from the latest
|
153
|
-
unicorn.git for dealing with bad configs.
|
137
|
+
event_machine: update documentation for async frameworks
|
154
138
|
|
155
|
-
commit
|
139
|
+
commit 96f06e8171a4145feca8c750011cdd1d84a7b948
|
156
140
|
Author: Eric Wong <normalperson@yhbt.net>
|
157
|
-
Date:
|
141
|
+
Date: Mon May 3 18:22:08 2010 -0700
|
158
142
|
|
159
|
-
|
143
|
+
doc: misc updates
|
160
144
|
|
161
|
-
|
145
|
+
* avoid needless links to /Rainbows.html
|
146
|
+
* keepalive_timeout has been 5 seconds by default for a while
|
147
|
+
* update "Gemcutter" references to "RubyGems.org"
|
162
148
|
|
163
|
-
commit
|
149
|
+
commit 60c57382638c8be81fe6163d1728415c494ad4f8
|
164
150
|
Author: Eric Wong <normalperson@yhbt.net>
|
165
|
-
Date:
|
151
|
+
Date: Mon May 3 18:16:24 2010 -0700
|
166
152
|
|
167
|
-
|
168
|
-
|
169
|
-
too dangerous with the ready_pipe feature in Unicorn 0.96+
|
153
|
+
doc: RDoc 2.5.x updates
|
170
154
|
|
171
|
-
commit
|
155
|
+
commit de3bcfe3ba9402bd510f7414df1763b6b99dae47
|
172
156
|
Author: Eric Wong <normalperson@yhbt.net>
|
173
|
-
Date:
|
157
|
+
Date: Mon May 3 17:56:00 2010 -0700
|
174
158
|
|
175
|
-
|
159
|
+
cleanup request size limiting for TeeInput users
|
176
160
|
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
161
|
+
WAvoid mucking with Unicorn::TeeInput, since other apps may
|
162
|
+
depend on that class, so we subclass it as Rainbows::TeeInput
|
163
|
+
and modify as necessary in worker processes.
|
164
|
+
|
165
|
+
For Revactor, remove the special-cased
|
166
|
+
Rainbows::Revactor::TeeInput class and instead emulate
|
167
|
+
readpartial for Revactor sockets instead.
|
182
168
|
|
183
|
-
commit
|
169
|
+
commit 54cae80e543a6f4ca6456fe07b88aba867d215a6
|
184
170
|
Author: Eric Wong <normalperson@yhbt.net>
|
185
|
-
Date:
|
171
|
+
Date: Mon May 3 17:17:13 2010 -0700
|
186
172
|
|
187
|
-
|
188
|
-
|
189
|
-
When available (Ruby 1.9), we can use Hash#compare_by_identity
|
190
|
-
to improve performance.
|
173
|
+
max_body: remove extraneous debug message
|
191
174
|
|
192
|
-
commit
|
175
|
+
commit 798f5e3a507c20b4abf03aa8313659d3f632a0fa
|
193
176
|
Author: Eric Wong <normalperson@yhbt.net>
|
194
|
-
Date: Mon
|
177
|
+
Date: Mon May 3 15:19:53 2010 -0700
|
195
178
|
|
196
|
-
|
179
|
+
t0100: rack-input-hammer tests identity encodings, too
|
197
180
|
|
198
|
-
|
181
|
+
It turns out we were painfully lacking in tests for HTTP
|
182
|
+
requests where the Content-Length header _is_ set.
|
199
183
|
|
200
|
-
commit
|
184
|
+
commit 9f1131f5972ba90c1c54c76cc97633447142b307
|
201
185
|
Author: Eric Wong <normalperson@yhbt.net>
|
202
|
-
Date: Mon
|
186
|
+
Date: Mon May 3 15:19:53 2010 -0700
|
203
187
|
|
204
|
-
|
188
|
+
add client_max_body_size config directive
|
205
189
|
|
206
|
-
|
190
|
+
Since Rainbows! is supported when exposed directly to the
|
191
|
+
Internet, administrators may want to limit the amount of data a
|
192
|
+
user may upload in a single request body to prevent a
|
193
|
+
denial-of-service via disk space exhaustion.
|
194
|
+
|
195
|
+
This amount may be specified in bytes, the default limit being
|
196
|
+
1024*1024 bytes (1 megabyte). To override this default, a user
|
197
|
+
may specify `client_max_body_size' in the Rainbows! block
|
198
|
+
of their server config file:
|
199
|
+
|
200
|
+
Rainbows! do
|
201
|
+
client_max_body_size 10 * 1024 * 1024
|
202
|
+
end
|
203
|
+
|
204
|
+
Clients that exceed the limit will get a "413 Request Entity Too
|
205
|
+
Large" response if the request body is too large and the
|
206
|
+
connection will close.
|
207
|
+
|
208
|
+
For chunked requests, we have no choice but to interrupt during
|
209
|
+
the client upload since we have no prior knowledge of the
|
210
|
+
request body size.
|
207
211
|
|
208
|
-
commit
|
212
|
+
commit 1f3de8f8940fc7805c54d3d27e2074632ab5a0b0
|
209
213
|
Author: Eric Wong <normalperson@yhbt.net>
|
210
|
-
Date:
|
214
|
+
Date: Mon May 3 15:19:45 2010 -0700
|
211
215
|
|
212
|
-
|
216
|
+
t0401: do not leave lingering tail(1) processes
|
213
217
|
|
214
|
-
|
218
|
+
Since Rainbows! allows for graceful termination, let
|
219
|
+
EM kill and reap the tail(1) processes it spawned.
|
215
220
|
|
216
|
-
commit
|
217
|
-
Merge: ef16157 fddbfa6
|
221
|
+
commit b1153164af2f51dd5994f0efac6ea81adffdfee1
|
218
222
|
Author: Eric Wong <normalperson@yhbt.net>
|
219
|
-
Date:
|
223
|
+
Date: Tue Apr 27 11:16:52 2010 -0700
|
220
224
|
|
221
|
-
|
222
|
-
|
223
|
-
* rack-1.1:
|
224
|
-
http_response: disallow blank, multi-value headers
|
225
|
+
gemspec: update comments for gem dependencies
|
225
226
|
|
226
|
-
commit
|
227
|
+
commit 1d3bd978aa990fdd01ec4cd15a1b7276b91ffef6
|
227
228
|
Author: Eric Wong <normalperson@yhbt.net>
|
228
|
-
Date:
|
229
|
+
Date: Tue Apr 27 11:14:47 2010 -0700
|
229
230
|
|
230
|
-
|
231
|
+
dev: isolate: bump Unicorn test dependency
|
231
232
|
|
232
|
-
commit
|
233
|
+
commit 7faf47b6bc50de4387697a90480e354acd0c9917
|
233
234
|
Author: Eric Wong <normalperson@yhbt.net>
|
234
|
-
Date:
|
235
|
+
Date: Tue Apr 27 02:04:25 2010 -0700
|
235
236
|
|
236
|
-
|
237
|
+
base: status == 100 check needs to_i conversion
|
237
238
|
|
238
|
-
|
239
|
-
|
239
|
+
Rack allows anything as the status, as long as it
|
240
|
+
returns a valid status integer on status.to_i.
|
240
241
|
|
241
|
-
commit
|
242
|
+
commit 85316b09eba1443508e78237b56e42292ab3b127
|
243
|
+
Merge: 72fdcf1 3d0558d
|
242
244
|
Author: Eric Wong <normalperson@yhbt.net>
|
243
|
-
Date:
|
245
|
+
Date: Mon Apr 19 15:45:44 2010 -0700
|
244
246
|
|
245
|
-
|
247
|
+
Merge branch 'maint'
|
246
248
|
|
247
|
-
|
248
|
-
|
249
|
+
* maint:
|
250
|
+
Rainbows! 0.91.1 - use a less-broken parser from Unicorn
|
249
251
|
|
250
|
-
commit
|
252
|
+
commit 72fdcf1c39c2a143d7abd8d2609e92311edff341
|
251
253
|
Author: Eric Wong <normalperson@yhbt.net>
|
252
|
-
Date:
|
254
|
+
Date: Mon Apr 19 01:04:47 2010 -0700
|
253
255
|
|
254
|
-
|
256
|
+
add test for the rack-fiber_pool gem with EventMachine
|
255
257
|
|
256
|
-
|
257
|
-
|
258
|
-
multi-value "Set-Cookie" headers without relying on the proper
|
259
|
-
methods provided by Rack::Utils.
|
258
|
+
Although advertised as being Thin-only, the rack-fiber_pool gem
|
259
|
+
works with our EventMachine concurrency model as well.
|
260
260
|
|
261
|
-
|
262
|
-
|
263
|
-
|
261
|
+
Note that it's impossible to expose the streaming "rack.input"
|
262
|
+
behavior of the native FiberSpawn/FiberPool models via
|
263
|
+
middleware, but most people don't need streaming a "rack.input"
|
264
264
|
|
265
|
-
|
265
|
+
See http://github.com/mperham/rack-fiber_pool for more details
|
266
|
+
on the rack-fiber_pool gem.
|
266
267
|
|
267
|
-
commit
|
268
|
+
commit 98622a1c291277ff124a586929c675e9ae67692e
|
268
269
|
Author: Eric Wong <normalperson@yhbt.net>
|
269
|
-
Date:
|
270
|
+
Date: Sun Apr 18 21:33:40 2010 -0700
|
270
271
|
|
271
|
-
|
272
|
+
use the excellent `isolate' gem for dev
|
272
273
|
|
273
|
-
|
274
|
-
|
274
|
+
It should make life easier when dealing with and testing
|
275
|
+
complex dependencies, especially ones like Cramp which
|
276
|
+
depend on prerelease versions of gems.
|
277
|
+
|
278
|
+
commit b6dcf1343a379f0fb5de5cc551dbbf85da2b4cdf
|
279
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
280
|
+
Date: Sun Apr 18 21:24:07 2010 -0700
|
281
|
+
|
282
|
+
rev/deferred_response: cleanup and simplification
|
275
283
|
|
276
|
-
|
277
|
-
|
278
|
-
|
284
|
+
We can use the new HttpResponse.header_string method now
|
285
|
+
instead of writing an empty body.
|
286
|
+
|
287
|
+
commit ea36bb312bd9a35f9621d1cc406f8d07a37c2a2a
|
288
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
289
|
+
Date: Sat Apr 17 11:08:22 2010 -0700
|
290
|
+
|
291
|
+
use IO.copy_stream for Thread{Spawn,Pool} under 1.9
|
292
|
+
|
293
|
+
This should be faster for serving static files and proxying IO
|
294
|
+
objects such as sockets/pipes. Unfortunately we cannot use this
|
295
|
+
reliably with non-blocking frameworks since IO.copy_stream will
|
296
|
+
release the GVL to block on I/O (rather than yielding a fiber
|
297
|
+
or returning from a callback).
|
279
298
|
|
280
|
-
|
281
|
-
responses, vastly improving compatibility with existing
|
282
|
-
async_sinatra apps.
|
299
|
+
Can't do HTTP/1.1 Range support, though :/
|
283
300
|
|
284
|
-
commit
|
301
|
+
commit 77f1e141e75f27b81bef5c3bddd01948d6236ebf
|
285
302
|
Author: Eric Wong <normalperson@yhbt.net>
|
286
|
-
Date:
|
303
|
+
Date: Sat Apr 17 10:33:43 2010 -0700
|
287
304
|
|
288
|
-
|
305
|
+
http_response: split out header stringification code
|
289
306
|
|
290
|
-
|
307
|
+
This will make it easier to use body#to_path if possible since
|
308
|
+
some concurrency models like EventMachine have optimized code
|
309
|
+
paths for serving static files.
|
291
310
|
|
292
|
-
commit
|
311
|
+
commit b07004fc79867ba8f0cacde1508fb1e4fbf4c37d
|
293
312
|
Author: Eric Wong <normalperson@yhbt.net>
|
294
|
-
Date:
|
313
|
+
Date: Fri Apr 2 01:49:39 2010 -0700
|
295
314
|
|
296
|
-
|
315
|
+
rainbows/http_*: remove unnecessary circular requires
|
297
316
|
|
298
|
-
|
299
|
-
|
300
|
-
module. Thanks to James Tucker for bringing this to our
|
301
|
-
attention.
|
317
|
+
http_response and http_server are never NOT loaded when
|
318
|
+
"rainbows" is required.
|
302
319
|
|
303
|
-
commit
|
320
|
+
commit e0f9fb7cb8d8d47c68a9ebb0cb391d5880ca66d1
|
304
321
|
Author: Eric Wong <normalperson@yhbt.net>
|
305
|
-
Date:
|
322
|
+
Date: Fri Apr 2 01:32:40 2010 -0700
|
306
323
|
|
307
|
-
|
324
|
+
use duck typing for REMOTE_ADDR detection
|
308
325
|
|
309
|
-
|
310
|
-
|
326
|
+
This gives us the option to use non-TCPSocket-derived
|
327
|
+
IO-ish objects in the future, whatever that may be...
|
311
328
|
|
312
|
-
commit
|
329
|
+
commit b04d465d65f896290d36538181d91dd264d10575
|
313
330
|
Author: Eric Wong <normalperson@yhbt.net>
|
314
|
-
Date:
|
331
|
+
Date: Sun Mar 28 17:35:10 2010 -0700
|
315
332
|
|
316
|
-
|
333
|
+
cleanup: avoid redundant REMOTE_ADDR logic
|
317
334
|
|
318
|
-
|
319
|
-
to[1]) translate to a non-blocking accept(2) system call that may
|
320
|
-
wake up threads/processes unnecessarily. Unfortunately, we
|
321
|
-
failed to trap and ignore EAGAIN in those cases.
|
335
|
+
Every concurrency model does this the same way.
|
322
336
|
|
323
|
-
This
|
324
|
-
|
325
|
-
|
326
|
-
|
337
|
+
This removes the Rainbows::Const::LOCALHOST constant and
|
338
|
+
may break some existing apps that rely on it.
|
339
|
+
|
340
|
+
commit 12a4c53a47bb0c7bef5e2df732fa02532a969a54
|
341
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
342
|
+
Date: Sun Mar 28 17:04:36 2010 -0700
|
343
|
+
|
344
|
+
fiber/base: do not modify hash during iteration (1.9.2dev)
|
327
345
|
|
328
|
-
|
329
|
-
|
330
|
-
commit ee7fe220ccbc991e1e7cbe982caf48e3303274c7
|
331
|
-
(and commit 451ca6997b4f298b436605b7f0af75f369320425)
|
346
|
+
It's generally dangerous to do so regardless of language and
|
347
|
+
Ruby 1.9.2dev is stricter about this sort of behaviour.
|
332
348
|
|
333
|
-
commit
|
349
|
+
commit 801ea41a8f183785827f659fd4c1d49189797f58
|
334
350
|
Author: Eric Wong <normalperson@yhbt.net>
|
335
|
-
Date:
|
351
|
+
Date: Sun Mar 28 16:17:08 2010 -0700
|
336
352
|
|
337
|
-
|
353
|
+
local.mk.sample: bump neverblock test dep to 0.1.6.2
|
338
354
|
|
339
|
-
|
340
|
-
|
341
|
-
is bad.
|
355
|
+
It continues to work with the old espace version from GitHub
|
356
|
+
repos, too.
|
342
357
|
|
343
|
-
commit
|
358
|
+
commit 4619d902fb16f8eca76ea45948849490238879f9
|
344
359
|
Author: Eric Wong <normalperson@yhbt.net>
|
345
|
-
Date:
|
360
|
+
Date: Fri Mar 26 20:00:18 2010 -0700
|
346
361
|
|
347
|
-
|
362
|
+
async_examples/async_app: avoid needless UTF-8
|
348
363
|
|
349
|
-
Unicorn
|
364
|
+
Unicorn stopped reading all config.ru files as binary
|
365
|
+
starting with 0.97.0 for compatibility with rackup(1),
|
366
|
+
so systems that defaulted to US-ASCII encoding would
|
367
|
+
have trouble running this.
|
data/DEPLOY
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
= Deploying \Rainbows!
|
2
2
|
|
3
|
+
== \Rainbows! only
|
4
|
+
|
5
|
+
For the daring, you should consider deploying \Rainbows! in a standalone
|
6
|
+
configuration. This will be more highly recommended as \Rainbows!
|
7
|
+
stabilizes, especially if static file performance improves (or you don't
|
8
|
+
need them).
|
9
|
+
|
10
|
+
You will need to do this to support things like BOSH or do real-time
|
11
|
+
processing of the request body as it is being uploaded.
|
12
|
+
|
13
|
+
In this case, haproxy or any similar (non-request-body-buffering) load
|
14
|
+
balancer should be used to balance requests between different machines.
|
15
|
+
|
3
16
|
== nginx proxying to \Rainbows! or Unicorn
|
4
17
|
|
5
18
|
For high-traffic applications, routing slow actions to \Rainbows! with
|
@@ -15,19 +28,6 @@ can forward fast actions to Unicorn.
|
|
15
28
|
Be sure to set <tt>proxy_buffering off</tt> in nginx for "slow actions"
|
16
29
|
if you have Comet applications (but not for Unicorn).
|
17
30
|
|
18
|
-
== \Rainbows! only
|
19
|
-
|
20
|
-
For the daring (or low-traffic sites), you should consider deploying
|
21
|
-
\Rainbows! in a standalone configuration. This will be more highly
|
22
|
-
recommended as \Rainbows! stabilizes, especially if static file
|
23
|
-
performance improves (or you don't need them).
|
24
|
-
|
25
|
-
You will need to do this to support things like BOSH or do real-time
|
26
|
-
processing of the request body as it is being uploaded.
|
27
|
-
|
28
|
-
In this case, haproxy or any similar (non-request-body-buffering) load
|
29
|
-
balancer should be used to balance requests between different machines.
|
30
|
-
|
31
31
|
== Denial-of-Service Concerns
|
32
32
|
|
33
33
|
Since \Rainbows! is designed to talk to slow clients with long-held
|