unicorn 2.0.0pre2.4.gf202 → 2.0.0pre3
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/GIT-VERSION-GEN +1 -1
- data/lib/unicorn/const.rb +2 -2
- data/lib/unicorn/preread_input.rb +30 -0
- data/script/isolate_for_tests +1 -1
- data/t/preread_input.ru +17 -0
- data/t/t9000-preread-input.sh +48 -0
- data/unicorn.gemspec +1 -1
- metadata +11 -9
data/GIT-VERSION-GEN
CHANGED
data/lib/unicorn/const.rb
CHANGED
@@ -7,8 +7,8 @@
|
|
7
7
|
# improve things much compared to constants.
|
8
8
|
module Unicorn::Const
|
9
9
|
|
10
|
-
# The current version of Unicorn, currently 2.0.
|
11
|
-
UNICORN_VERSION = "2.0.
|
10
|
+
# The current version of Unicorn, currently 2.0.0pre3
|
11
|
+
UNICORN_VERSION = "2.0.0pre3"
|
12
12
|
|
13
13
|
# default TCP listen host address (0.0.0.0, all interfaces)
|
14
14
|
DEFAULT_HOST = "0.0.0.0"
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- encoding: binary -*-
|
2
|
+
|
3
|
+
module Unicorn
|
4
|
+
# This middleware is used to ensure input is buffered to memory
|
5
|
+
# or disk (depending on size) before the application is dispatched
|
6
|
+
# by entirely consuming it (from TeeInput) beforehand.
|
7
|
+
#
|
8
|
+
# Usage (in config.ru):
|
9
|
+
#
|
10
|
+
# require 'unicorn/preread_input'
|
11
|
+
# if defined?(Unicorn)
|
12
|
+
# use Unicorn::PrereadInput
|
13
|
+
# end
|
14
|
+
# run YourApp.new
|
15
|
+
class PrereadInput
|
16
|
+
def initialize(app)
|
17
|
+
@app = app
|
18
|
+
end
|
19
|
+
|
20
|
+
def call(env)
|
21
|
+
buf = ""
|
22
|
+
input = env["rack.input"]
|
23
|
+
if buf = input.read(16384)
|
24
|
+
true while input.read(16384, buf)
|
25
|
+
input.rewind
|
26
|
+
end
|
27
|
+
@app.call(env)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/script/isolate_for_tests
CHANGED
data/t/preread_input.ru
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#\-E none
|
2
|
+
require 'digest/sha1'
|
3
|
+
require 'unicorn/preread_input'
|
4
|
+
use Rack::ContentLength
|
5
|
+
use Rack::ContentType, "text/plain"
|
6
|
+
use Unicorn::PrereadInput
|
7
|
+
nr = 0
|
8
|
+
run lambda { |env|
|
9
|
+
$stderr.write "app dispatch: #{nr += 1}\n"
|
10
|
+
input = env["rack.input"]
|
11
|
+
dig = Digest::SHA1.new
|
12
|
+
while buf = input.read(16384)
|
13
|
+
dig.update(buf)
|
14
|
+
end
|
15
|
+
|
16
|
+
[ 200, {}, [ "#{dig.hexdigest}\n" ] ]
|
17
|
+
}
|
@@ -0,0 +1,48 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
. ./test-lib.sh
|
3
|
+
t_plan 9 "PrereadInput middleware tests"
|
4
|
+
|
5
|
+
t_begin "setup and start" && {
|
6
|
+
random_blob_sha1=$(rsha1 < random_blob)
|
7
|
+
unicorn_setup
|
8
|
+
unicorn -D -c $unicorn_config preread_input.ru
|
9
|
+
unicorn_wait_start
|
10
|
+
}
|
11
|
+
|
12
|
+
t_begin "single identity request" && {
|
13
|
+
curl -sSf -T random_blob http://$listen/ > $tmp
|
14
|
+
}
|
15
|
+
|
16
|
+
t_begin "sha1 matches" && {
|
17
|
+
test x"$(cat $tmp)" = x"$random_blob_sha1"
|
18
|
+
}
|
19
|
+
|
20
|
+
t_begin "single chunked request" && {
|
21
|
+
curl -sSf -T- < random_blob http://$listen/ > $tmp
|
22
|
+
}
|
23
|
+
|
24
|
+
t_begin "sha1 matches" && {
|
25
|
+
test x"$(cat $tmp)" = x"$random_blob_sha1"
|
26
|
+
}
|
27
|
+
|
28
|
+
t_begin "app only dispatched twice" && {
|
29
|
+
test 2 -eq "$(grep 'app dispatch:' < $r_err | wc -l )"
|
30
|
+
}
|
31
|
+
|
32
|
+
t_begin "aborted chunked request" && {
|
33
|
+
rm -f $tmp
|
34
|
+
curl -sSf -T- < $fifo http://$listen/ > $tmp &
|
35
|
+
curl_pid=$!
|
36
|
+
kill -9 $curl_pid
|
37
|
+
wait
|
38
|
+
}
|
39
|
+
|
40
|
+
t_begin "app only dispatched twice" && {
|
41
|
+
test 2 -eq "$(grep 'app dispatch:' < $r_err | wc -l )"
|
42
|
+
}
|
43
|
+
|
44
|
+
t_begin "killing succeeds" && {
|
45
|
+
kill -QUIT $unicorn_pid
|
46
|
+
}
|
47
|
+
|
48
|
+
t_done
|
data/unicorn.gemspec
CHANGED
@@ -48,7 +48,7 @@ Gem::Specification.new do |s|
|
|
48
48
|
# commented out. Nevertheless, upgrading to Rails 2.3.4 or later is
|
49
49
|
# *strongly* recommended for security reasons.
|
50
50
|
s.add_dependency(%q<rack>)
|
51
|
-
s.add_dependency(%q<kgio>, '~> 1.3.
|
51
|
+
s.add_dependency(%q<kgio>, '~> 1.3.1')
|
52
52
|
|
53
53
|
s.add_development_dependency('isolate', '~> 2.1.2')
|
54
54
|
|
metadata
CHANGED
@@ -1,15 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unicorn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: -766259860
|
5
5
|
prerelease: true
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
|
11
|
-
- gf202
|
12
|
-
version: 2.0.0pre2.4.gf202
|
9
|
+
- 0pre3
|
10
|
+
version: 2.0.0pre3
|
13
11
|
platform: ruby
|
14
12
|
authors:
|
15
13
|
- Unicorn hackers
|
@@ -17,7 +15,7 @@ autorequire:
|
|
17
15
|
bindir: bin
|
18
16
|
cert_chain: []
|
19
17
|
|
20
|
-
date: 2010-10-
|
18
|
+
date: 2010-10-09 00:00:00 +00:00
|
21
19
|
default_executable:
|
22
20
|
dependencies:
|
23
21
|
- !ruby/object:Gem::Dependency
|
@@ -42,12 +40,12 @@ dependencies:
|
|
42
40
|
requirements:
|
43
41
|
- - ~>
|
44
42
|
- !ruby/object:Gem::Version
|
45
|
-
hash:
|
43
|
+
hash: 25
|
46
44
|
segments:
|
47
45
|
- 1
|
48
46
|
- 3
|
49
|
-
-
|
50
|
-
version: 1.3.
|
47
|
+
- 1
|
48
|
+
version: 1.3.1
|
51
49
|
type: :runtime
|
52
50
|
version_requirements: *id002
|
53
51
|
- !ruby/object:Gem::Dependency
|
@@ -105,6 +103,7 @@ extra_rdoc_files:
|
|
105
103
|
- lib/unicorn/http_server.rb
|
106
104
|
- lib/unicorn/launcher.rb
|
107
105
|
- lib/unicorn/oob_gc.rb
|
106
|
+
- lib/unicorn/preread_input.rb
|
108
107
|
- lib/unicorn/socket_helper.rb
|
109
108
|
- lib/unicorn/tee_input.rb
|
110
109
|
- lib/unicorn/tmpio.rb
|
@@ -175,6 +174,7 @@ files:
|
|
175
174
|
- lib/unicorn/http_server.rb
|
176
175
|
- lib/unicorn/launcher.rb
|
177
176
|
- lib/unicorn/oob_gc.rb
|
177
|
+
- lib/unicorn/preread_input.rb
|
178
178
|
- lib/unicorn/socket_helper.rb
|
179
179
|
- lib/unicorn/tee_input.rb
|
180
180
|
- lib/unicorn/tmpio.rb
|
@@ -195,6 +195,7 @@ files:
|
|
195
195
|
- t/env.ru
|
196
196
|
- t/my-tap-lib.sh
|
197
197
|
- t/pid.ru
|
198
|
+
- t/preread_input.ru
|
198
199
|
- t/rails3-app/.gitignore
|
199
200
|
- t/rails3-app/Gemfile
|
200
201
|
- t/rails3-app/Rakefile
|
@@ -244,6 +245,7 @@ files:
|
|
244
245
|
- t/t0302-rails3-alt-working_directory.sh
|
245
246
|
- t/t0303-rails3-alt-working_directory_config.ru.sh
|
246
247
|
- t/t0304-rails3-alt-working_directory_no_embed_cli.sh
|
248
|
+
- t/t9000-preread-input.sh
|
247
249
|
- t/test-lib.sh
|
248
250
|
- t/test-rails3.sh
|
249
251
|
- test/aggregate.rb
|