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