thin 0.8.2 → 1.0.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.
Potentially problematic release.
This version of thin might be problematic. Click here for more details.
- data/CHANGELOG +15 -0
- data/README +1 -1
- data/example/adapter.rb +2 -5
- data/example/config.ru +2 -5
- data/example/vlad.rake +6 -3
- data/lib/rack/adapter/loader.rb +27 -23
- data/lib/rack/adapter/rails.rb +9 -3
- data/lib/thin/backends/base.rb +13 -3
- data/lib/thin/command.rb +7 -5
- data/lib/thin/connection.rb +68 -28
- data/lib/thin/controllers/controller.rb +2 -1
- data/lib/thin/daemonizing.rb +25 -20
- data/lib/thin/headers.rb +8 -0
- data/lib/thin/logging.rb +28 -23
- data/lib/thin/request.rb +32 -32
- data/lib/thin/response.rb +22 -19
- data/lib/thin/runner.rb +14 -7
- data/lib/thin/server.rb +6 -2
- data/lib/thin/stats.rb +1 -4
- data/lib/thin/version.rb +4 -4
- data/lib/thin.rb +1 -0
- data/spec/backends/tcp_server_spec.rb +11 -0
- data/spec/command_spec.rb +7 -1
- data/spec/daemonizing_spec.rb +17 -0
- data/spec/headers_spec.rb +11 -0
- data/spec/logging_spec.rb +6 -2
- data/spec/rack/rails_adapter_spec.rb +10 -8
- data/spec/request/parser_spec.rb +1 -1
- data/spec/response_spec.rb +7 -0
- data/spec/runner_spec.rb +22 -3
- data/spec/server/pipelining_spec.rb +1 -1
- data/spec/server/robustness_spec.rb +1 -1
- data/spec/server/stopping_spec.rb +1 -1
- data/spec/server/swiftiply_spec.rb +1 -1
- data/spec/server/tcp_spec.rb +18 -7
- data/spec/server/threaded_spec.rb +1 -1
- data/spec/server/unix_socket_spec.rb +1 -1
- data/spec/spec_helper.rb +10 -0
- data/tasks/announce.rake +1 -1
- data/tasks/deploy.rake +2 -2
- data/tasks/email.erb +0 -4
- data/tasks/gem.rake +2 -2
- metadata +6 -4
- data/lib/thin_parser.bundle +0 -0
@@ -12,7 +12,7 @@ else
|
|
12
12
|
sleep 2 # HACK ooh boy, I wish I knew how to make those specs more stable...
|
13
13
|
start_server('0.0.0.0', 5555, :backend => Backends::SwiftiplyClient, :wait_for_socket => false) do |env|
|
14
14
|
body = env.inspect + env['rack.input'].read
|
15
|
-
[200, { 'Content-Type' => 'text/html'
|
15
|
+
[200, { 'Content-Type' => 'text/html' }, body]
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
data/spec/server/tcp_spec.rb
CHANGED
@@ -4,19 +4,30 @@ describe Server, 'on TCP socket' do
|
|
4
4
|
before do
|
5
5
|
start_server do |env|
|
6
6
|
body = env.inspect + env['rack.input'].read
|
7
|
-
[200, { 'Content-Type' => 'text/html'
|
7
|
+
[200, { 'Content-Type' => 'text/html' }, body]
|
8
8
|
end
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
it 'should GET from Net::HTTP' do
|
12
12
|
get('/?cthis').should include('cthis')
|
13
13
|
end
|
14
14
|
|
15
15
|
it 'should GET from TCPSocket' do
|
16
|
-
send_data("GET /?this HTTP/1.
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
status, headers, body = parse_response(send_data("GET /?this HTTP/1.0\r\nConnection: close\r\n\r\n"))
|
17
|
+
status.should == 200
|
18
|
+
headers['Content-Type'].should == 'text/html'
|
19
|
+
headers['Connection'].should == 'close'
|
20
|
+
body.should include('this')
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should add the Content-Length to the response when not present" do
|
24
|
+
status, headers, body = parse_response(send_data("GET / HTTP/1.0\r\nConnection: close\r\n\r\n"))
|
25
|
+
headers.should have_key('Content-Length')
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should set the Content-Length to equal the body size in bytes' do
|
29
|
+
status, headers, body = parse_response(send_data("GET / HTTP/1.0\r\nConnection: close\r\n\r\n"))
|
30
|
+
headers['Content-Length'].should == (body.respond_to?(:bytesize) ? body.bytesize : body.size).to_s
|
20
31
|
end
|
21
32
|
|
22
33
|
it 'should return empty string on incomplete headers' do
|
@@ -35,7 +46,7 @@ describe Server, 'on TCP socket' do
|
|
35
46
|
big = 'X' * (20 * 1024)
|
36
47
|
post('/', :big => big).should include(big)
|
37
48
|
end
|
38
|
-
|
49
|
+
|
39
50
|
it "should retreive remote address" do
|
40
51
|
get('/').should include('"REMOTE_ADDR"=>"127.0.0.1"')
|
41
52
|
end
|
@@ -6,7 +6,7 @@ describe Server, 'with threads' do
|
|
6
6
|
start_server DEFAULT_TEST_ADDRESS, DEFAULT_TEST_PORT, :threaded => true do |env|
|
7
7
|
sleep env['PATH_INFO'].delete('/').to_i
|
8
8
|
@requests += 1
|
9
|
-
[200, { 'Content-Type' => 'text/html'
|
9
|
+
[200, { 'Content-Type' => 'text/html' }, 'hi']
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
@@ -3,7 +3,7 @@ require File.dirname(__FILE__) + '/../spec_helper'
|
|
3
3
|
describe Server, "on UNIX domain socket" do
|
4
4
|
before do
|
5
5
|
start_server('/tmp/thin_test.sock') do |env|
|
6
|
-
[200, { 'Content-Type' => 'text/html'
|
6
|
+
[200, { 'Content-Type' => 'text/html' }, [env.inspect]]
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
data/spec/spec_helper.rb
CHANGED
@@ -190,6 +190,16 @@ module Helpers
|
|
190
190
|
out
|
191
191
|
end
|
192
192
|
|
193
|
+
def parse_response(response)
|
194
|
+
raw_headers, body = response.split("\r\n\r\n", 2)
|
195
|
+
raw_status, raw_headers = raw_headers.split("\r\n", 2)
|
196
|
+
|
197
|
+
status = raw_status.match(%r{\AHTTP/1.1\s+(\d+)\b}).captures.first.to_i
|
198
|
+
headers = Hash[ *raw_headers.split("\r\n").map { |h| h.split(/:\s+/, 2) }.flatten ]
|
199
|
+
|
200
|
+
[ status, headers, body ]
|
201
|
+
end
|
202
|
+
|
193
203
|
def get(url)
|
194
204
|
if @server.backend.class == Backends::UnixServer
|
195
205
|
send_data("GET #{url} HTTP/1.1\r\nConnection: close\r\n\r\n")
|
data/tasks/announce.rake
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'erb'
|
2
2
|
|
3
3
|
MSG_TEMPLATE = File.dirname(__FILE__) + '/email.erb'
|
4
|
-
SEND_TO = %w(thin-ruby@googlegroups.com
|
4
|
+
SEND_TO = %w(thin-ruby@googlegroups.com ruby-talk@ruby-lang.org)
|
5
5
|
|
6
6
|
desc 'Generate a template for the new version annoucement'
|
7
7
|
task :ann do
|
data/tasks/deploy.rake
CHANGED
@@ -11,6 +11,6 @@ desc 'Deploy on all servers'
|
|
11
11
|
task :deploy => %w(deploy:alpha deploy:public)
|
12
12
|
|
13
13
|
def upload(file, to, options={})
|
14
|
-
sh %{ssh macournoyer@macournoyer.com "rm -rf code.macournoyer.com/#{to}"} if options[:replace]
|
15
|
-
sh %{scp -rq #{file} macournoyer@macournoyer.com:code.macournoyer.com/#{to}}
|
14
|
+
sh %{ssh macournoyer@code.macournoyer.com "rm -rf code.macournoyer.com/#{to}"} if options[:replace]
|
15
|
+
sh %{scp -rq #{file} macournoyer@code.macournoyer.com:code.macournoyer.com/#{to}}
|
16
16
|
end
|
data/tasks/email.erb
CHANGED
@@ -15,10 +15,6 @@ Install Thin from RubyForge:
|
|
15
15
|
Or using my mirror:
|
16
16
|
|
17
17
|
gem install thin --source http://code.macournoyer.com
|
18
|
-
|
19
|
-
To use Thin with UNIX domain sockets you need EventMachine 0.11.0 from my gem server:
|
20
|
-
|
21
|
-
gem install eventmachine --source http://code.macournoyer.com
|
22
18
|
|
23
19
|
== Contribute
|
24
20
|
|
data/tasks/gem.rake
CHANGED
@@ -61,14 +61,14 @@ namespace :gem do
|
|
61
61
|
desc 'Upload gem to code.macournoyer.com'
|
62
62
|
task :upload => :gem do
|
63
63
|
upload "pkg/#{spec.full_name}.gem", 'gems'
|
64
|
-
system 'ssh macournoyer@macournoyer.com "cd code.macournoyer.com && gem generate_index"'
|
64
|
+
system 'ssh macournoyer@code.macournoyer.com "cd code.macournoyer.com && gem generate_index"'
|
65
65
|
end
|
66
66
|
|
67
67
|
namespace :upload do
|
68
68
|
desc 'Upload the precompiled win32 gem to code.macournoyer.com'
|
69
69
|
task :win do
|
70
70
|
upload "pkg/#{spec.full_name}-#{WIN_SUFFIX}.gem", 'gems'
|
71
|
-
system 'ssh macournoyer@macournoyer.com "cd code.macournoyer.com && gem generate_index"'
|
71
|
+
system 'ssh macournoyer@code.macournoyer.com "cd code.macournoyer.com && gem generate_index"'
|
72
72
|
end
|
73
73
|
|
74
74
|
desc 'Upload gems (ruby & win32) to rubyforge.org'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: thin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marc-Andre Cournoyer
|
@@ -9,11 +9,12 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-09-28 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rack
|
17
|
+
type: :runtime
|
17
18
|
version_requirement:
|
18
19
|
version_requirements: !ruby/object:Gem::Requirement
|
19
20
|
requirements:
|
@@ -23,6 +24,7 @@ dependencies:
|
|
23
24
|
version:
|
24
25
|
- !ruby/object:Gem::Dependency
|
25
26
|
name: eventmachine
|
27
|
+
type: :runtime
|
26
28
|
version_requirement:
|
27
29
|
version_requirements: !ruby/object:Gem::Requirement
|
28
30
|
requirements:
|
@@ -32,6 +34,7 @@ dependencies:
|
|
32
34
|
version:
|
33
35
|
- !ruby/object:Gem::Dependency
|
34
36
|
name: daemons
|
37
|
+
type: :runtime
|
35
38
|
version_requirement:
|
36
39
|
version_requirements: !ruby/object:Gem::Requirement
|
37
40
|
requirements:
|
@@ -98,7 +101,6 @@ files:
|
|
98
101
|
- lib/thin/statuses.rb
|
99
102
|
- lib/thin/version.rb
|
100
103
|
- lib/thin.rb
|
101
|
-
- lib/thin_parser.bundle
|
102
104
|
- spec/backends
|
103
105
|
- spec/backends/swiftiply_client_spec.rb
|
104
106
|
- spec/backends/tcp_server_spec.rb
|
@@ -238,7 +240,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
238
240
|
requirements: []
|
239
241
|
|
240
242
|
rubyforge_project: thin
|
241
|
-
rubygems_version: 1.
|
243
|
+
rubygems_version: 1.2.0
|
242
244
|
signing_key:
|
243
245
|
specification_version: 2
|
244
246
|
summary: A thin and fast web server
|
data/lib/thin_parser.bundle
DELETED
Binary file
|