deja-vu 0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. data/Change.log +4 -0
  2. data/LICENSE +19 -0
  3. data/Makefile +0 -0
  4. data/README +22 -0
  5. data/Rakefile +31 -0
  6. data/example-playback/README +6 -0
  7. data/example-playback/analysis.rb +7 -0
  8. data/example-playback/playback.rb +7 -0
  9. data/example-playback/repo/recordings/DejaVuNS/DejaVu/recordings +1 -0
  10. data/example-playback/repo/recordings/DejaVuNS/Recording/bah7aa==/n--ab7689c618445bb17b626741588b50c0500c8f79 +1 -0
  11. data/example/Makefile +6 -0
  12. data/example/config.ru +9 -0
  13. data/example/deja-vu-recordings/6b44093baa40d257106bae6dbcda53af9a57e61f.session +53 -0
  14. data/example/deja-vu-recordings/BAh7AA==/n--ab7689c618445bb17b626741588b50c0500c8f79.session +598 -0
  15. data/example/deja-vu-recordings/README +1 -0
  16. data/example/myapp.rb +15 -0
  17. data/example/repo/recordings/DejaVuNS/DejaVu/recordings +1 -0
  18. data/example/repo/recordings/DejaVuNS/Recording/bah7aa==/n--ab7689c618445bb17b626741588b50c0500c8f79 +1 -0
  19. data/example/views/index.haml +0 -0
  20. data/example/views/layout.haml +0 -0
  21. data/lib/deja-vu.rb +72 -0
  22. data/lib/deja-vu/analyzer.rb +133 -0
  23. data/lib/deja-vu/init.rb +3 -0
  24. data/lib/deja-vu/model/dejavu.rb +42 -0
  25. data/lib/deja-vu/model/generated_model/DejaVuNS.rb +1536 -0
  26. data/lib/deja-vu/model/init.rb +3 -0
  27. data/lib/deja-vu/model/record.rb +58 -0
  28. data/lib/deja-vu/model/recording.rb +55 -0
  29. data/lib/deja-vu/model/xampl-gen.rb +39 -0
  30. data/lib/deja-vu/model/xml/dejavu.xml +28 -0
  31. data/lib/deja-vu/player.rb +241 -0
  32. data/lib/deja-vu/recorder.rb +93 -0
  33. data/lib/rack-session-listener.rb +29 -0
  34. metadata +94 -0
