shadow 0 → 1

Sign up to get free protection for your applications and to get access to all the features.
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
+