shadow 0 → 1

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/CHANGELOG CHANGED
@@ -1,4 +1,5 @@
1
1
 
2
2
  Shadow changelog
3
3
 
4
+ 1. all done
4
5
  0. staking out the gem name
data/Manifest CHANGED
@@ -3,5 +3,13 @@
3
3
  ./Manifest
4
4
  ./README
5
5
  ./Rakefile
6
+ ./bin/shadow
6
7
  ./lib/shadow/rake_task_redefine_task.rb
7
8
  ./lib/shadow.rb
9
+ ./test/database.yml
10
+ ./test/integration/test_shadow.rb
11
+ ./test/log/mongrel_debug/access.log
12
+ ./test/log/mongrel_debug/files.log
13
+ ./test/log/mongrel_debug/objects.log
14
+ ./test/log/mongrel_debug/threads.log
15
+ ./test/schema.rb
data/Rakefile CHANGED
@@ -40,5 +40,5 @@ end
40
40
 
41
41
  desc 'Run tests.'
42
42
  Rake::Task.redefine_task("test") do
43
- system "ruby -Ibin:lib:test test/unit/test_shadow.rb #{ENV['METHOD'] ? "--name=#{ENV['METHOD']}" : ""}"
43
+ system "ruby -Ibin:lib:test test/integration/test_shadow.rb #{ENV['METHOD'] ? "--name=#{ENV['METHOD']}" : ""}"
44
44
  end
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'shadow'
5
+
6
+ if ARGV.size < 3
7
+ puts "example: shadow config/database.yml development my_app"
8
+ else
9
+ d = ARGV.delete "-d"
10
+ s = Shadow.new(*(ARGV[0..4]))
11
+ Process.wait(s.pid) unless d
12
+ end
@@ -0,0 +1,70 @@
1
+
2
+ require 'rubygems'
3
+ require 'mongrel'
4
+ require 'active_record'
5
+ require 'sync'
6
+
7
+ class Shadow < Mongrel::HttpHandler
8
+ attr_reader :pid
9
+
10
+ def initialize(config, environment, name, address = '0.0.0.0', port = '2001', sleep = nil)
11
+ ActiveRecord::Base.establish_connection(YAML.load_file(config)[environment.to_s])
12
+ ActiveRecord::Base.allow_concurrency = false
13
+ @sleep = sleep
14
+ @sync = Sync.new
15
+ @pid = serve(self, name, address, port)
16
+ end
17
+
18
+ def process(request, response)
19
+ sleep(rand * @sleep) if @sleep
20
+ table, id = request.params["PATH_INFO"].split("/")
21
+
22
+ obj, code = nil, 200
23
+ @sync.synchronize(:EX) do # fuckin AR
24
+ begin
25
+ obj = find(table, id)
26
+ case request.params["REQUEST_METHOD"]
27
+ when "PUT", "POST"
28
+ obj.update_attributes(YAML.load(request.body.read))
29
+ obj.save!
30
+ when "DELETE"
31
+ obj.destroy
32
+ end
33
+ obj = obj.attributes
34
+ rescue Object => e
35
+ obj, code = e.to_s, 400
36
+ end
37
+ end
38
+
39
+ response.start(code) do |head, out|
40
+ head["Content-Type"] = "text/yaml"
41
+ out.write obj.to_yaml
42
+ end
43
+ end
44
+
45
+ def find(table, id)
46
+ klass = Class.new(ActiveRecord::Base) { self.table_name = table }
47
+ id ? klass.find(id) : klass.new
48
+ end
49
+
50
+ ### configure mongrel ###
51
+
52
+ def serve(me, name, address, port)
53
+ fork do
54
+ Mongrel::Configurator.new :host => address, :pid_file => "/tmp/shadow.#{name}.pid" do
55
+ listener :port => port do
56
+ puts "** Serving at #{address}:#{port}/#{name}/ (pid #{Process.pid})"
57
+ uri "/#{name}/", :handler => me
58
+ setup_signals or run and write_pid_file and join
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+ ### debugging ###
65
+
66
+ def self.d
67
+ require 'ruby-debug'; Debugger.start; debugger
68
+ end
69
+
70
+ end
@@ -0,0 +1,7 @@
1
+
2
+ test:
3
+ adapter: mysql
4
+ database: shadow_test
5
+ host: localhost
6
+ username: root
7
+ password:
@@ -0,0 +1,84 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'test/unit'
5
+ require 'rfuzz/session'
6
+
7
+ DIR = File.dirname(__FILE__)
8
+ require "#{DIR}/../../lib/shadow"
9
+
10
+ class ShadowText < Test::Unit::TestCase
11
+ APP, HOST, PORT = "menagerie", "0.0.0.0", 2001
12
+ $client = RFuzz::HttpClient.new(HOST, PORT)
13
+ $server = Shadow.new("#{DIR}/../database.yml", "test", APP, HOST, PORT, 1)
14
+ require "#{DIR}/../schema"
15
+
16
+ def test_get
17
+ # successful
18
+ response = $client.get("/#{APP}/cats/1")
19
+ assert_match /name: Blue/, response.http_body
20
+ assert_equal "text/yaml", response["CONTENT_TYPE"]
21
+ assert_equal "200", response.http_status
22
+ # missing
23
+ response = $client.get("/#{APP}/cats/25")
24
+ assert_match /Couldn't find/, response.http_body
25
+ assert_equal "400", response.http_status
26
+ end
27
+
28
+ def test_put
29
+ response = $client.put("/#{APP}/cats", :body => {"name" => "Fluffy", "size" => 4}.to_yaml)
30
+ assert YAML.load(response.http_body)["id"]
31
+ end
32
+
33
+ def test_post
34
+ response = $client.put("/#{APP}/cats/2", :body => {"name" => "Tabby"}.to_yaml)
35
+ assert_equal "Tabby", YAML.load(response.http_body)["name"]
36
+ response = $client.get("/#{APP}/cats/2")
37
+ assert_equal "Tabby", YAML.load(response.http_body)["name"]
38
+ end
39
+
40
+ def test_delete
41
+ response = $client.delete("/#{APP}/dogs/1")
42
+ assert_match /name: Rover/, response.http_body
43
+ response = $client.delete("/#{APP}/dogs/1")
44
+ assert_match /Couldn't find/, response.http_body
45
+ assert_equal "400", response.http_status
46
+ end
47
+
48
+ def test_concurrent_reads
49
+ correct_result = $client.get("/#{APP}/cats/1").http_body
50
+ assert_nothing_raised do
51
+ pids = []
52
+ 100.times do
53
+ pids << fork do # can't use Thread because RFuzz isn't threadsafe?
54
+ result = $client.get("/#{APP}/cats/1").http_body
55
+ puts "Response error: #{result}" unless correct_result == result
56
+ end
57
+ end
58
+ pids.each {|pid| Process.wait(pid)}
59
+ end
60
+ end
61
+
62
+ def test_concurrent_writes
63
+ assert_nothing_raised do
64
+ pids = []
65
+ 100.times do
66
+ pids << fork do
67
+ result = $client.put("/#{APP}/dogs",
68
+ :body => {"name" => Process.pid.to_s}.to_yaml)
69
+ id = YAML.load(result.http_body)["id"]
70
+ sleep(2)
71
+ result = $client.get("/#{APP}/dogs/#{id}").http_body
72
+ puts "Response error: #{result.inspect}" unless result =~ /#{Process.pid}/
73
+ end
74
+ end
75
+ pids.each {|pid| Process.wait(pid)}
76
+ end
77
+ end
78
+
79
+ def test_zzzz_im_asleep_zzzzz
80
+ Process.kill(9, $server.pid)
81
+ assert "dead"
82
+ end
83
+
84
+ end
@@ -0,0 +1,7 @@
1
+ # Logfile created on Tue May 15 01:44:24 -0700 2007 by /
2
+ TRACING ON Tue May 15 01:44:24 -0700 2007
3
+ TRACING ON Tue May 15 01:45:48 -0700 2007
4
+ TRACING ON Tue May 15 01:46:03 -0700 2007
5
+ TRACING ON Tue May 15 01:46:19 -0700 2007
6
+ TRACING ON Tue May 15 01:46:41 -0700 2007
7
+ TRACING ON Tue May 15 01:47:30 -0700 2007
@@ -0,0 +1,575 @@
1
+ # Logfile created on Tue May 15 01:44:24 -0700 2007 by /
2
+ TRACING ON Tue May 15 01:44:24 -0700 2007
3
+ TRACING ON Tue May 15 01:45:48 -0700 2007
4
+ TRACING ON Tue May 15 01:46:03 -0700 2007
5
+ TRACING ON Tue May 15 01:46:19 -0700 2007
6
+ TRACING ON Tue May 15 01:46:41 -0700 2007
7
+ TRACING ON Tue May 15 01:47:30 -0700 2007
8
+ Tue May 15 01:47:30 -0700 2007 FILES OPEN BEFORE REQUEST dogs/1
9
+ ---
10
+ log/mongrel_debug/objects.log: 1
11
+ log/mongrel_debug/files.log: 1
12
+ log/mongrel_debug/threads.log: 1
13
+ log/mongrel_debug/access.log: 1
14
+ /tmp/shadow.menagerie.pid: 1
15
+
16
+ Tue May 15 01:47:31 -0700 2007 FILES OPEN BEFORE REQUEST dogs/1
17
+ ---
18
+ log/mongrel_debug/objects.log: 1
19
+ log/mongrel_debug/files.log: 1
20
+ log/mongrel_debug/threads.log: 1
21
+ log/mongrel_debug/access.log: 1
22
+ /tmp/shadow.menagerie.pid: 1
23
+
24
+ Tue May 15 01:47:31 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
25
+ ---
26
+ log/mongrel_debug/objects.log: 1
27
+ log/mongrel_debug/files.log: 1
28
+ log/mongrel_debug/threads.log: 1
29
+ log/mongrel_debug/access.log: 1
30
+ /tmp/shadow.menagerie.pid: 1
31
+
32
+ Tue May 15 01:47:32 -0700 2007 FILES OPEN BEFORE REQUEST cats/25
33
+ ---
34
+ log/mongrel_debug/objects.log: 1
35
+ log/mongrel_debug/files.log: 1
36
+ log/mongrel_debug/threads.log: 1
37
+ log/mongrel_debug/access.log: 1
38
+ /tmp/shadow.menagerie.pid: 1
39
+
40
+ Tue May 15 01:47:33 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
41
+ ---
42
+ log/mongrel_debug/objects.log: 1
43
+ log/mongrel_debug/files.log: 1
44
+ log/mongrel_debug/threads.log: 1
45
+ log/mongrel_debug/access.log: 1
46
+ /tmp/shadow.menagerie.pid: 1
47
+
48
+ Tue May 15 01:47:33 -0700 2007 FILES OPEN BEFORE REQUEST cats
49
+ ---
50
+ log/mongrel_debug/objects.log: 1
51
+ log/mongrel_debug/files.log: 1
52
+ log/mongrel_debug/threads.log: 1
53
+ log/mongrel_debug/access.log: 1
54
+ /tmp/shadow.menagerie.pid: 1
55
+
56
+ Tue May 15 01:47:34 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
57
+ ---
58
+ log/mongrel_debug/objects.log: 1
59
+ log/mongrel_debug/files.log: 1
60
+ log/mongrel_debug/threads.log: 1
61
+ log/mongrel_debug/access.log: 1
62
+ /tmp/shadow.menagerie.pid: 1
63
+
64
+ Tue May 15 01:47:34 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
65
+ Tue May 15 01:47:34 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
66
+ ---
67
+ log/mongrel_debug/objects.log: 1
68
+ log/mongrel_debug/files.log: 1
69
+ log/mongrel_debug/threads.log: 1
70
+ log/mongrel_debug/access.log: 1
71
+ /tmp/shadow.menagerie.pid: 1
72
+
73
+ Tue May 15 01:47:34 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
74
+ Tue May 15 01:47:34 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
75
+ ---
76
+ log/mongrel_debug/objects.log: 1
77
+ log/mongrel_debug/files.log: 1
78
+ log/mongrel_debug/threads.log: 1
79
+ log/mongrel_debug/access.log: 1
80
+ /tmp/shadow.menagerie.pid: 1
81
+
82
+ Tue May 15 01:47:34 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
83
+ ---
84
+ log/mongrel_debug/objects.log: 1
85
+ log/mongrel_debug/files.log: 1
86
+ log/mongrel_debug/threads.log: 1
87
+ log/mongrel_debug/access.log: 1
88
+ /tmp/shadow.menagerie.pid: 1
89
+
90
+ Tue May 15 01:47:34 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
91
+ Tue May 15 01:47:34 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
92
+ Tue May 15 01:47:34 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
93
+ ---
94
+ log/mongrel_debug/objects.log: 1
95
+ log/mongrel_debug/files.log: 1
96
+ log/mongrel_debug/threads.log: 1
97
+ log/mongrel_debug/access.log: 1
98
+ /tmp/shadow.menagerie.pid: 1
99
+
100
+ Tue May 15 01:47:35 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
101
+ Tue May 15 01:47:34 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
102
+ ---
103
+ log/mongrel_debug/objects.log: 1
104
+ log/mongrel_debug/files.log: 1
105
+ log/mongrel_debug/threads.log: 1
106
+ log/mongrel_debug/access.log: 1
107
+ /tmp/shadow.menagerie.pid: 1
108
+
109
+ Tue May 15 01:47:34 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
110
+ Tue May 15 01:47:34 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
111
+ ---
112
+ log/mongrel_debug/objects.log: 1
113
+ log/mongrel_debug/files.log: 1
114
+ log/mongrel_debug/threads.log: 1
115
+ log/mongrel_debug/access.log: 1
116
+ /tmp/shadow.menagerie.pid: 1
117
+
118
+ Tue May 15 01:47:35 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
119
+ ---
120
+ log/mongrel_debug/objects.log: 1
121
+ log/mongrel_debug/files.log: 1
122
+ log/mongrel_debug/threads.log: 1
123
+ log/mongrel_debug/access.log: 1
124
+ /tmp/shadow.menagerie.pid: 1
125
+
126
+ Tue May 15 01:47:34 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
127
+ Tue May 15 01:47:35 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
128
+ ---
129
+ log/mongrel_debug/objects.log: 1
130
+ log/mongrel_debug/files.log: 1
131
+ log/mongrel_debug/threads.log: 1
132
+ log/mongrel_debug/access.log: 1
133
+ /tmp/shadow.menagerie.pid: 1
134
+
135
+ Tue May 15 01:47:34 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
136
+ Tue May 15 01:47:35 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
137
+ ---
138
+ log/mongrel_debug/objects.log: 1
139
+ log/mongrel_debug/files.log: 1
140
+ log/mongrel_debug/threads.log: 1
141
+ log/mongrel_debug/access.log: 1
142
+ /tmp/shadow.menagerie.pid: 1
143
+
144
+ Tue May 15 01:47:35 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
145
+ ---
146
+ log/mongrel_debug/objects.log: 1
147
+ log/mongrel_debug/files.log: 1
148
+ log/mongrel_debug/threads.log: 1
149
+ log/mongrel_debug/access.log: 1
150
+ /tmp/shadow.menagerie.pid: 1
151
+
152
+ Tue May 15 01:47:35 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
153
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
154
+ ---
155
+ log/mongrel_debug/objects.log: 1
156
+ log/mongrel_debug/files.log: 1
157
+ log/mongrel_debug/threads.log: 1
158
+ log/mongrel_debug/access.log: 1
159
+ /tmp/shadow.menagerie.pid: 1
160
+
161
+ Tue May 15 01:47:35 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
162
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
163
+ ---
164
+ log/mongrel_debug/objects.log: 1
165
+ log/mongrel_debug/files.log: 1
166
+ log/mongrel_debug/threads.log: 1
167
+ log/mongrel_debug/access.log: 1
168
+ /tmp/shadow.menagerie.pid: 1
169
+
170
+ Tue May 15 01:47:34 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
171
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
172
+ ---
173
+ log/mongrel_debug/objects.log: 1
174
+ log/mongrel_debug/files.log: 1
175
+ log/mongrel_debug/threads.log: 1
176
+ log/mongrel_debug/access.log: 1
177
+ /tmp/shadow.menagerie.pid: 1
178
+
179
+ Tue May 15 01:47:35 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
180
+ Tue May 15 01:47:35 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
181
+ Tue May 15 01:47:35 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
182
+ ---
183
+ log/mongrel_debug/objects.log: 1
184
+ log/mongrel_debug/files.log: 1
185
+ log/mongrel_debug/threads.log: 1
186
+ log/mongrel_debug/access.log: 1
187
+ /tmp/shadow.menagerie.pid: 1
188
+
189
+ Tue May 15 01:47:35 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
190
+ ---
191
+ log/mongrel_debug/objects.log: 1
192
+ log/mongrel_debug/files.log: 1
193
+ log/mongrel_debug/threads.log: 1
194
+ log/mongrel_debug/access.log: 1
195
+ /tmp/shadow.menagerie.pid: 1
196
+
197
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
198
+ Tue May 15 01:47:35 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
199
+ ---
200
+ log/mongrel_debug/objects.log: 1
201
+ log/mongrel_debug/files.log: 1
202
+ log/mongrel_debug/threads.log: 1
203
+ log/mongrel_debug/access.log: 1
204
+ /tmp/shadow.menagerie.pid: 1
205
+
206
+ Tue May 15 01:47:35 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
207
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
208
+ ---
209
+ log/mongrel_debug/objects.log: 1
210
+ log/mongrel_debug/files.log: 1
211
+ log/mongrel_debug/threads.log: 1
212
+ log/mongrel_debug/access.log: 1
213
+ /tmp/shadow.menagerie.pid: 1
214
+
215
+ Tue May 15 01:47:35 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
216
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
217
+ ---
218
+ log/mongrel_debug/objects.log: 1
219
+ log/mongrel_debug/files.log: 1
220
+ log/mongrel_debug/threads.log: 1
221
+ log/mongrel_debug/access.log: 1
222
+ /tmp/shadow.menagerie.pid: 1
223
+
224
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
225
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
226
+ Tue May 15 01:47:35 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
227
+ ---
228
+ log/mongrel_debug/objects.log: 1
229
+ log/mongrel_debug/files.log: 1
230
+ log/mongrel_debug/threads.log: 1
231
+ log/mongrel_debug/access.log: 1
232
+ /tmp/shadow.menagerie.pid: 1
233
+
234
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
235
+ ---
236
+ log/mongrel_debug/objects.log: 1
237
+ log/mongrel_debug/files.log: 1
238
+ log/mongrel_debug/threads.log: 1
239
+ log/mongrel_debug/access.log: 1
240
+ /tmp/shadow.menagerie.pid: 1
241
+
242
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
243
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
244
+ Tue May 15 01:47:35 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
245
+ ---
246
+ log/mongrel_debug/objects.log: 1
247
+ log/mongrel_debug/files.log: 1
248
+ log/mongrel_debug/threads.log: 1
249
+ log/mongrel_debug/access.log: 1
250
+ /tmp/shadow.menagerie.pid: 1
251
+
252
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
253
+ ---
254
+ log/mongrel_debug/objects.log: 1
255
+ log/mongrel_debug/files.log: 1
256
+ log/mongrel_debug/threads.log: 1
257
+ log/mongrel_debug/access.log: 1
258
+ /tmp/shadow.menagerie.pid: 1
259
+
260
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
261
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
262
+ Tue May 15 01:47:35 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
263
+ ---
264
+ log/mongrel_debug/objects.log: 1
265
+ log/mongrel_debug/files.log: 1
266
+ log/mongrel_debug/threads.log: 1
267
+ log/mongrel_debug/access.log: 1
268
+ /tmp/shadow.menagerie.pid: 1
269
+
270
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
271
+ ---
272
+ log/mongrel_debug/objects.log: 1
273
+ log/mongrel_debug/files.log: 1
274
+ log/mongrel_debug/threads.log: 1
275
+ log/mongrel_debug/access.log: 1
276
+ /tmp/shadow.menagerie.pid: 1
277
+
278
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
279
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
280
+ ---
281
+ log/mongrel_debug/objects.log: 1
282
+ log/mongrel_debug/files.log: 1
283
+ log/mongrel_debug/threads.log: 1
284
+ log/mongrel_debug/access.log: 1
285
+ /tmp/shadow.menagerie.pid: 1
286
+
287
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
288
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
289
+ ---
290
+ log/mongrel_debug/objects.log: 1
291
+ log/mongrel_debug/files.log: 1
292
+ log/mongrel_debug/threads.log: 1
293
+ log/mongrel_debug/access.log: 1
294
+ /tmp/shadow.menagerie.pid: 1
295
+
296
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
297
+ ---
298
+ log/mongrel_debug/objects.log: 1
299
+ log/mongrel_debug/files.log: 1
300
+ log/mongrel_debug/threads.log: 1
301
+ log/mongrel_debug/access.log: 1
302
+ /tmp/shadow.menagerie.pid: 1
303
+
304
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
305
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
306
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
307
+ ---
308
+ log/mongrel_debug/objects.log: 1
309
+ log/mongrel_debug/files.log: 1
310
+ log/mongrel_debug/threads.log: 1
311
+ log/mongrel_debug/access.log: 1
312
+ /tmp/shadow.menagerie.pid: 1
313
+
314
+ Tue May 15 01:47:35 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
315
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
316
+ ---
317
+ log/mongrel_debug/objects.log: 1
318
+ log/mongrel_debug/files.log: 1
319
+ log/mongrel_debug/threads.log: 1
320
+ log/mongrel_debug/access.log: 1
321
+ /tmp/shadow.menagerie.pid: 1
322
+
323
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
324
+ ---
325
+ log/mongrel_debug/objects.log: 1
326
+ log/mongrel_debug/files.log: 1
327
+ log/mongrel_debug/threads.log: 1
328
+ log/mongrel_debug/access.log: 1
329
+ /tmp/shadow.menagerie.pid: 1
330
+
331
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
332
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
333
+ Tue May 15 01:47:35 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
334
+ ---
335
+ log/mongrel_debug/objects.log: 1
336
+ log/mongrel_debug/files.log: 1
337
+ log/mongrel_debug/threads.log: 1
338
+ log/mongrel_debug/access.log: 1
339
+ /tmp/shadow.menagerie.pid: 1
340
+
341
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
342
+ ---
343
+ log/mongrel_debug/objects.log: 1
344
+ log/mongrel_debug/files.log: 1
345
+ log/mongrel_debug/threads.log: 1
346
+ log/mongrel_debug/access.log: 1
347
+ /tmp/shadow.menagerie.pid: 1
348
+
349
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
350
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
351
+ Tue May 15 01:47:36 -0700 2007 FILES OPEN BEFORE REQUEST cats/1
352
+ ---
353
+ log/mongrel_debug/objects.log: 1
354
+ log/mongrel_debug/files.log: 1
355
+ log/mongrel_debug/threads.log: 1
356
+ log/mongrel_debug/access.log: 1
357
+ /tmp/shadow.menagerie.pid: 1
358
+
359
+ ---
360
+ log/mongrel_debug/objects.log: 1
361
+ log/mongrel_debug/files.log: 1
362
+ log/mongrel_debug/threads.log: 1
363
+ log/mongrel_debug/access.log: 1
364
+ /tmp/shadow.menagerie.pid: 1
365
+
366
+ ---
367
+ log/mongrel_debug/objects.log: 1
368
+ log/mongrel_debug/files.log: 1
369
+ log/mongrel_debug/threads.log: 1
370
+ log/mongrel_debug/access.log: 1
371
+ /tmp/shadow.menagerie.pid: 1
372
+
373
+ ---
374
+ log/mongrel_debug/objects.log: 1
375
+ log/mongrel_debug/files.log: 1
376
+ log/mongrel_debug/threads.log: 1
377
+ log/mongrel_debug/access.log: 1
378
+ /tmp/shadow.menagerie.pid: 1
379
+
380
+ ---
381
+ log/mongrel_debug/objects.log: 1
382
+ log/mongrel_debug/files.log: 1
383
+ log/mongrel_debug/threads.log: 1
384
+ log/mongrel_debug/access.log: 1
385
+ /tmp/shadow.menagerie.pid: 1
386
+
387
+ ---
388
+ log/mongrel_debug/objects.log: 1
389
+ log/mongrel_debug/files.log: 1
390
+ log/mongrel_debug/threads.log: 1
391
+ log/mongrel_debug/access.log: 1
392
+ /tmp/shadow.menagerie.pid: 1
393
+
394
+ ---
395
+ log/mongrel_debug/objects.log: 1
396
+ log/mongrel_debug/files.log: 1
397
+ log/mongrel_debug/threads.log: 1
398
+ log/mongrel_debug/access.log: 1
399
+ /tmp/shadow.menagerie.pid: 1
400
+
401
+ ---
402
+ log/mongrel_debug/objects.log: 1
403
+ log/mongrel_debug/files.log: 1
404
+ log/mongrel_debug/threads.log: 1
405
+ log/mongrel_debug/access.log: 1
406
+ /tmp/shadow.menagerie.pid: 1
407
+
408
+ ---
409
+ log/mongrel_debug/objects.log: 1
410
+ log/mongrel_debug/files.log: 1
411
+ log/mongrel_debug/threads.log: 1
412
+ log/mongrel_debug/access.log: 1
413
+ /tmp/shadow.menagerie.pid: 1
414
+
415
+ ---
416
+ log/mongrel_debug/objects.log: 1
417
+ log/mongrel_debug/files.log: 1
418
+ log/mongrel_debug/threads.log: 1
419
+ log/mongrel_debug/access.log: 1
420
+ /tmp/shadow.menagerie.pid: 1
421
+
422
+ ---
423
+ log/mongrel_debug/objects.log: 1
424
+ log/mongrel_debug/files.log: 1
425
+ log/mongrel_debug/threads.log: 1
426
+ log/mongrel_debug/access.log: 1
427
+ /tmp/shadow.menagerie.pid: 1
428
+
429
+ ---
430
+ log/mongrel_debug/objects.log: 1
431
+ log/mongrel_debug/files.log: 1
432
+ log/mongrel_debug/threads.log: 1
433
+ log/mongrel_debug/access.log: 1
434
+ /tmp/shadow.menagerie.pid: 1
435
+
436
+ ---
437
+ log/mongrel_debug/objects.log: 1
438
+ log/mongrel_debug/files.log: 1
439
+ log/mongrel_debug/threads.log: 1
440
+ log/mongrel_debug/access.log: 1
441
+ /tmp/shadow.menagerie.pid: 1
442
+
443
+ ---
444
+ log/mongrel_debug/objects.log: 1
445
+ log/mongrel_debug/files.log: 1
446
+ log/mongrel_debug/threads.log: 1
447
+ log/mongrel_debug/access.log: 1
448
+ /tmp/shadow.menagerie.pid: 1
449
+
450
+ ---
451
+ log/mongrel_debug/objects.log: 1
452
+ log/mongrel_debug/files.log: 1
453
+ log/mongrel_debug/threads.log: 1
454
+ log/mongrel_debug/access.log: 1
455
+ /tmp/shadow.menagerie.pid: 1
456
+
457
+ ---
458
+ log/mongrel_debug/objects.log: 1
459
+ log/mongrel_debug/files.log: 1
460
+ log/mongrel_debug/threads.log: 1
461
+ log/mongrel_debug/access.log: 1
462
+ /tmp/shadow.menagerie.pid: 1
463
+
464
+ ---
465
+ log/mongrel_debug/objects.log: 1
466
+ log/mongrel_debug/files.log: 1
467
+ log/mongrel_debug/threads.log: 1
468
+ log/mongrel_debug/access.log: 1
469
+ /tmp/shadow.menagerie.pid: 1
470
+
471
+ ---
472
+ log/mongrel_debug/objects.log: 1
473
+ log/mongrel_debug/files.log: 1
474
+ log/mongrel_debug/threads.log: 1
475
+ log/mongrel_debug/access.log: 1
476
+ /tmp/shadow.menagerie.pid: 1
477
+
478
+ ---
479
+ log/mongrel_debug/objects.log: 1
480
+ log/mongrel_debug/files.log: 1
481
+ log/mongrel_debug/threads.log: 1
482
+ log/mongrel_debug/access.log: 1
483
+ /tmp/shadow.menagerie.pid: 1
484
+
485
+ ---
486
+ log/mongrel_debug/objects.log: 1
487
+ log/mongrel_debug/files.log: 1
488
+ log/mongrel_debug/threads.log: 1
489
+ log/mongrel_debug/access.log: 1
490
+ /tmp/shadow.menagerie.pid: 1
491
+
492
+ ---
493
+ log/mongrel_debug/objects.log: 1
494
+ log/mongrel_debug/files.log: 1
495
+ log/mongrel_debug/threads.log: 1
496
+ log/mongrel_debug/access.log: 1
497
+ /tmp/shadow.menagerie.pid: 1
498
+
499
+ ---
500
+ log/mongrel_debug/objects.log: 1
501
+ log/mongrel_debug/files.log: 1
502
+ log/mongrel_debug/threads.log: 1
503
+ log/mongrel_debug/access.log: 1
504
+ /tmp/shadow.menagerie.pid: 1
505
+
506
+ ---
507
+ log/mongrel_debug/objects.log: 1
508
+ log/mongrel_debug/files.log: 1
509
+ log/mongrel_debug/threads.log: 1
510
+ log/mongrel_debug/access.log: 1
511
+ /tmp/shadow.menagerie.pid: 1
512
+
513
+ ---
514
+ log/mongrel_debug/objects.log: 1
515
+ log/mongrel_debug/files.log: 1
516
+ log/mongrel_debug/threads.log: 1
517
+ log/mongrel_debug/access.log: 1
518
+ /tmp/shadow.menagerie.pid: 1
519
+
520
+ ---
521
+ log/mongrel_debug/objects.log: 1
522
+ log/mongrel_debug/files.log: 1
523
+ log/mongrel_debug/threads.log: 1
524
+ log/mongrel_debug/access.log: 1
525
+ /tmp/shadow.menagerie.pid: 1
526
+
527
+ ---
528
+ log/mongrel_debug/objects.log: 1
529
+ log/mongrel_debug/files.log: 1
530
+ log/mongrel_debug/threads.log: 1
531
+ log/mongrel_debug/access.log: 1
532
+ /tmp/shadow.menagerie.pid: 1
533
+
534
+ ---
535
+ log/mongrel_debug/objects.log: 1
536
+ log/mongrel_debug/files.log: 1
537
+ log/mongrel_debug/threads.log: 1
538
+ log/mongrel_debug/access.log: 1
539
+ /tmp/shadow.menagerie.pid: 1
540
+
541
+ ---
542
+ log/mongrel_debug/objects.log: 1
543
+ log/mongrel_debug/files.log: 1
544
+ log/mongrel_debug/threads.log: 1
545
+ log/mongrel_debug/access.log: 1
546
+ /tmp/shadow.menagerie.pid: 1
547
+
548
+ ---
549
+ log/mongrel_debug/objects.log: 1
550
+ log/mongrel_debug/files.log: 1
551
+ log/mongrel_debug/threads.log: 1
552
+ log/mongrel_debug/access.log: 1
553
+ /tmp/shadow.menagerie.pid: 1
554
+
555
+ ---
556
+ log/mongrel_debug/objects.log: 1
557
+ log/mongrel_debug/files.log: 1
558
+ log/mongrel_debug/threads.log: 1
559
+ log/mongrel_debug/access.log: 1
560
+ /tmp/shadow.menagerie.pid: 1
561
+
562
+ ---
563
+ log/mongrel_debug/objects.log: 1
564
+ log/mongrel_debug/files.log: 1
565
+ log/mongrel_debug/threads.log: 1
566
+ log/mongrel_debug/access.log: 1
567
+ /tmp/shadow.menagerie.pid: 1
568
+
569
+ ---
570
+ log/mongrel_debug/objects.log: 1
571
+ log/mongrel_debug/files.log: 1
572
+ log/mongrel_debug/threads.log: 1
573
+ log/mongrel_debug/access.log: 1
574
+ /tmp/shadow.menagerie.pid: 1
575
+