@@ -0,0 +1,4 @@
1
+ -- Dec. 7th
2
+ - added analysis class to do basic stats on recordings
3
+ - refactored the player to be better
4
+ - fixed a bug in the recorder
data/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2009 Kristan 'Krispy' Uccello <krispy@soldierofcode.com> - Soldier Of Code
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
File without changes
data/README ADDED
@@ -0,0 +1,22 @@
1
+ =Deja Vu
2
+
3
+ == A rack based session record / playback middleware for problemsolving web applications
4
+
5
+ This is user session record and playback. Good for what ales you.
6
+
7
+ == Usage
8
+
9
+ >> require 'deja-vu'
10
+
11
+ YOU NEED TO TURN ON COOKIE SESSIONS UPSTREAM OF DejaVu FOR THIS TO WORK
12
+
13
+ ie.
14
+ use Rack::Session::Cookie,
15
+ :key => 'a-stupid-cookie-name',
16
+ :path => '/',
17
+ :expire_after => 2592000,
18
+ :secret => 'change_me'
19
+
20
+ in your config.ru or your application
21
+
22
+ use SoldierOfCode::DejaVu::Middleware, {:cookie_name=>"a-stupid-cookie-name",:enable_record=>true}
@@ -0,0 +1,31 @@
1
+ require 'rake/testtask'
2
+
3
+ begin
4
+ require 'jeweler'
5
+ Jeweler::Tasks.new do |s|
6
+ s.name = "deja-vu"
7
+ s.description = s.summary = "A rack based session record / playback middleware for problemsolving web applications"
8
+ s.email = "kuccello@gmail.com"
9
+ s.homepage = "http://github.com/kuccello/deja-vu"
10
+ s.authors = ['Kristan "Krispy" Uccello']
11
+ s.files = FileList["[A-Z]*", "{lib,test,example,example-playback}/**/*"]
12
+ s.version = "0.3"
13
+ end
14
+ Jeweler::GemcutterTasks.new
15
+ rescue LoadError
16
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
17
+ end
18
+
19
+ Rake::TestTask.new do |t|
20
+ t.libs << "test"
21
+ t.test_files = FileList['test/*-test.rb']
22
+ t.verbose = true
23
+ end
24
+
25
+ require 'rake/rdoctask'
26
+ desc "Generate documentation"
27
+ Rake::RDocTask.new do |rd|
28
+ rd.main = "README.rdoc"
29
+ rd.rdoc_files.include("README.rdoc", "lib/**/*.rb")
30
+ rd.rdoc_dir = 'rdoc'
31
+ end
@@ -0,0 +1,6 @@
1
+ You need to first record using the example web application <dir-root>/example
2
+
3
+ Simply start up the web application and play arround with entering various URIs and it will create a repo directory.
4
+ Copy the "repo" directory into this directory and take note of a recording "pid" repo/DejaVuNS/Recording/<the file name is the pid>
5
+
6
+ Adjust the playback.rb with the pid.
@@ -0,0 +1,7 @@
1
+ require 'patron'
2
+ require 'xampl'
3
+ require 'dirge'
4
+ require 'deja-vu' unless require ~'../lib/deja-vu'
5
+
6
+ analyzer = SoldierOfCode::DejaVu::Analyzer.new
7
+ analyzer.overview_formatted
@@ -0,0 +1,7 @@
1
+ require 'patron'
2
+ require 'xampl'
3
+ require 'dirge'
4
+ require 'deja-vu' unless require ~'../lib/deja-vu'
5
+
6
+ player = SoldierOfCode::DejaVu::Player.new
7
+ player.play
@@ -0,0 +1 @@
1
+ <dejavu:deja-vu pid="recordings" xmlns:dejavu="http://soldierofcode.com/deja-vu"><dejavu:recording pid="bah7aa==&#10;--ab7689c618445bb17b626741588b50c0500c8f79"/></dejavu:deja-vu>
@@ -0,0 +1 @@
1
+ <dejavu:recording pid="bah7aa==&#10;--ab7689c618445bb17b626741588b50c0500c8f79" stamp="1260219390" agent="Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en; rv:1.9.0.16) Gecko/2009120123 Camino/2.0.1 (like Firefox/3.0.16)" ip="127.0.0.1" xmlns:dejavu="http://soldierofcode.com/deja-vu"><dejavu:record id="1260219390" stamp="1260219390" status="200" httpmethod="GET" url="http://localhost:9999/favicon.ico" request-time="0.00220799446105957"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body>&lt;![CDATA[["Hello"]]]&gt;</dejavu:body></dejavu:record><dejavu:record id="1260219395" stamp="1260219395" status="200" httpmethod="GET" url="http://localhost:9999/one" request-time="0.00183606147766113"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body>&lt;![CDATA[["Hello"]]]&gt;</dejavu:body></dejavu:record><dejavu:record id="1260219397" stamp="1260219397" status="200" httpmethod="GET" url="http://localhost:9999/one/two" request-time="0.000412940979003906"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body>&lt;![CDATA[["Hello"]]]&gt;</dejavu:body></dejavu:record><dejavu:record id="1260219400" stamp="1260219400" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three" request-time="0.000966072082519531"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body>&lt;![CDATA[["Hello"]]]&gt;</dejavu:body></dejavu:record><dejavu:record id="1260219403" stamp="1260219403" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three/four" request-time="0.00429487228393555"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body>&lt;![CDATA[["Hello"]]]&gt;</dejavu:body></dejavu:record><dejavu:record id="1260219408" stamp="1260219408" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three/four?five=true" request-time="0.0016019344329834"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body>&lt;![CDATA[["Hello"]]]&gt;</dejavu:body><dejavu:param name="five" value="true"/></dejavu:record><dejavu:record id="1260219416" stamp="1260219416" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three/four?five=true&amp;six=seven" request-time="0.00183486938476562"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body>&lt;![CDATA[["Hello"]]]&gt;</dejavu:body><dejavu:param name="five" value="true"/><dejavu:param name="six" value="seven"/></dejavu:record><dejavu:record id="1260219422" stamp="1260219422" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three/four?five=true&amp;six=seven&amp;eight=9" request-time="0.00100898742675781"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body>&lt;![CDATA[["Hello"]]]&gt;</dejavu:body><dejavu:param name="five" value="true"/><dejavu:param name="six" value="seven"/><dejavu:param name="eight" value="9"/></dejavu:record></dejavu:recording>
@@ -0,0 +1,6 @@
1
+ go:
2
+ thin start --debug --threaded -R config.ru -p 9999
3
+
4
+ l:
5
+ thin start --debug --threaded --no-epoll -R config.ru -p 9999
6
+
@@ -0,0 +1,9 @@
1
+ require 'myapp'
2
+
3
+ use Rack::Session::Cookie,
4
+ :key => 'a-stupid-cookie-name',
5
+ :path => '/',
6
+ :expire_after => 2592000,
7
+ :secret => 'change_me'
8
+
9
+ run MyApp
@@ -0,0 +1,53 @@
1
+ REQUEST [1259876656] START
2
+ METHOD: GET
3
+ URL: http://localhost:9999//
4
+ =====[ENV]=====
5
+ SERVER_SOFTWARE: thin 1.2.5 codename This Is Not A Web Server --> String
6
+ SERVER_NAME: localhost --> String
7
+ rack.input: #<StringIO:0x00000101339f30> --> StringIO
8
+ rack.version: [1, 0] --> Array
9
+ rack.errors: #<IO:0x00000100888670> --> IO
10
+ rack.multithread: true --> TrueClass
11
+ rack.multiprocess: false --> FalseClass
12
+ rack.run_once: false --> FalseClass
13
+ REQUEST_METHOD: GET --> String
14
+ REQUEST_PATH: / --> String
15
+ PATH_INFO: / --> String
16
+ REQUEST_URI: / --> String
17
+ HTTP_VERSION: HTTP/1.1 --> String
18
+ HTTP_HOST: localhost:9999 --> String
19
+ HTTP_USER_AGENT: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 --> String
20
+ HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 --> String
21
+ HTTP_ACCEPT_LANGUAGE: en-us,en;q=0.5 --> String
22
+ HTTP_ACCEPT_ENCODING: gzip,deflate --> String
23
+ HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7 --> String
24
+ HTTP_KEEP_ALIVE: 300 --> String
25
+ HTTP_CONNECTION: keep-alive --> String
26
+ HTTP_COOKIE: sifrFetch=true --> String
27
+ GATEWAY_INTERFACE: CGI/1.2 --> String
28
+ SERVER_PORT: 9999 --> String
29
+ QUERY_STRING: --> String
30
+ SERVER_PROTOCOL: HTTP/1.1 --> String
31
+ rack.url_scheme: http --> String
32
+ SCRIPT_NAME: --> String
33
+ REMOTE_ADDR: 127.0.0.1 --> String
34
+ async.callback: #<Method: Thin::Connection#post_process> --> Method
35
+ async.close: #<EventMachine::DefaultDeferrable:0x00000101329648> --> EventMachine::DefaultDeferrable
36
+ rack.request.cookie_string: sifrFetch=true --> String
37
+ rack.request.cookie_hash: {"sifrFetch"=>"true"} --> Hash
38
+ rack.session: {} --> Hash
39
+ rack.session.options: {:domain=>nil, :path=>"/", :expire_after=>2592000, :key=>"a-stupid-cookie-name", :secret=>"change_me"} --> Hash
40
+ rack.request.query_string: --> String
41
+ rack.request.query_hash: {} --> Hash
42
+ rack.request.form_input: #<StringIO:0x00000101339f30> --> StringIO
43
+ rack.request.form_hash: {} --> Hash
44
+ rack.request.form_vars: --> String
45
+
46
+
47
+ ===============
48
+ STATUS: 200
49
+ HEADERS: {"Content-Type"=>"text/html", "Content-Length"=>"5"}
50
+ BODY: ["Hello"]
51
+ =====[SESSION]=====
52
+ ===================
53
+ REQUEST [1259876656] END
@@ -0,0 +1,598 @@
1
+ REQUEST [1259876604] START
2
+ METHOD: GET
3
+ URL: http://localhost:9999//
4
+ =====[ENV]=====
5
+ SERVER_SOFTWARE: thin 1.2.5 codename This Is Not A Web Server --> String
6
+ SERVER_NAME: localhost --> String
7
+ rack.input: #<StringIO:0x00000101074568> --> StringIO
8
+ rack.version: [1, 0] --> Array
9
+ rack.errors: #<IO:0x00000100888670> --> IO
10
+ rack.multithread: true --> TrueClass
11
+ rack.multiprocess: false --> FalseClass
12
+ rack.run_once: false --> FalseClass
13
+ REQUEST_METHOD: GET --> String
14
+ REQUEST_PATH: / --> String
15
+ PATH_INFO: / --> String
16
+ REQUEST_URI: / --> String
17
+ HTTP_VERSION: HTTP/1.1 --> String
18
+ HTTP_HOST: localhost:9999 --> String
19
+ HTTP_USER_AGENT: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en; rv:1.9.0.15) Gecko/2009102617 Camino/2.0 (like Firefox/3.0.15) --> String
20
+ HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 --> String
21
+ HTTP_ACCEPT_LANGUAGE: en-US,en;q=0.9,ja;q=0.8,fr;q=0.7,de;q=0.6,es;q=0.5,it;q=0.4,pt;q=0.3,pt-pt;q=0.2,nl;q=0.1 --> String
22
+ HTTP_ACCEPT_ENCODING: gzip,deflate --> String
23
+ HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7 --> String
24
+ HTTP_KEEP_ALIVE: 300 --> String
25
+ HTTP_CONNECTION: keep-alive --> String
26
+ HTTP_COOKIE: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
27
+ HTTP_CACHE_CONTROL: max-age=0 --> String
28
+ GATEWAY_INTERFACE: CGI/1.2 --> String
29
+ SERVER_PORT: 9999 --> String
30
+ QUERY_STRING: --> String
31
+ SERVER_PROTOCOL: HTTP/1.1 --> String
32
+ rack.url_scheme: http --> String
33
+ SCRIPT_NAME: --> String
34
+ REMOTE_ADDR: 127.0.0.1 --> String
35
+ async.callback: #<Method: Thin::Connection#post_process> --> Method
36
+ async.close: #<EventMachine::DefaultDeferrable:0x000001017697b8> --> EventMachine::DefaultDeferrable
37
+ rack.request.cookie_string: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
38
+ rack.request.cookie_hash: {"a-stupid-cookie-name"=>"BAh7AA==\n--ab7689c618445bb17b626741588b50c0500c8f79"} --> Hash
39
+ rack.session: {} --> Hash
40
+ rack.session.options: {:domain=>nil, :path=>"/", :expire_after=>2592000, :key=>"a-stupid-cookie-name", :secret=>"change_me"} --> Hash
41
+ rack.request.query_string: --> String
42
+ rack.request.query_hash: {} --> Hash
43
+ rack.request.form_input: #<StringIO:0x00000101074568> --> StringIO
44
+ rack.request.form_hash: {} --> Hash
45
+ rack.request.form_vars: --> String
46
+
47
+
48
+ ===============
49
+ STATUS: 200
50
+ HEADERS: {"Content-Type"=>"text/html", "Content-Length"=>"5"}
51
+ BODY: ["Hello"]
52
+ =====[SESSION]=====
53
+ ===================
54
+ REQUEST [1259876604] END
55
+ REQUEST [1259876637] START
56
+ METHOD: GET
57
+ URL: http://localhost:9999//
58
+ =====[ENV]=====
59
+ SERVER_SOFTWARE: thin 1.2.5 codename This Is Not A Web Server --> String
60
+ SERVER_NAME: localhost --> String
61
+ rack.input: #<StringIO:0x000001016a1d50> --> StringIO
62
+ rack.version: [1, 0] --> Array
63
+ rack.errors: #<IO:0x00000100888670> --> IO
64
+ rack.multithread: true --> TrueClass
65
+ rack.multiprocess: false --> FalseClass
66
+ rack.run_once: false --> FalseClass
67
+ REQUEST_METHOD: GET --> String
68
+ REQUEST_PATH: / --> String
69
+ PATH_INFO: / --> String
70
+ REQUEST_URI: / --> String
71
+ HTTP_VERSION: HTTP/1.1 --> String
72
+ HTTP_HOST: localhost:9999 --> String
73
+ HTTP_USER_AGENT: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en; rv:1.9.0.15) Gecko/2009102617 Camino/2.0 (like Firefox/3.0.15) --> String
74
+ HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 --> String
75
+ HTTP_ACCEPT_LANGUAGE: en-US,en;q=0.9,ja;q=0.8,fr;q=0.7,de;q=0.6,es;q=0.5,it;q=0.4,pt;q=0.3,pt-pt;q=0.2,nl;q=0.1 --> String
76
+ HTTP_ACCEPT_ENCODING: gzip,deflate --> String
77
+ HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7 --> String
78
+ HTTP_KEEP_ALIVE: 300 --> String
79
+ HTTP_CONNECTION: keep-alive --> String
80
+ HTTP_COOKIE: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
81
+ HTTP_CACHE_CONTROL: max-age=0 --> String
82
+ GATEWAY_INTERFACE: CGI/1.2 --> String
83
+ SERVER_PORT: 9999 --> String
84
+ QUERY_STRING: --> String
85
+ SERVER_PROTOCOL: HTTP/1.1 --> String
86
+ rack.url_scheme: http --> String
87
+ SCRIPT_NAME: --> String
88
+ REMOTE_ADDR: 127.0.0.1 --> String
89
+ async.callback: #<Method: Thin::Connection#post_process> --> Method
90
+ async.close: #<EventMachine::DefaultDeferrable:0x000001016986d0> --> EventMachine::DefaultDeferrable
91
+ rack.request.cookie_string: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
92
+ rack.request.cookie_hash: {"a-stupid-cookie-name"=>"BAh7AA==\n--ab7689c618445bb17b626741588b50c0500c8f79"} --> Hash
93
+ rack.session: {} --> Hash
94
+ rack.session.options: {:domain=>nil, :path=>"/", :expire_after=>2592000, :key=>"a-stupid-cookie-name", :secret=>"change_me"} --> Hash
95
+ rack.request.query_string: --> String
96
+ rack.request.query_hash: {} --> Hash
97
+ rack.request.form_input: #<StringIO:0x000001016a1d50> --> StringIO
98
+ rack.request.form_hash: {} --> Hash
99
+ rack.request.form_vars: --> String
100
+
101
+
102
+ ===============
103
+ STATUS: 200
104
+ HEADERS: {"Content-Type"=>"text/html", "Content-Length"=>"5"}
105
+ BODY: ["Hello"]
106
+ =====[SESSION]=====
107
+ ===================
108
+ REQUEST [1259876637] END
109
+ REQUEST [1259876638] START
110
+ METHOD: GET
111
+ URL: http://localhost:9999//
112
+ =====[ENV]=====
113
+ SERVER_SOFTWARE: thin 1.2.5 codename This Is Not A Web Server --> String
114
+ SERVER_NAME: localhost --> String
115
+ rack.input: #<StringIO:0x0000010166ad10> --> StringIO
116
+ rack.version: [1, 0] --> Array
117
+ rack.errors: #<IO:0x00000100888670> --> IO
118
+ rack.multithread: true --> TrueClass
119
+ rack.multiprocess: false --> FalseClass
120
+ rack.run_once: false --> FalseClass
121
+ REQUEST_METHOD: GET --> String
122
+ REQUEST_PATH: / --> String
123
+ PATH_INFO: / --> String
124
+ REQUEST_URI: / --> String
125
+ HTTP_VERSION: HTTP/1.1 --> String
126
+ HTTP_HOST: localhost:9999 --> String
127
+ HTTP_USER_AGENT: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en; rv:1.9.0.15) Gecko/2009102617 Camino/2.0 (like Firefox/3.0.15) --> String
128
+ HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 --> String
129
+ HTTP_ACCEPT_LANGUAGE: en-US,en;q=0.9,ja;q=0.8,fr;q=0.7,de;q=0.6,es;q=0.5,it;q=0.4,pt;q=0.3,pt-pt;q=0.2,nl;q=0.1 --> String
130
+ HTTP_ACCEPT_ENCODING: gzip,deflate --> String
131
+ HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7 --> String
132
+ HTTP_KEEP_ALIVE: 300 --> String
133
+ HTTP_CONNECTION: keep-alive --> String
134
+ HTTP_COOKIE: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
135
+ HTTP_CACHE_CONTROL: max-age=0 --> String
136
+ GATEWAY_INTERFACE: CGI/1.2 --> String
137
+ SERVER_PORT: 9999 --> String
138
+ QUERY_STRING: --> String
139
+ SERVER_PROTOCOL: HTTP/1.1 --> String
140
+ rack.url_scheme: http --> String
141
+ SCRIPT_NAME: --> String
142
+ REMOTE_ADDR: 127.0.0.1 --> String
143
+ async.callback: #<Method: Thin::Connection#post_process> --> Method
144
+ async.close: #<EventMachine::DefaultDeferrable:0x00000101664f00> --> EventMachine::DefaultDeferrable
145
+ rack.request.cookie_string: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
146
+ rack.request.cookie_hash: {"a-stupid-cookie-name"=>"BAh7AA==\n--ab7689c618445bb17b626741588b50c0500c8f79"} --> Hash
147
+ rack.session: {} --> Hash
148
+ rack.session.options: {:domain=>nil, :path=>"/", :expire_after=>2592000, :key=>"a-stupid-cookie-name", :secret=>"change_me"} --> Hash
149
+ rack.request.query_string: --> String
150
+ rack.request.query_hash: {} --> Hash
151
+ rack.request.form_input: #<StringIO:0x0000010166ad10> --> StringIO
152
+ rack.request.form_hash: {} --> Hash
153
+ rack.request.form_vars: --> String
154
+
155
+
156
+ ===============
157
+ STATUS: 200
158
+ HEADERS: {"Content-Type"=>"text/html", "Content-Length"=>"5"}
159
+ BODY: ["Hello"]
160
+ =====[SESSION]=====
161
+ ===================
162
+ REQUEST [1259876638] END
163
+ REQUEST [1259876638] START
164
+ METHOD: GET
165
+ URL: http://localhost:9999//
166
+ =====[ENV]=====
167
+ SERVER_SOFTWARE: thin 1.2.5 codename This Is Not A Web Server --> String
168
+ SERVER_NAME: localhost --> String
169
+ rack.input: #<StringIO:0x0000010161bc08> --> StringIO
170
+ rack.version: [1, 0] --> Array
171
+ rack.errors: #<IO:0x00000100888670> --> IO
172
+ rack.multithread: true --> TrueClass
173
+ rack.multiprocess: false --> FalseClass
174
+ rack.run_once: false --> FalseClass
175
+ REQUEST_METHOD: GET --> String
176
+ REQUEST_PATH: / --> String
177
+ PATH_INFO: / --> String
178
+ REQUEST_URI: / --> String
179
+ HTTP_VERSION: HTTP/1.1 --> String
180
+ HTTP_HOST: localhost:9999 --> String
181
+ HTTP_USER_AGENT: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en; rv:1.9.0.15) Gecko/2009102617 Camino/2.0 (like Firefox/3.0.15) --> String
182
+ HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 --> String
183
+ HTTP_ACCEPT_LANGUAGE: en-US,en;q=0.9,ja;q=0.8,fr;q=0.7,de;q=0.6,es;q=0.5,it;q=0.4,pt;q=0.3,pt-pt;q=0.2,nl;q=0.1 --> String
184
+ HTTP_ACCEPT_ENCODING: gzip,deflate --> String
185
+ HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7 --> String
186
+ HTTP_KEEP_ALIVE: 300 --> String
187
+ HTTP_CONNECTION: keep-alive --> String
188
+ HTTP_COOKIE: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
189
+ HTTP_CACHE_CONTROL: max-age=0 --> String
190
+ GATEWAY_INTERFACE: CGI/1.2 --> String
191
+ SERVER_PORT: 9999 --> String
192
+ QUERY_STRING: --> String
193
+ SERVER_PROTOCOL: HTTP/1.1 --> String
194
+ rack.url_scheme: http --> String
195
+ SCRIPT_NAME: --> String
196
+ REMOTE_ADDR: 127.0.0.1 --> String
197
+ async.callback: #<Method: Thin::Connection#post_process> --> Method
198
+ async.close: #<EventMachine::DefaultDeferrable:0x00000101619eb8> --> EventMachine::DefaultDeferrable
199
+ rack.request.cookie_string: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
200
+ rack.request.cookie_hash: {"a-stupid-cookie-name"=>"BAh7AA==\n--ab7689c618445bb17b626741588b50c0500c8f79"} --> Hash
201
+ rack.session: {} --> Hash
202
+ rack.session.options: {:domain=>nil, :path=>"/", :expire_after=>2592000, :key=>"a-stupid-cookie-name", :secret=>"change_me"} --> Hash
203
+ rack.request.query_string: --> String
204
+ rack.request.query_hash: {} --> Hash
205
+ rack.request.form_input: #<StringIO:0x0000010161bc08> --> StringIO
206
+ rack.request.form_hash: {} --> Hash
207
+ rack.request.form_vars: --> String
208
+
209
+
210
+ ===============
211
+ STATUS: 200
212
+ HEADERS: {"Content-Type"=>"text/html", "Content-Length"=>"5"}
213
+ BODY: ["Hello"]
214
+ =====[SESSION]=====
215
+ ===================
216
+ REQUEST [1259876638] END
217
+ REQUEST [1259876638] START
218
+ METHOD: GET
219
+ URL: http://localhost:9999//
220
+ =====[ENV]=====
221
+ SERVER_SOFTWARE: thin 1.2.5 codename This Is Not A Web Server --> String
222
+ SERVER_NAME: localhost --> String
223
+ rack.input: #<StringIO:0x000001015acdc0> --> StringIO
224
+ rack.version: [1, 0] --> Array
225
+ rack.errors: #<IO:0x00000100888670> --> IO
226
+ rack.multithread: true --> TrueClass
227
+ rack.multiprocess: false --> FalseClass
228
+ rack.run_once: false --> FalseClass
229
+ REQUEST_METHOD: GET --> String
230
+ REQUEST_PATH: / --> String
231
+ PATH_INFO: / --> String
232
+ REQUEST_URI: / --> String
233
+ HTTP_VERSION: HTTP/1.1 --> String
234
+ HTTP_HOST: localhost:9999 --> String
235
+ HTTP_USER_AGENT: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en; rv:1.9.0.15) Gecko/2009102617 Camino/2.0 (like Firefox/3.0.15) --> String
236
+ HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 --> String
237
+ HTTP_ACCEPT_LANGUAGE: en-US,en;q=0.9,ja;q=0.8,fr;q=0.7,de;q=0.6,es;q=0.5,it;q=0.4,pt;q=0.3,pt-pt;q=0.2,nl;q=0.1 --> String
238
+ HTTP_ACCEPT_ENCODING: gzip,deflate --> String
239
+ HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7 --> String
240
+ HTTP_KEEP_ALIVE: 300 --> String
241
+ HTTP_CONNECTION: keep-alive --> String
242
+ HTTP_COOKIE: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
243
+ HTTP_CACHE_CONTROL: max-age=0 --> String
244
+ GATEWAY_INTERFACE: CGI/1.2 --> String
245
+ SERVER_PORT: 9999 --> String
246
+ QUERY_STRING: --> String
247
+ SERVER_PROTOCOL: HTTP/1.1 --> String
248
+ rack.url_scheme: http --> String
249
+ SCRIPT_NAME: --> String
250
+ REMOTE_ADDR: 127.0.0.1 --> String
251
+ async.callback: #<Method: Thin::Connection#post_process> --> Method
252
+ async.close: #<EventMachine::DefaultDeferrable:0x000001015aa9e0> --> EventMachine::DefaultDeferrable
253
+ rack.request.cookie_string: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
254
+ rack.request.cookie_hash: {"a-stupid-cookie-name"=>"BAh7AA==\n--ab7689c618445bb17b626741588b50c0500c8f79"} --> Hash
255
+ rack.session: {} --> Hash
256
+ rack.session.options: {:domain=>nil, :path=>"/", :expire_after=>2592000, :key=>"a-stupid-cookie-name", :secret=>"change_me"} --> Hash
257
+ rack.request.query_string: --> String
258
+ rack.request.query_hash: {} --> Hash
259
+ rack.request.form_input: #<StringIO:0x000001015acdc0> --> StringIO
260
+ rack.request.form_hash: {} --> Hash
261
+ rack.request.form_vars: --> String
262
+
263
+
264
+ ===============
265
+ STATUS: 200
266
+ HEADERS: {"Content-Type"=>"text/html", "Content-Length"=>"5"}
267
+ BODY: ["Hello"]
268
+ =====[SESSION]=====
269
+ ===================
270
+ REQUEST [1259876638] END
271
+ REQUEST [1259876639] START
272
+ METHOD: GET
273
+ URL: http://localhost:9999//
274
+ =====[ENV]=====
275
+ SERVER_SOFTWARE: thin 1.2.5 codename This Is Not A Web Server --> String
276
+ SERVER_NAME: localhost --> String
277
+ rack.input: #<StringIO:0x00000101560258> --> StringIO
278
+ rack.version: [1, 0] --> Array
279
+ rack.errors: #<IO:0x00000100888670> --> IO
280
+ rack.multithread: true --> TrueClass
281
+ rack.multiprocess: false --> FalseClass
282
+ rack.run_once: false --> FalseClass
283
+ REQUEST_METHOD: GET --> String
284
+ REQUEST_PATH: / --> String
285
+ PATH_INFO: / --> String
286
+ REQUEST_URI: / --> String
287
+ HTTP_VERSION: HTTP/1.1 --> String
288
+ HTTP_HOST: localhost:9999 --> String
289
+ HTTP_USER_AGENT: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en; rv:1.9.0.15) Gecko/2009102617 Camino/2.0 (like Firefox/3.0.15) --> String
290
+ HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 --> String
291
+ HTTP_ACCEPT_LANGUAGE: en-US,en;q=0.9,ja;q=0.8,fr;q=0.7,de;q=0.6,es;q=0.5,it;q=0.4,pt;q=0.3,pt-pt;q=0.2,nl;q=0.1 --> String
292
+ HTTP_ACCEPT_ENCODING: gzip,deflate --> String
293
+ HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7 --> String
294
+ HTTP_KEEP_ALIVE: 300 --> String
295
+ HTTP_CONNECTION: keep-alive --> String
296
+ HTTP_COOKIE: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
297
+ HTTP_CACHE_CONTROL: max-age=0 --> String
298
+ GATEWAY_INTERFACE: CGI/1.2 --> String
299
+ SERVER_PORT: 9999 --> String
300
+ QUERY_STRING: --> String
301
+ SERVER_PROTOCOL: HTTP/1.1 --> String
302
+ rack.url_scheme: http --> String
303
+ SCRIPT_NAME: --> String
304
+ REMOTE_ADDR: 127.0.0.1 --> String
305
+ async.callback: #<Method: Thin::Connection#post_process> --> Method
306
+ async.close: #<EventMachine::DefaultDeferrable:0x0000010155e348> --> EventMachine::DefaultDeferrable
307
+ rack.request.cookie_string: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
308
+ rack.request.cookie_hash: {"a-stupid-cookie-name"=>"BAh7AA==\n--ab7689c618445bb17b626741588b50c0500c8f79"} --> Hash
309
+ rack.session: {} --> Hash
310
+ rack.session.options: {:domain=>nil, :path=>"/", :expire_after=>2592000, :key=>"a-stupid-cookie-name", :secret=>"change_me"} --> Hash
311
+ rack.request.query_string: --> String
312
+ rack.request.query_hash: {} --> Hash
313
+ rack.request.form_input: #<StringIO:0x00000101560258> --> StringIO
314
+ rack.request.form_hash: {} --> Hash
315
+ rack.request.form_vars: --> String
316
+
317
+
318
+ ===============
319
+ STATUS: 200
320
+ HEADERS: {"Content-Type"=>"text/html", "Content-Length"=>"5"}
321
+ BODY: ["Hello"]
322
+ =====[SESSION]=====
323
+ ===================
324
+ REQUEST [1259876639] END
325
+ REQUEST [1259876639] START
326
+ METHOD: GET
327
+ URL: http://localhost:9999//
328
+ =====[ENV]=====
329
+ SERVER_SOFTWARE: thin 1.2.5 codename This Is Not A Web Server --> String
330
+ SERVER_NAME: localhost --> String
331
+ rack.input: #<StringIO:0x0000010151ff18> --> StringIO
332
+ rack.version: [1, 0] --> Array
333
+ rack.errors: #<IO:0x00000100888670> --> IO
334
+ rack.multithread: true --> TrueClass
335
+ rack.multiprocess: false --> FalseClass
336
+ rack.run_once: false --> FalseClass
337
+ REQUEST_METHOD: GET --> String
338
+ REQUEST_PATH: / --> String
339
+ PATH_INFO: / --> String
340
+ REQUEST_URI: / --> String
341
+ HTTP_VERSION: HTTP/1.1 --> String
342
+ HTTP_HOST: localhost:9999 --> String
343
+ HTTP_USER_AGENT: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en; rv:1.9.0.15) Gecko/2009102617 Camino/2.0 (like Firefox/3.0.15) --> String
344
+ HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 --> String
345
+ HTTP_ACCEPT_LANGUAGE: en-US,en;q=0.9,ja;q=0.8,fr;q=0.7,de;q=0.6,es;q=0.5,it;q=0.4,pt;q=0.3,pt-pt;q=0.2,nl;q=0.1 --> String
346
+ HTTP_ACCEPT_ENCODING: gzip,deflate --> String
347
+ HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7 --> String
348
+ HTTP_KEEP_ALIVE: 300 --> String
349
+ HTTP_CONNECTION: keep-alive --> String
350
+ HTTP_COOKIE: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
351
+ HTTP_CACHE_CONTROL: max-age=0 --> String
352
+ GATEWAY_INTERFACE: CGI/1.2 --> String
353
+ SERVER_PORT: 9999 --> String
354
+ QUERY_STRING: --> String
355
+ SERVER_PROTOCOL: HTTP/1.1 --> String
356
+ rack.url_scheme: http --> String
357
+ SCRIPT_NAME: --> String
358
+ REMOTE_ADDR: 127.0.0.1 --> String
359
+ async.callback: #<Method: Thin::Connection#post_process> --> Method
360
+ async.close: #<EventMachine::DefaultDeferrable:0x0000010151a338> --> EventMachine::DefaultDeferrable
361
+ rack.request.cookie_string: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
362
+ rack.request.cookie_hash: {"a-stupid-cookie-name"=>"BAh7AA==\n--ab7689c618445bb17b626741588b50c0500c8f79"} --> Hash
363
+ rack.session: {} --> Hash
364
+ rack.session.options: {:domain=>nil, :path=>"/", :expire_after=>2592000, :key=>"a-stupid-cookie-name", :secret=>"change_me"} --> Hash
365
+ rack.request.query_string: --> String
366
+ rack.request.query_hash: {} --> Hash
367
+ rack.request.form_input: #<StringIO:0x0000010151ff18> --> StringIO
368
+ rack.request.form_hash: {} --> Hash
369
+ rack.request.form_vars: --> String
370
+
371
+
372
+ ===============
373
+ STATUS: 200
374
+ HEADERS: {"Content-Type"=>"text/html", "Content-Length"=>"5"}
375
+ BODY: ["Hello"]
376
+ =====[SESSION]=====
377
+ ===================
378
+ REQUEST [1259876639] END
379
+ REQUEST [1259876639] START
380
+ METHOD: GET
381
+ URL: http://localhost:9999//
382
+ =====[ENV]=====
383
+ SERVER_SOFTWARE: thin 1.2.5 codename This Is Not A Web Server --> String
384
+ SERVER_NAME: localhost --> String
385
+ rack.input: #<StringIO:0x000001014e1298> --> StringIO
386
+ rack.version: [1, 0] --> Array
387
+ rack.errors: #<IO:0x00000100888670> --> IO
388
+ rack.multithread: true --> TrueClass
389
+ rack.multiprocess: false --> FalseClass
390
+ rack.run_once: false --> FalseClass
391
+ REQUEST_METHOD: GET --> String
392
+ REQUEST_PATH: / --> String
393
+ PATH_INFO: / --> String
394
+ REQUEST_URI: / --> String
395
+ HTTP_VERSION: HTTP/1.1 --> String
396
+ HTTP_HOST: localhost:9999 --> String
397
+ HTTP_USER_AGENT: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en; rv:1.9.0.15) Gecko/2009102617 Camino/2.0 (like Firefox/3.0.15) --> String
398
+ HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 --> String
399
+ HTTP_ACCEPT_LANGUAGE: en-US,en;q=0.9,ja;q=0.8,fr;q=0.7,de;q=0.6,es;q=0.5,it;q=0.4,pt;q=0.3,pt-pt;q=0.2,nl;q=0.1 --> String
400
+ HTTP_ACCEPT_ENCODING: gzip,deflate --> String
401
+ HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7 --> String
402
+ HTTP_KEEP_ALIVE: 300 --> String
403
+ HTTP_CONNECTION: keep-alive --> String
404
+ HTTP_COOKIE: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
405
+ HTTP_CACHE_CONTROL: max-age=0 --> String
406
+ GATEWAY_INTERFACE: CGI/1.2 --> String
407
+ SERVER_PORT: 9999 --> String
408
+ QUERY_STRING: --> String
409
+ SERVER_PROTOCOL: HTTP/1.1 --> String
410
+ rack.url_scheme: http --> String
411
+ SCRIPT_NAME: --> String
412
+ REMOTE_ADDR: 127.0.0.1 --> String
413
+ async.callback: #<Method: Thin::Connection#post_process> --> Method
414
+ async.close: #<EventMachine::DefaultDeferrable:0x000001014de898> --> EventMachine::DefaultDeferrable
415
+ rack.request.cookie_string: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
416
+ rack.request.cookie_hash: {"a-stupid-cookie-name"=>"BAh7AA==\n--ab7689c618445bb17b626741588b50c0500c8f79"} --> Hash
417
+ rack.session: {} --> Hash
418
+ rack.session.options: {:domain=>nil, :path=>"/", :expire_after=>2592000, :key=>"a-stupid-cookie-name", :secret=>"change_me"} --> Hash
419
+ rack.request.query_string: --> String
420
+ rack.request.query_hash: {} --> Hash
421
+ rack.request.form_input: #<StringIO:0x000001014e1298> --> StringIO
422
+ rack.request.form_hash: {} --> Hash
423
+ rack.request.form_vars: --> String
424
+
425
+
426
+ ===============
427
+ STATUS: 200
428
+ HEADERS: {"Content-Type"=>"text/html", "Content-Length"=>"5"}
429
+ BODY: ["Hello"]
430
+ =====[SESSION]=====
431
+ ===================
432
+ REQUEST [1259876639] END
433
+ REQUEST [1259876639] START
434
+ METHOD: GET
435
+ URL: http://localhost:9999//
436
+ =====[ENV]=====
437
+ SERVER_SOFTWARE: thin 1.2.5 codename This Is Not A Web Server --> String
438
+ SERVER_NAME: localhost --> String
439
+ rack.input: #<StringIO:0x0000010147bf68> --> StringIO
440
+ rack.version: [1, 0] --> Array
441
+ rack.errors: #<IO:0x00000100888670> --> IO
442
+ rack.multithread: true --> TrueClass
443
+ rack.multiprocess: false --> FalseClass
444
+ rack.run_once: false --> FalseClass
445
+ REQUEST_METHOD: GET --> String
446
+ REQUEST_PATH: / --> String
447
+ PATH_INFO: / --> String
448
+ REQUEST_URI: / --> String
449
+ HTTP_VERSION: HTTP/1.1 --> String
450
+ HTTP_HOST: localhost:9999 --> String
451
+ HTTP_USER_AGENT: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en; rv:1.9.0.15) Gecko/2009102617 Camino/2.0 (like Firefox/3.0.15) --> String
452
+ HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 --> String
453
+ HTTP_ACCEPT_LANGUAGE: en-US,en;q=0.9,ja;q=0.8,fr;q=0.7,de;q=0.6,es;q=0.5,it;q=0.4,pt;q=0.3,pt-pt;q=0.2,nl;q=0.1 --> String
454
+ HTTP_ACCEPT_ENCODING: gzip,deflate --> String
455
+ HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7 --> String
456
+ HTTP_KEEP_ALIVE: 300 --> String
457
+ HTTP_CONNECTION: keep-alive --> String
458
+ HTTP_COOKIE: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
459
+ HTTP_CACHE_CONTROL: max-age=0 --> String
460
+ GATEWAY_INTERFACE: CGI/1.2 --> String
461
+ SERVER_PORT: 9999 --> String
462
+ QUERY_STRING: --> String
463
+ SERVER_PROTOCOL: HTTP/1.1 --> String
464
+ rack.url_scheme: http --> String
465
+ SCRIPT_NAME: --> String
466
+ REMOTE_ADDR: 127.0.0.1 --> String
467
+ async.callback: #<Method: Thin::Connection#post_process> --> Method
468
+ async.close: #<EventMachine::DefaultDeferrable:0x00000101470508> --> EventMachine::DefaultDeferrable
469
+ rack.request.cookie_string: a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
470
+ rack.request.cookie_hash: {"a-stupid-cookie-name"=>"BAh7AA==\n--ab7689c618445bb17b626741588b50c0500c8f79"} --> Hash
471
+ rack.session: {} --> Hash
472
+ rack.session.options: {:domain=>nil, :path=>"/", :expire_after=>2592000, :key=>"a-stupid-cookie-name", :secret=>"change_me"} --> Hash
473
+ rack.request.query_string: --> String
474
+ rack.request.query_hash: {} --> Hash
475
+ rack.request.form_input: #<StringIO:0x0000010147bf68> --> StringIO
476
+ rack.request.form_hash: {} --> Hash
477
+ rack.request.form_vars: --> String
478
+
479
+
480
+ ===============
481
+ STATUS: 200
482
+ HEADERS: {"Content-Type"=>"text/html", "Content-Length"=>"5"}
483
+ BODY: ["Hello"]
484
+ =====[SESSION]=====
485
+ ===================
486
+ REQUEST [1259876639] END
487
+ REQUEST [1259876657] START
488
+ METHOD: GET
489
+ URL: http://localhost:9999//favicon.ico
490
+ =====[ENV]=====
491
+ SERVER_SOFTWARE: thin 1.2.5 codename This Is Not A Web Server --> String
492
+ SERVER_NAME: localhost --> String
493
+ rack.input: #<StringIO:0x000001012c4900> --> StringIO
494
+ rack.version: [1, 0] --> Array
495
+ rack.errors: #<IO:0x00000100888670> --> IO
496
+ rack.multithread: true --> TrueClass
497
+ rack.multiprocess: false --> FalseClass
498
+ rack.run_once: false --> FalseClass
499
+ REQUEST_METHOD: GET --> String
500
+ REQUEST_PATH: /favicon.ico --> String
501
+ PATH_INFO: /favicon.ico --> String
502
+ REQUEST_URI: /favicon.ico --> String
503
+ HTTP_VERSION: HTTP/1.1 --> String
504
+ HTTP_HOST: localhost:9999 --> String
505
+ HTTP_USER_AGENT: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 --> String
506
+ HTTP_ACCEPT: image/png,image/*;q=0.8,*/*;q=0.5 --> String
507
+ HTTP_ACCEPT_LANGUAGE: en-us,en;q=0.5 --> String
508
+ HTTP_ACCEPT_ENCODING: gzip,deflate --> String
509
+ HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7 --> String
510
+ HTTP_KEEP_ALIVE: 300 --> String
511
+ HTTP_CONNECTION: keep-alive --> String
512
+ HTTP_COOKIE: sifrFetch=true; a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
513
+ GATEWAY_INTERFACE: CGI/1.2 --> String
514
+ SERVER_PORT: 9999 --> String
515
+ QUERY_STRING: --> String
516
+ SERVER_PROTOCOL: HTTP/1.1 --> String
517
+ rack.url_scheme: http --> String
518
+ SCRIPT_NAME: --> String
519
+ REMOTE_ADDR: 127.0.0.1 --> String
520
+ async.callback: #<Method: Thin::Connection#post_process> --> Method
521
+ async.close: #<EventMachine::DefaultDeferrable:0x000001012bf688> --> EventMachine::DefaultDeferrable
522
+ rack.request.cookie_string: sifrFetch=true; a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
523
+ rack.request.cookie_hash: {"sifrFetch"=>"true", "a-stupid-cookie-name"=>"BAh7AA==\n--ab7689c618445bb17b626741588b50c0500c8f79"} --> Hash
524
+ rack.session: {} --> Hash
525
+ rack.session.options: {:domain=>nil, :path=>"/", :expire_after=>2592000, :key=>"a-stupid-cookie-name", :secret=>"change_me"} --> Hash
526
+ rack.request.query_string: --> String
527
+ rack.request.query_hash: {} --> Hash
528
+ rack.request.form_input: #<StringIO:0x000001012c4900> --> StringIO
529
+ rack.request.form_hash: {} --> Hash
530
+ rack.request.form_vars: --> String
531
+ sinatra.error: Sinatra::NotFound --> Sinatra::NotFound
532
+
533
+
534
+ none
535
+ favicon.ico
536
+ ===============
537
+ STATUS: 404
538
+ HEADERS: {"Content-Type"=>"text/html", "Content-Length"=>"420"}
539
+ BODY: ["<!DOCTYPE html>\n<html>\n<head>\n <style type=\"text/css\">\n body { text-align:center;font-family:helvetica,arial;font-size:22px;\n color:#888;margin:20px}\n #c {margin:0 auto;width:500px;text-align:left}\n </style>\n</head>\n<body>\n <h2>Sinatra doesn't know this ditty.</h2>\n <img src='/__sinatra__/404.png'>\n <div id=\"c\">\n Try this:\n <pre>get '/favicon.ico' do\n \"Hello World\"\nend</pre>\n </div>\n</body>\n</html>\n"]
540
+ =====[SESSION]=====
541
+ ===================
542
+ REQUEST [1259876657] END
543
+ REQUEST [1259876660] START
544
+ METHOD: GET
545
+ URL: http://localhost:9999//favicon.ico
546
+ =====[ENV]=====
547
+ SERVER_SOFTWARE: thin 1.2.5 codename This Is Not A Web Server --> String
548
+ SERVER_NAME: localhost --> String
549
+ rack.input: #<StringIO:0x00000101228e88> --> StringIO
550
+ rack.version: [1, 0] --> Array
551
+ rack.errors: #<IO:0x00000100888670> --> IO
552
+ rack.multithread: true --> TrueClass
553
+ rack.multiprocess: false --> FalseClass
554
+ rack.run_once: false --> FalseClass
555
+ REQUEST_METHOD: GET --> String
556
+ REQUEST_PATH: /favicon.ico --> String
557
+ PATH_INFO: /favicon.ico --> String
558
+ REQUEST_URI: /favicon.ico --> String
559
+ HTTP_VERSION: HTTP/1.1 --> String
560
+ HTTP_HOST: localhost:9999 --> String
561
+ HTTP_USER_AGENT: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 --> String
562
+ HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 --> String
563
+ HTTP_ACCEPT_LANGUAGE: en-us,en;q=0.5 --> String
564
+ HTTP_ACCEPT_ENCODING: gzip,deflate --> String
565
+ HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7 --> String
566
+ HTTP_KEEP_ALIVE: 300 --> String
567
+ HTTP_CONNECTION: keep-alive --> String
568
+ HTTP_COOKIE: sifrFetch=true; a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
569
+ GATEWAY_INTERFACE: CGI/1.2 --> String
570
+ SERVER_PORT: 9999 --> String
571
+ QUERY_STRING: --> String
572
+ SERVER_PROTOCOL: HTTP/1.1 --> String
573
+ rack.url_scheme: http --> String
574
+ SCRIPT_NAME: --> String
575
+ REMOTE_ADDR: 127.0.0.1 --> String
576
+ async.callback: #<Method: Thin::Connection#post_process> --> Method
577
+ async.close: #<EventMachine::DefaultDeferrable:0x00000101227330> --> EventMachine::DefaultDeferrable
578
+ rack.request.cookie_string: sifrFetch=true; a-stupid-cookie-name=BAh7AA%3D%3D%0A--ab7689c618445bb17b626741588b50c0500c8f79 --> String
579
+ rack.request.cookie_hash: {"sifrFetch"=>"true", "a-stupid-cookie-name"=>"BAh7AA==\n--ab7689c618445bb17b626741588b50c0500c8f79"} --> Hash
580
+ rack.session: {} --> Hash
581
+ rack.session.options: {:domain=>nil, :path=>"/", :expire_after=>2592000, :key=>"a-stupid-cookie-name", :secret=>"change_me"} --> Hash
582
+ rack.request.query_string: --> String
583
+ rack.request.query_hash: {} --> Hash
584
+ rack.request.form_input: #<StringIO:0x00000101228e88> --> StringIO
585
+ rack.request.form_hash: {} --> Hash
586
+ rack.request.form_vars: --> String
587
+ sinatra.error: Sinatra::NotFound --> Sinatra::NotFound
588
+
589
+
590
+ none
591
+ favicon.ico
592
+ ===============
593
+ STATUS: 404
594
+ HEADERS: {"Content-Type"=>"text/html", "Content-Length"=>"420"}
595
+ BODY: ["<!DOCTYPE html>\n<html>\n<head>\n <style type=\"text/css\">\n body { text-align:center;font-family:helvetica,arial;font-size:22px;\n color:#888;margin:20px}\n #c {margin:0 auto;width:500px;text-align:left}\n </style>\n</head>\n<body>\n <h2>Sinatra doesn't know this ditty.</h2>\n <img src='/__sinatra__/404.png'>\n <div id=\"c\">\n Try this:\n <pre>get '/favicon.ico' do\n \"Hello World\"\nend</pre>\n </div>\n</body>\n</html>\n"]
596
+ =====[SESSION]=====
597
+ ===================
598
+ REQUEST [1259876660] END