rainbows 3.2.0 → 3.3.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 -0
- data/COPYING +617 -282
- data/Documentation/comparison.haml +81 -24
- data/FAQ +3 -0
- data/GIT-VERSION-GEN +1 -1
- data/LICENSE +14 -5
- data/README +10 -9
- data/Sandbox +25 -0
- data/TODO +2 -22
- data/lib/rainbows.rb +50 -49
- data/lib/rainbows/client.rb +6 -5
- data/lib/rainbows/configurator.rb +191 -37
- data/lib/rainbows/const.rb +1 -1
- data/lib/rainbows/coolio.rb +4 -1
- data/lib/rainbows/coolio/client.rb +2 -2
- data/lib/rainbows/coolio/heartbeat.rb +2 -1
- data/lib/rainbows/coolio_fiber_spawn.rb +12 -7
- data/lib/rainbows/coolio_thread_pool.rb +19 -10
- data/lib/rainbows/coolio_thread_spawn.rb +3 -0
- data/lib/rainbows/epoll.rb +27 -5
- data/lib/rainbows/epoll/client.rb +3 -3
- data/lib/rainbows/ev_core.rb +2 -1
- data/lib/rainbows/event_machine.rb +4 -0
- data/lib/rainbows/event_machine/client.rb +2 -1
- data/lib/rainbows/fiber.rb +5 -0
- data/lib/rainbows/fiber/base.rb +1 -0
- data/lib/rainbows/fiber/coolio/methods.rb +0 -1
- data/lib/rainbows/fiber/io.rb +10 -6
- data/lib/rainbows/fiber/io/pipe.rb +6 -1
- data/lib/rainbows/fiber/io/socket.rb +6 -1
- data/lib/rainbows/fiber_pool.rb +12 -7
- data/lib/rainbows/fiber_spawn.rb +11 -6
- data/lib/rainbows/http_server.rb +55 -59
- data/lib/rainbows/join_threads.rb +4 -0
- data/lib/rainbows/max_body.rb +29 -10
- data/lib/rainbows/never_block.rb +7 -10
- data/lib/rainbows/pool_size.rb +14 -0
- data/lib/rainbows/process_client.rb +23 -1
- data/lib/rainbows/queue_pool.rb +8 -6
- data/lib/rainbows/response.rb +12 -11
- data/lib/rainbows/revactor.rb +14 -7
- data/lib/rainbows/revactor/client.rb +2 -2
- data/lib/rainbows/stream_file.rb +11 -4
- data/lib/rainbows/thread_pool.rb +12 -28
- data/lib/rainbows/thread_spawn.rb +14 -13
- data/lib/rainbows/thread_timeout.rb +118 -30
- data/lib/rainbows/writer_thread_pool/client.rb +1 -1
- data/lib/rainbows/writer_thread_spawn/client.rb +2 -2
- data/lib/rainbows/xepoll.rb +13 -5
- data/lib/rainbows/xepoll/client.rb +19 -17
- data/lib/rainbows/xepoll_thread_pool.rb +82 -0
- data/lib/rainbows/xepoll_thread_pool/client.rb +129 -0
- data/lib/rainbows/xepoll_thread_spawn.rb +58 -0
- data/lib/rainbows/xepoll_thread_spawn/client.rb +121 -0
- data/pkg.mk +4 -0
- data/rainbows.gemspec +4 -1
- data/t/GNUmakefile +5 -1
- data/t/client_header_buffer_size.ru +5 -0
- data/t/simple-http_XEpollThreadPool.ru +10 -0
- data/t/simple-http_XEpollThreadSpawn.ru +10 -0
- data/t/t0022-copy_stream-byte-range.sh +1 -15
- data/t/t0026-splice-copy_stream-byte-range.sh +25 -0
- data/t/t0027-nil-copy_stream.sh +60 -0
- data/t/t0041-optional-pool-size.sh +2 -2
- data/t/t0042-client_header_buffer_size.sh +65 -0
- data/t/t9100-thread-timeout.sh +1 -6
- data/t/t9101-thread-timeout-threshold.sh +1 -6
- data/t/test-lib.sh +58 -0
- data/t/test_isolate.rb +9 -3
- metadata +47 -16
data/pkg.mk
CHANGED
@@ -167,5 +167,9 @@ doc_gz: docs = $(shell find doc -type f ! -regex '^.*\.\(gif\|jpg\|png\|gz\)$$')
|
|
167
167
|
doc_gz:
|
168
168
|
for i in $(docs); do \
|
169
169
|
gzip --rsyncable -9 < $$i > $$i.gz; touch -r $$i $$i.gz; done
|
170
|
+
check-warnings:
|
171
|
+
@(for i in $$(git ls-files '*.rb'|grep -v '^setup\.rb$$'); \
|
172
|
+
do $(RUBY) -d -W2 -c $$i; done) | grep -v '^Syntax OK$$' || :
|
170
173
|
|
171
174
|
.PHONY: all .FORCE-GIT-VERSION-FILE doc test $(test_units) manifest
|
175
|
+
.PHONY: check-warnings
|
data/rainbows.gemspec
CHANGED
@@ -24,8 +24,11 @@ Gem::Specification.new do |s|
|
|
24
24
|
# we want a newer Rack for a valid HeaderHash#each
|
25
25
|
s.add_dependency(%q<rack>, ['~> 1.1'])
|
26
26
|
|
27
|
+
# kgio has some fixes for MRI 1.9.3dev that affect us
|
28
|
+
s.add_dependency(%q<kgio>, ['~> 2.4'])
|
29
|
+
|
27
30
|
# we need Unicorn for the HTTP parser and process management
|
28
|
-
s.add_dependency(%q<unicorn>, ["~> 3.
|
31
|
+
s.add_dependency(%q<unicorn>, ["~> 3.6"])
|
29
32
|
s.add_development_dependency(%q<isolate>, "~> 3.0.0")
|
30
33
|
s.add_development_dependency(%q<wrongdoc>, "~> 1.5")
|
31
34
|
|
data/t/GNUmakefile
CHANGED
@@ -21,6 +21,8 @@ export RUBY_VERSION RUBY_ENGINE
|
|
21
21
|
|
22
22
|
ifeq (Linux,$(shell uname -s))
|
23
23
|
models += XEpoll
|
24
|
+
models += XEpollThreadSpawn
|
25
|
+
models += XEpollThreadPool
|
24
26
|
models += Epoll
|
25
27
|
endif
|
26
28
|
models += WriterThreadPool
|
@@ -35,7 +37,9 @@ ifeq ($(RUBY_ENGINE),ruby)
|
|
35
37
|
rp := )
|
36
38
|
ONENINE := $(shell case $(RUBY_VERSION) in 1.9.*$(rp) echo true;;esac)
|
37
39
|
ifeq ($(ONENINE),true)
|
38
|
-
|
40
|
+
ifeq ($(RUBY_VERSION),1.9.2)
|
41
|
+
models += Revactor
|
42
|
+
endif
|
39
43
|
models += FiberSpawn
|
40
44
|
models += FiberPool
|
41
45
|
models += CoolioThreadPool
|
@@ -1,21 +1,7 @@
|
|
1
1
|
#!/bin/sh
|
2
2
|
. ./test-lib.sh
|
3
3
|
test -r random_blob || die "random_blob required, run with 'make $0'"
|
4
|
-
|
5
|
-
1.9.*) ;;
|
6
|
-
*)
|
7
|
-
t_info "skipping $T since it can't IO.copy_stream"
|
8
|
-
exit 0
|
9
|
-
;;
|
10
|
-
esac
|
11
|
-
|
12
|
-
case $model in
|
13
|
-
ThreadSpawn|WriterThreadSpawn|ThreadPool|WriterThreadPool|Base) ;;
|
14
|
-
*)
|
15
|
-
t_info "skipping $T since it doesn't use IO.copy_stream"
|
16
|
-
exit 0
|
17
|
-
;;
|
18
|
-
esac
|
4
|
+
check_copy_stream
|
19
5
|
|
20
6
|
t_plan 13 "IO.copy_stream byte range response for $model"
|
21
7
|
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
. ./test-lib.sh
|
3
|
+
test -r random_blob || die "random_blob required, run with 'make $0'"
|
4
|
+
check_copy_stream
|
5
|
+
check_splice
|
6
|
+
|
7
|
+
t_plan 13 "IO::Splice.copy_stream byte range response for $model"
|
8
|
+
|
9
|
+
t_begin "setup and startup" && {
|
10
|
+
rtmpfiles out err
|
11
|
+
rainbows_setup $model
|
12
|
+
cat >> $unicorn_config <<EOF
|
13
|
+
require "io/splice"
|
14
|
+
Rainbows! do
|
15
|
+
copy_stream IO::Splice
|
16
|
+
end
|
17
|
+
def (::IO).copy_stream(*x); abort "NO"; end
|
18
|
+
EOF
|
19
|
+
|
20
|
+
# can't load Rack::Lint here since it clobbers body#to_path
|
21
|
+
rainbows -E none -D large-file-response.ru -c $unicorn_config
|
22
|
+
rainbows_wait_start
|
23
|
+
}
|
24
|
+
|
25
|
+
. ./byte-range-common.sh
|
@@ -0,0 +1,60 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
. ./test-lib.sh
|
3
|
+
test -r random_blob || die "random_blob required, run with 'make $0'"
|
4
|
+
check_copy_stream
|
5
|
+
|
6
|
+
t_plan 7 "large file 'copy_stream nil' test for $model"
|
7
|
+
|
8
|
+
t_begin "setup and startup" && {
|
9
|
+
rtmpfiles curl_out
|
10
|
+
rainbows_setup $model
|
11
|
+
cat >> $unicorn_config <<EOF
|
12
|
+
Rainbows! do
|
13
|
+
copy_stream nil
|
14
|
+
end
|
15
|
+
EOF
|
16
|
+
rainbows -E none -D large-file-response.ru -c $unicorn_config
|
17
|
+
rainbows_wait_start
|
18
|
+
}
|
19
|
+
|
20
|
+
t_begin "read random blob sha1 and size" && {
|
21
|
+
random_blob_sha1=$(rsha1 < random_blob)
|
22
|
+
random_blob_size=$(wc -c < random_blob)
|
23
|
+
}
|
24
|
+
|
25
|
+
t_begin "send a series HTTP/1.1 requests sequentially" && {
|
26
|
+
for i in a b c
|
27
|
+
do
|
28
|
+
sha1=$( (curl -sSfv http://$listen/random_blob &&
|
29
|
+
echo ok >$ok) | rsha1)
|
30
|
+
test $sha1 = $random_blob_sha1
|
31
|
+
test xok = x$(cat $ok)
|
32
|
+
done
|
33
|
+
}
|
34
|
+
|
35
|
+
# this was a problem during development
|
36
|
+
t_begin "HTTP/1.0 test" && {
|
37
|
+
sha1=$( (curl -0 -sSfv http://$listen/random_blob &&
|
38
|
+
echo ok >$ok) | rsha1)
|
39
|
+
test $sha1 = $random_blob_sha1
|
40
|
+
test xok = x$(cat $ok)
|
41
|
+
}
|
42
|
+
|
43
|
+
t_begin "HTTP/0.9 test" && {
|
44
|
+
(
|
45
|
+
printf 'GET /random_blob\r\n'
|
46
|
+
rsha1 < $fifo > $tmp &
|
47
|
+
wait
|
48
|
+
echo ok > $ok
|
49
|
+
) | socat - TCP:$listen > $fifo
|
50
|
+
test $(cat $tmp) = $random_blob_sha1
|
51
|
+
test xok = x$(cat $ok)
|
52
|
+
}
|
53
|
+
|
54
|
+
t_begin "shutdown server" && {
|
55
|
+
kill -QUIT $rainbows_pid
|
56
|
+
}
|
57
|
+
|
58
|
+
t_begin "check stderr" && check_stderr
|
59
|
+
|
60
|
+
t_done
|
@@ -2,9 +2,9 @@
|
|
2
2
|
. ./test-lib.sh
|
3
3
|
|
4
4
|
case $model in
|
5
|
-
NeverBlock|CoolioThreadPool) ;;
|
5
|
+
NeverBlock|CoolioThreadPool|XEpollThreadPool) ;;
|
6
6
|
*)
|
7
|
-
t_info "skipping $T since it doesn't support :pool_size"
|
7
|
+
t_info "skipping $model.$T since it doesn't support :pool_size"
|
8
8
|
exit
|
9
9
|
;;
|
10
10
|
esac
|
@@ -0,0 +1,65 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
. ./test-lib.sh
|
3
|
+
|
4
|
+
t_plan 8 "client_header_buffer_size tests for $model"
|
5
|
+
|
6
|
+
t_begin "setup and startup" && {
|
7
|
+
rainbows_setup $model
|
8
|
+
}
|
9
|
+
|
10
|
+
t_begin "fails with zero buffer size" && {
|
11
|
+
ed -s $unicorn_config <<EOF
|
12
|
+
,s/^ client_max_body_size.*/ client_header_buffer_size 0/
|
13
|
+
w
|
14
|
+
EOF
|
15
|
+
grep "client_header_buffer_size 0" $unicorn_config
|
16
|
+
rainbows -D client_header_buffer_size.ru -c $unicorn_config || \
|
17
|
+
echo err=$? > $ok
|
18
|
+
test x"$(cat $ok)" = "xerr=1"
|
19
|
+
}
|
20
|
+
|
21
|
+
t_begin "fails with negative value" && {
|
22
|
+
ed -s $unicorn_config <<EOF
|
23
|
+
,s/^ client_header_buffer_size.*/ client_header_buffer_size -1/
|
24
|
+
w
|
25
|
+
EOF
|
26
|
+
grep "client_header_buffer_size -1" $unicorn_config
|
27
|
+
rainbows -D client_header_buffer_size.ru -c $unicorn_config || \
|
28
|
+
echo err=$? > $ok
|
29
|
+
test x"$(cat $ok)" = "xerr=1"
|
30
|
+
}
|
31
|
+
|
32
|
+
t_begin "fails with negative value" && {
|
33
|
+
ed -s $unicorn_config <<EOF
|
34
|
+
,s/^ client_header_buffer_size.*/ client_header_buffer_size -1/
|
35
|
+
w
|
36
|
+
EOF
|
37
|
+
grep "client_header_buffer_size -1" $unicorn_config
|
38
|
+
rainbows -D client_header_buffer_size.ru -c $unicorn_config || \
|
39
|
+
echo err=$? > $ok
|
40
|
+
test x"$(cat $ok)" = "xerr=1"
|
41
|
+
}
|
42
|
+
|
43
|
+
t_begin "starts with correct value" && {
|
44
|
+
ed -s $unicorn_config <<EOF
|
45
|
+
,s/^ client_header_buffer_size.*/ client_header_buffer_size 16399/
|
46
|
+
w
|
47
|
+
EOF
|
48
|
+
grep "client_header_buffer_size 16399" $unicorn_config
|
49
|
+
rainbows -D client_header_buffer_size.ru -c $unicorn_config
|
50
|
+
rainbows_wait_start
|
51
|
+
}
|
52
|
+
|
53
|
+
t_begin "regular TCP request works right" && {
|
54
|
+
test x$(curl -sSfv http://$listen/) = x16399
|
55
|
+
}
|
56
|
+
|
57
|
+
t_begin "no errors in stderr" && {
|
58
|
+
check_stderr
|
59
|
+
}
|
60
|
+
|
61
|
+
t_begin "shutdown" && {
|
62
|
+
kill $rainbows_pid
|
63
|
+
}
|
64
|
+
|
65
|
+
t_done
|
data/t/t9100-thread-timeout.sh
CHANGED
@@ -1,11 +1,6 @@
|
|
1
1
|
#!/bin/sh
|
2
2
|
. ./test-lib.sh
|
3
|
-
|
4
|
-
ThreadSpawn|ThreadPool) ;;
|
5
|
-
RevThreadSpawn|RevThreadPool) ;;
|
6
|
-
CoolioThreadSpawn|CoolioThreadPool) ;;
|
7
|
-
*) t_info "$0 is only compatible with Thread*"; exit 0 ;;
|
8
|
-
esac
|
3
|
+
check_threaded_app_dispatch
|
9
4
|
|
10
5
|
t_plan 6 "ThreadTimeout Rack middleware test for $model"
|
11
6
|
|
@@ -1,11 +1,6 @@
|
|
1
1
|
#!/bin/sh
|
2
2
|
. ./test-lib.sh
|
3
|
-
|
4
|
-
ThreadSpawn|ThreadPool) ;;
|
5
|
-
RevThreadSpawn|RevThreadPool) ;;
|
6
|
-
CoolioThreadSpawn|CoolioThreadPool) ;;
|
7
|
-
*) t_info "$0 is only compatible with Thread*"; exit 0 ;;
|
8
|
-
esac
|
3
|
+
check_threaded_app_dispatch
|
9
4
|
|
10
5
|
t_plan 6 "ThreadTimeout Rack middleware test for $model"
|
11
6
|
|
data/t/test-lib.sh
CHANGED
@@ -198,6 +198,64 @@ req_curl_chunked_upload_err_check () {
|
|
198
198
|
fi
|
199
199
|
}
|
200
200
|
|
201
|
+
check_splice () {
|
202
|
+
case $(uname -s) in
|
203
|
+
Linux) ;;
|
204
|
+
*)
|
205
|
+
t_info "skipping $T since it's not Linux"
|
206
|
+
exit 0
|
207
|
+
;;
|
208
|
+
esac
|
209
|
+
|
210
|
+
# we only allow splice on 2.6.32+
|
211
|
+
min=32 uname_r=$(uname -r)
|
212
|
+
case $uname_r in
|
213
|
+
2.6.*)
|
214
|
+
sub=$(expr "$uname_r" : '2\.6\.\(.*\)$')
|
215
|
+
if test $sub -lt $min
|
216
|
+
then
|
217
|
+
t_info "skipping $T (Linux $(uname_r < 2.6.$min)"
|
218
|
+
exit 0
|
219
|
+
fi
|
220
|
+
;;
|
221
|
+
*)
|
222
|
+
t_info "skipping $T (Linux $uname_r < 2.6.$min)"
|
223
|
+
exit 0
|
224
|
+
;;
|
225
|
+
esac
|
226
|
+
}
|
227
|
+
|
228
|
+
check_threaded_app_dispatch () {
|
229
|
+
case $model in
|
230
|
+
ThreadSpawn|ThreadPool) ;;
|
231
|
+
RevThreadSpawn|RevThreadPool) ;;
|
232
|
+
CoolioThreadSpawn|CoolioThreadPool) ;;
|
233
|
+
XEpollThreadSpawn|XEpollThreadPool) ;;
|
234
|
+
*)
|
235
|
+
t_info "$0 is only compatible with threaded app dispatch"
|
236
|
+
exit 0 ;;
|
237
|
+
esac
|
238
|
+
}
|
239
|
+
|
240
|
+
check_copy_stream () {
|
241
|
+
case $RUBY_VERSION in
|
242
|
+
1.9.*) ;;
|
243
|
+
*)
|
244
|
+
t_info "skipping $T since it can't IO.copy_stream"
|
245
|
+
exit 0
|
246
|
+
;;
|
247
|
+
esac
|
248
|
+
|
249
|
+
case $model in
|
250
|
+
ThreadSpawn|WriterThreadSpawn|ThreadPool|WriterThreadPool|Base) ;;
|
251
|
+
XEpollThreadSpawn|XEpollThreadPool) ;;
|
252
|
+
*)
|
253
|
+
t_info "skipping $T since it doesn't use copy_stream"
|
254
|
+
exit 0
|
255
|
+
;;
|
256
|
+
esac
|
257
|
+
}
|
258
|
+
|
201
259
|
case $model in
|
202
260
|
Rev) require_check rev Rev::VERSION ;;
|
203
261
|
Coolio) require_check coolio Coolio::VERSION ;;
|
data/t/test_isolate.rb
CHANGED
@@ -16,9 +16,10 @@ $stdout.reopen($stderr)
|
|
16
16
|
lock = File.open(__FILE__, "rb")
|
17
17
|
lock.flock(File::LOCK_EX)
|
18
18
|
Isolate.now!(opts) do
|
19
|
-
gem '
|
19
|
+
gem 'kgio', '2.4.0'
|
20
|
+
gem 'unicorn', '3.6.2'
|
20
21
|
gem 'kcar', '0.2.0'
|
21
|
-
gem 'raindrops', '0.
|
22
|
+
gem 'raindrops', '0.6.1'
|
22
23
|
|
23
24
|
if engine == "ruby"
|
24
25
|
gem 'sendfile', '1.1.0' # next Rubinius should support this
|
@@ -36,7 +37,12 @@ Isolate.now!(opts) do
|
|
36
37
|
gem 'rack-fiber_pool', '0.9.1'
|
37
38
|
end
|
38
39
|
|
39
|
-
|
40
|
+
if RUBY_PLATFORM =~ /linux/
|
41
|
+
gem 'sleepy_penguin', '2.0.0'
|
42
|
+
|
43
|
+
# is 2.6.32 new enough?
|
44
|
+
gem 'io_splice', '4.1.0' if `uname -r`.strip > '2.6.32'
|
45
|
+
end
|
40
46
|
end
|
41
47
|
|
42
48
|
$stdout.reopen(old_out)
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rainbows
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 11
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 3
|
8
|
-
-
|
8
|
+
- 3
|
9
9
|
- 0
|
10
|
-
version: 3.
|
10
|
+
version: 3.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Rainbows! hackers
|
@@ -15,8 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
19
|
-
default_executable:
|
18
|
+
date: 2011-05-16 00:00:00 Z
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
21
|
name: rack
|
@@ -34,24 +33,39 @@ dependencies:
|
|
34
33
|
type: :runtime
|
35
34
|
version_requirements: *id001
|
36
35
|
- !ruby/object:Gem::Dependency
|
37
|
-
name:
|
36
|
+
name: kgio
|
38
37
|
prerelease: false
|
39
38
|
requirement: &id002 !ruby/object:Gem::Requirement
|
40
39
|
none: false
|
41
40
|
requirements:
|
42
41
|
- - ~>
|
43
42
|
- !ruby/object:Gem::Version
|
44
|
-
hash:
|
43
|
+
hash: 11
|
45
44
|
segments:
|
46
|
-
-
|
47
|
-
-
|
48
|
-
version: "
|
45
|
+
- 2
|
46
|
+
- 4
|
47
|
+
version: "2.4"
|
49
48
|
type: :runtime
|
50
49
|
version_requirements: *id002
|
51
50
|
- !ruby/object:Gem::Dependency
|
52
|
-
name:
|
51
|
+
name: unicorn
|
53
52
|
prerelease: false
|
54
53
|
requirement: &id003 !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ~>
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
hash: 11
|
59
|
+
segments:
|
60
|
+
- 3
|
61
|
+
- 6
|
62
|
+
version: "3.6"
|
63
|
+
type: :runtime
|
64
|
+
version_requirements: *id003
|
65
|
+
- !ruby/object:Gem::Dependency
|
66
|
+
name: isolate
|
67
|
+
prerelease: false
|
68
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
55
69
|
none: false
|
56
70
|
requirements:
|
57
71
|
- - ~>
|
@@ -63,11 +77,11 @@ dependencies:
|
|
63
77
|
- 0
|
64
78
|
version: 3.0.0
|
65
79
|
type: :development
|
66
|
-
version_requirements: *
|
80
|
+
version_requirements: *id004
|
67
81
|
- !ruby/object:Gem::Dependency
|
68
82
|
name: wrongdoc
|
69
83
|
prerelease: false
|
70
|
-
requirement: &
|
84
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
71
85
|
none: false
|
72
86
|
requirements:
|
73
87
|
- - ~>
|
@@ -78,7 +92,7 @@ dependencies:
|
|
78
92
|
- 5
|
79
93
|
version: "1.5"
|
80
94
|
type: :development
|
81
|
-
version_requirements: *
|
95
|
+
version_requirements: *id005
|
82
96
|
description: |-
|
83
97
|
\Rainbows! is an HTTP server for sleepy Rack applications. It is based on
|
84
98
|
Unicorn, but designed to handle applications that expect long
|
@@ -156,6 +170,7 @@ extra_rdoc_files:
|
|
156
170
|
- lib/rainbows/never_block.rb
|
157
171
|
- lib/rainbows/never_block/core.rb
|
158
172
|
- lib/rainbows/never_block/event_machine.rb
|
173
|
+
- lib/rainbows/pool_size.rb
|
159
174
|
- lib/rainbows/process_client.rb
|
160
175
|
- lib/rainbows/queue_pool.rb
|
161
176
|
- lib/rainbows/response.rb
|
@@ -189,6 +204,10 @@ extra_rdoc_files:
|
|
189
204
|
- lib/rainbows/writer_thread_spawn/client.rb
|
190
205
|
- lib/rainbows/xepoll.rb
|
191
206
|
- lib/rainbows/xepoll/client.rb
|
207
|
+
- lib/rainbows/xepoll_thread_pool.rb
|
208
|
+
- lib/rainbows/xepoll_thread_pool/client.rb
|
209
|
+
- lib/rainbows/xepoll_thread_spawn.rb
|
210
|
+
- lib/rainbows/xepoll_thread_spawn/client.rb
|
192
211
|
- LATEST
|
193
212
|
- LICENSE
|
194
213
|
- NEWS
|
@@ -200,6 +219,7 @@ extra_rdoc_files:
|
|
200
219
|
- Summary
|
201
220
|
- Test_Suite
|
202
221
|
- Static_Files
|
222
|
+
- Sandbox
|
203
223
|
files:
|
204
224
|
- .document
|
205
225
|
- .gitignore
|
@@ -223,6 +243,7 @@ files:
|
|
223
243
|
- README
|
224
244
|
- Rakefile
|
225
245
|
- SIGNALS
|
246
|
+
- Sandbox
|
226
247
|
- Static_Files
|
227
248
|
- Summary
|
228
249
|
- TODO
|
@@ -294,6 +315,7 @@ files:
|
|
294
315
|
- lib/rainbows/never_block.rb
|
295
316
|
- lib/rainbows/never_block/core.rb
|
296
317
|
- lib/rainbows/never_block/event_machine.rb
|
318
|
+
- lib/rainbows/pool_size.rb
|
297
319
|
- lib/rainbows/process_client.rb
|
298
320
|
- lib/rainbows/queue_pool.rb
|
299
321
|
- lib/rainbows/response.rb
|
@@ -327,6 +349,10 @@ files:
|
|
327
349
|
- lib/rainbows/writer_thread_spawn/client.rb
|
328
350
|
- lib/rainbows/xepoll.rb
|
329
351
|
- lib/rainbows/xepoll/client.rb
|
352
|
+
- lib/rainbows/xepoll_thread_pool.rb
|
353
|
+
- lib/rainbows/xepoll_thread_pool/client.rb
|
354
|
+
- lib/rainbows/xepoll_thread_spawn.rb
|
355
|
+
- lib/rainbows/xepoll_thread_spawn/client.rb
|
330
356
|
- local.mk.sample
|
331
357
|
- man/man1/rainbows.1
|
332
358
|
- pkg.mk
|
@@ -348,6 +374,7 @@ files:
|
|
348
374
|
- t/bin/unused_listen
|
349
375
|
- t/bin/utee
|
350
376
|
- t/byte-range-common.sh
|
377
|
+
- t/client_header_buffer_size.ru
|
351
378
|
- t/close-has-env.ru
|
352
379
|
- t/close-pipe-response.ru
|
353
380
|
- t/close-pipe-to_path-response.ru
|
@@ -388,6 +415,8 @@ files:
|
|
388
415
|
- t/simple-http_WriterThreadPool.ru
|
389
416
|
- t/simple-http_WriterThreadSpawn.ru
|
390
417
|
- t/simple-http_XEpoll.ru
|
418
|
+
- t/simple-http_XEpollThreadPool.ru
|
419
|
+
- t/simple-http_XEpollThreadSpawn.ru
|
391
420
|
- t/sleep.ru
|
392
421
|
- t/t0000-simple-http.sh
|
393
422
|
- t/t0000.ru
|
@@ -419,6 +448,8 @@ files:
|
|
419
448
|
- t/t0023-sendfile-byte-range.sh
|
420
449
|
- t/t0024-pipelined-sendfile-response.sh
|
421
450
|
- t/t0025-write-on-close.sh
|
451
|
+
- t/t0026-splice-copy_stream-byte-range.sh
|
452
|
+
- t/t0027-nil-copy_stream.sh
|
422
453
|
- t/t0030-fast-pipe-response.sh
|
423
454
|
- t/t0031-close-pipe-response.sh
|
424
455
|
- t/t0032-close-pipe-to_path-response.sh
|
@@ -426,6 +457,7 @@ files:
|
|
426
457
|
- t/t0035-kgio-pipe-response.sh
|
427
458
|
- t/t0040-keepalive_requests-setting.sh
|
428
459
|
- t/t0041-optional-pool-size.sh
|
460
|
+
- t/t0042-client_header_buffer_size.sh
|
429
461
|
- t/t0050-response-body-close-has-env.sh
|
430
462
|
- t/t0100-rack-input-hammer-chunked.sh
|
431
463
|
- t/t0100-rack-input-hammer-content-length.sh
|
@@ -468,7 +500,6 @@ files:
|
|
468
500
|
- t/worker-follows-master-to-death.ru
|
469
501
|
- t/write-on-close.ru
|
470
502
|
- vs_Unicorn
|
471
|
-
has_rdoc: true
|
472
503
|
homepage: http://rainbows.rubyforge.org/
|
473
504
|
licenses: []
|
474
505
|
|
@@ -501,7 +532,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
501
532
|
requirements: []
|
502
533
|
|
503
534
|
rubyforge_project: rainbows
|
504
|
-
rubygems_version: 1.
|
535
|
+
rubygems_version: 1.8.2
|
505
536
|
signing_key:
|
506
537
|
specification_version: 3
|
507
538
|
summary: "- Unicorn for sleepy apps and slow clients"
|