unicorn 0.99.0 → 0.990.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. data/.document +1 -0
  2. data/.gitignore +3 -1
  3. data/Documentation/unicorn.1.txt +1 -1
  4. data/FAQ +3 -2
  5. data/GIT-VERSION-GEN +1 -1
  6. data/GNUmakefile +43 -8
  7. data/KNOWN_ISSUES +3 -24
  8. data/PHILOSOPHY +3 -2
  9. data/Rakefile +23 -2
  10. data/Sandbox +78 -0
  11. data/bin/unicorn_rails +14 -36
  12. data/examples/big_app_gc.rb +33 -0
  13. data/examples/unicorn.conf.minimal.rb +13 -0
  14. data/examples/unicorn.conf.rb +9 -3
  15. data/ext/unicorn_http/unicorn_http.rl +14 -2
  16. data/ext/unicorn_http/unicorn_http_common.rl +1 -1
  17. data/lib/unicorn.rb +5 -11
  18. data/lib/unicorn/configurator.rb +22 -8
  19. data/lib/unicorn/const.rb +3 -1
  20. data/lib/unicorn/oob_gc.rb +58 -0
  21. data/lib/unicorn/util.rb +7 -9
  22. data/local.mk.sample +32 -36
  23. data/t/GNUmakefile +7 -2
  24. data/t/rails3-app/.gitignore +4 -0
  25. data/t/rails3-app/Gemfile +26 -0
  26. data/t/rails3-app/Rakefile +10 -0
  27. data/t/rails3-app/app/controllers/application_controller.rb +4 -0
  28. data/t/rails3-app/app/helpers/application_helper.rb +2 -0
  29. data/t/rails3-app/app/views/layouts/application.html.erb +14 -0
  30. data/t/rails3-app/config.ru +4 -0
  31. data/t/rails3-app/config/application.rb +46 -0
  32. data/t/rails3-app/config/boot.rb +6 -0
  33. data/t/rails3-app/config/database.yml +22 -0
  34. data/t/rails3-app/config/environment.rb +5 -0
  35. data/t/rails3-app/config/environments/development.rb +19 -0
  36. data/t/rails3-app/config/environments/production.rb +42 -0
  37. data/t/rails3-app/config/environments/test.rb +32 -0
  38. data/t/rails3-app/config/initializers/backtrace_silencers.rb +7 -0
  39. data/t/rails3-app/config/initializers/inflections.rb +10 -0
  40. data/t/rails3-app/config/initializers/mime_types.rb +5 -0
  41. data/t/rails3-app/config/initializers/secret_token.rb +7 -0
  42. data/t/rails3-app/config/initializers/session_store.rb +8 -0
  43. data/t/rails3-app/config/locales/en.yml +5 -0
  44. data/t/rails3-app/config/routes.rb +58 -0
  45. data/t/rails3-app/db/seeds.rb +7 -0
  46. data/t/rails3-app/doc/README_FOR_APP +2 -0
  47. data/{test/rails/app-2.3.5/db/.gitignore → t/rails3-app/lib/tasks/.gitkeep} +0 -0
  48. data/{test/rails/app-2.3.5 → t/rails3-app}/public/404.html +0 -0
  49. data/{test/rails/app-2.3.5 → t/rails3-app}/public/500.html +0 -0
  50. data/{test/rails/app-2.3.5 → t/rails3-app}/public/x.txt +0 -0
  51. data/t/rails3-app/script/rails +9 -0
  52. data/t/rails3-app/test/performance/browsing_test.rb +9 -0
  53. data/t/rails3-app/test/test_helper.rb +13 -0
  54. data/t/rails3-app/vendor/plugins/.gitkeep +0 -0
  55. data/t/t0300-rails3-basic.sh +56 -0
  56. data/t/test-lib.sh +2 -1
  57. data/test/exec/test_exec.rb +20 -3
  58. data/test/rails/{app-2.3.5 → app-2.3.8}/.gitignore +0 -0
  59. data/test/rails/{app-2.3.5 → app-2.3.8}/Rakefile +0 -0
  60. data/test/rails/{app-2.3.5 → app-2.3.8}/app/controllers/application_controller.rb +0 -0
  61. data/test/rails/{app-2.3.5 → app-2.3.8}/app/controllers/foo_controller.rb +0 -0
  62. data/test/rails/{app-2.3.5 → app-2.3.8}/app/helpers/application_helper.rb +0 -0
  63. data/test/rails/{app-2.3.5 → app-2.3.8}/config/boot.rb +0 -0
  64. data/test/rails/{app-2.3.5 → app-2.3.8}/config/database.yml +0 -0
  65. data/test/rails/{app-2.3.5 → app-2.3.8}/config/environment.rb +0 -0
  66. data/test/rails/{app-2.3.5 → app-2.3.8}/config/environments/development.rb +0 -0
  67. data/test/rails/{app-2.3.5 → app-2.3.8}/config/environments/production.rb +0 -0
  68. data/test/rails/{app-2.3.5 → app-2.3.8}/config/routes.rb +0 -0
  69. data/test/rails/app-2.3.8/db/.gitignore +0 -0
  70. data/test/rails/app-2.3.8/public/404.html +1 -0
  71. data/test/rails/app-2.3.8/public/500.html +1 -0
  72. data/test/rails/app-2.3.8/public/x.txt +1 -0
  73. data/test/rails/test_rails.rb +4 -0
  74. data/test/unit/test_http_parser.rb +11 -1
  75. data/test/unit/test_http_parser_ng.rb +21 -1
  76. data/test/unit/test_signals.rb +2 -2
  77. data/test/unit/test_socket_helper.rb +5 -3
  78. data/test/unit/test_util.rb +22 -18
  79. data/unicorn.gemspec +2 -0
  80. metadata +66 -18
data/t/test-lib.sh CHANGED
@@ -7,7 +7,8 @@ set +u
7
7
  set -e
8
8
  RUBY="${RUBY-ruby}"
9
9
  RUBY_VERSION=${RUBY_VERSION-$($RUBY -e 'puts RUBY_VERSION')}
10
- t_pfx=$PWD/trash/$T-$RUBY_VERSION
10
+ RUBY_ENGINE=${RUBY_ENGINE-$($RUBY -e 'puts((RUBY_ENGINE rescue "ruby"))')}
11
+ t_pfx=$PWD/trash/$T-$RUBY_ENGINE-$RUBY_VERSION
11
12
  set -u
12
13
 
13
14
  PATH=$PWD/bin:$PATH
@@ -20,6 +20,10 @@ unless try_require('rack')
20
20
  do_test = false
21
21
  end
22
22
 
23
+ if ENV['RBX_SKIP']
24
+ do_test = false
25
+ end
26
+
23
27
  class ExecTest < Test::Unit::TestCase
24
28
  trap(:QUIT, 'IGNORE')
25
29
 
@@ -899,25 +903,38 @@ EOF
899
903
  wait_workers_ready("test_stderr.#$$.log", 1)
900
904
  uri = URI.parse("http://#@addr:#@port/")
901
905
  pids = Tempfile.new('worker_pids')
906
+ r, w = IO.pipe
902
907
  hitter = fork {
908
+ r.close
903
909
  bodies = Hash.new(0)
904
910
  at_exit { pids.syswrite(bodies.inspect) }
905
911
  trap(:TERM) { exit(0) }
912
+ nr = 0
906
913
  loop {
907
914
  rv = Net::HTTP.get(uri)
908
915
  pid = rv.to_i
909
916
  exit!(1) if pid <= 0
910
917
  bodies[pid] += 1
918
+ nr += 1
919
+ if nr == 1
920
+ w.syswrite('1')
921
+ elsif bodies.size > 1
922
+ w.syswrite('2')
923
+ sleep
924
+ end
911
925
  }
912
926
  }
913
- sleep 5 # racy
927
+ w.close
928
+ assert_equal '1', r.read(1)
914
929
  daemon_pid = File.read(pid_file.path).to_i
915
930
  assert daemon_pid > 0
916
931
  Process.kill(:HUP, daemon_pid)
917
- sleep 5 # racy
932
+ assert_equal '2', r.read(1)
918
933
  assert_nothing_raised { Process.kill(:TERM, hitter) }
919
934
  _, hitter_status = Process.waitpid2(hitter)
920
- assert hitter_status.success?
935
+ assert(hitter_status.success?,
936
+ "invalid: #{hitter_status.inspect} #{File.read(pids.path)}" \
937
+ "#{File.read("test_stderr.#$$.log")}")
921
938
  pids.sysseek(0)
922
939
  pids = eval(pids.read)
923
940
  assert_kind_of(Hash, pids)
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1 @@
1
+ 404 Not Found
@@ -0,0 +1 @@
1
+ 500 Internal Server Error
@@ -0,0 +1 @@
1
+ HELLO
@@ -46,6 +46,10 @@ end
46
46
  ROR_V = UNICORN_RAILS_TEST_VERSION.split(/\./).map { |x| x.to_i }
47
47
  RB_V = RUBY_VERSION.split(/\./).map { |x| x.to_i }
48
48
  if RB_V[0] >= 1 && RB_V[1] >= 9
49
+ if RB_V[2] >= 2
50
+ warn "Ruby 1.9.2+ is not compatible with Rails 2.x"
51
+ do_test = false
52
+ end
49
53
  unless ROR_V[0] >= 2 && ROR_V[1] >= 3
50
54
  warn "skipping Ruby >=1.9 test with Rails <2.3"
51
55
  do_test = false
@@ -51,6 +51,14 @@ class HttpParserTest < Test::Unit::TestCase
51
51
  assert parser.keepalive?
52
52
  end
53
53
 
54
+ def test_tab_lws
55
+ parser = HttpParser.new
56
+ req = {}
57
+ tmp = "GET / HTTP/1.1\r\nHost:\tfoo.bar\r\n\r\n"
58
+ assert_equal req.object_id, parser.headers(req, tmp).object_id
59
+ assert_equal "foo.bar", req['HTTP_HOST']
60
+ end
61
+
54
62
  def test_connection_close_no_ka
55
63
  parser = HttpParser.new
56
64
  req = {}
@@ -542,6 +550,8 @@ class HttpParserTest < Test::Unit::TestCase
542
550
  diff = after - before
543
551
  assert(diff < 10000, "memory grew more than 10M: #{diff}")
544
552
  end
545
- end if RUBY_PLATFORM =~ /linux/ && test(?r, LINUX_PROC_PID_STATUS)
553
+ end if RUBY_PLATFORM =~ /linux/ &&
554
+ File.readable?(LINUX_PROC_PID_STATUS) &&
555
+ !defined?(RUBY_ENGINE)
546
556
 
547
557
  end
@@ -26,7 +26,7 @@ class HttpParserNgTest < Test::Unit::TestCase
26
26
  assert_equal 0, hdr.size
27
27
  assert ! @parser.keepalive?
28
28
  assert @parser.headers?
29
- assert 123, @parser.content_length
29
+ assert_equal 123, @parser.content_length
30
30
  end
31
31
 
32
32
  def test_identity_step_headers
@@ -440,4 +440,24 @@ class HttpParserNgTest < Test::Unit::TestCase
440
440
  end
441
441
  end
442
442
 
443
+ def test_ignore_version_header
444
+ http = "GET / HTTP/1.1\r\nVersion: hello\r\n\r\n"
445
+ req = {}
446
+ assert_equal req, @parser.headers(req, http)
447
+ assert_equal '', http
448
+ expect = {
449
+ "SERVER_NAME" => "localhost",
450
+ "rack.url_scheme" => "http",
451
+ "REQUEST_PATH" => "/",
452
+ "SERVER_PROTOCOL" => "HTTP/1.1",
453
+ "PATH_INFO" => "/",
454
+ "HTTP_VERSION" => "HTTP/1.1",
455
+ "REQUEST_URI" => "/",
456
+ "SERVER_PORT" => "80",
457
+ "REQUEST_METHOD" => "GET",
458
+ "QUERY_STRING" => ""
459
+ }
460
+ assert_equal expect, req
461
+ end
462
+
443
463
  end
@@ -166,7 +166,7 @@ class SignalsTest < Test::Unit::TestCase
166
166
  expect = @bs * @count
167
167
  assert_equal(expect, got, "expect=#{expect} got=#{got}")
168
168
  assert_nothing_raised { sock.close }
169
- end
169
+ end unless ENV['RBX_SKIP']
170
170
 
171
171
  def test_request_read
172
172
  app = lambda { |env|
@@ -201,6 +201,6 @@ class SignalsTest < Test::Unit::TestCase
201
201
  assert size_before < @tmp.stat.size
202
202
  assert_equal pid, sock.sysread(4096)[/\r\nX-Pid: (\d+)\r\n/, 1].to_i
203
203
  sock.close
204
- end
204
+ end unless ENV['RBX_SKIP']
205
205
 
206
206
  end
@@ -97,7 +97,7 @@ class TestSocketHelper < Test::Unit::TestCase
97
97
  a = bind_listen(tcp_server)
98
98
  assert_equal a.fileno, tcp_server.fileno
99
99
  assert_equal a.fileno, @tcp_listener.fileno
100
- end
100
+ end unless ENV["RBX_SKIP"]
101
101
 
102
102
  def test_bind_listen_unix_rebind
103
103
  test_bind_listen_unix
@@ -128,6 +128,8 @@ class TestSocketHelper < Test::Unit::TestCase
128
128
  @unix_server = server_cast(unix_listener_socket)
129
129
  assert_equal @unix_listener.fileno, @unix_server.fileno
130
130
  assert UNIXServer === @unix_server
131
+ assert_equal(@unix_server.path, @unix_listener.path,
132
+ "##{@unix_server.path} != #{@unix_listener.path}")
131
133
  assert File.socket?(@unix_server.path)
132
134
  assert_equal @unix_listener_path, sock_name(@unix_server)
133
135
 
@@ -137,11 +139,11 @@ class TestSocketHelper < Test::Unit::TestCase
137
139
  assert_equal @tcp_listener.fileno, @tcp_server.fileno
138
140
  assert TCPServer === @tcp_server
139
141
  assert_equal @tcp_listener_name, sock_name(@tcp_server)
140
- end
142
+ end unless ENV["RBX_SKIP"]
141
143
 
142
144
  def test_sock_name
143
145
  test_server_cast
144
146
  sock_name(@unix_server)
145
- end
147
+ end unless ENV["RBX_SKIP"]
146
148
 
147
149
  end
@@ -8,26 +8,29 @@ class TestUtil < Test::Unit::TestCase
8
8
  EXPECT_FLAGS = File::WRONLY | File::APPEND
9
9
  def test_reopen_logs_noop
10
10
  tmp = Tempfile.new('')
11
- tmp.reopen(tmp.path, 'a')
12
- tmp.sync = true
13
- ext = tmp.external_encoding rescue nil
14
- int = tmp.internal_encoding rescue nil
15
- before = tmp.stat.inspect
11
+ fp = File.open(tmp.path, 'ab')
12
+ fp.sync = true
13
+ ext = fp.external_encoding rescue nil
14
+ int = fp.internal_encoding rescue nil
15
+ before = fp.stat.inspect
16
16
  Unicorn::Util.reopen_logs
17
- assert_equal before, File.stat(tmp.path).inspect
18
- assert_equal ext, (tmp.external_encoding rescue nil)
19
- assert_equal int, (tmp.internal_encoding rescue nil)
17
+ assert_equal before, File.stat(fp.path).inspect
18
+ assert_equal ext, (fp.external_encoding rescue nil)
19
+ assert_equal int, (fp.internal_encoding rescue nil)
20
+ assert_equal(EXPECT_FLAGS, EXPECT_FLAGS & fp.fcntl(Fcntl::F_GETFL))
20
21
  assert_nothing_raised { tmp.close! }
22
+ assert_nothing_raised { fp.close }
21
23
  end
22
24
 
23
25
  def test_reopen_logs_renamed
24
26
  tmp = Tempfile.new('')
25
27
  tmp_path = tmp.path.freeze
26
- tmp.reopen(tmp_path, 'a')
27
- tmp.sync = true
28
- ext = tmp.external_encoding rescue nil
29
- int = tmp.internal_encoding rescue nil
30
- before = tmp.stat.inspect
28
+ fp = File.open(tmp_path, 'ab')
29
+ fp.sync = true
30
+
31
+ ext = fp.external_encoding rescue nil
32
+ int = fp.internal_encoding rescue nil
33
+ before = fp.stat.inspect
31
34
  to = Tempfile.new('')
32
35
  File.rename(tmp_path, to.path)
33
36
  assert ! File.exist?(tmp_path)
@@ -35,13 +38,14 @@ class TestUtil < Test::Unit::TestCase
35
38
  assert_equal tmp_path, tmp.path
36
39
  assert File.exist?(tmp_path)
37
40
  assert before != File.stat(tmp_path).inspect
38
- assert_equal tmp.stat.inspect, File.stat(tmp_path).inspect
39
- assert_equal ext, (tmp.external_encoding rescue nil)
40
- assert_equal int, (tmp.internal_encoding rescue nil)
41
- assert_equal(EXPECT_FLAGS, EXPECT_FLAGS & tmp.fcntl(Fcntl::F_GETFL))
42
- assert tmp.sync
41
+ assert_equal fp.stat.inspect, File.stat(tmp_path).inspect
42
+ assert_equal ext, (fp.external_encoding rescue nil)
43
+ assert_equal int, (fp.internal_encoding rescue nil)
44
+ assert_equal(EXPECT_FLAGS, EXPECT_FLAGS & fp.fcntl(Fcntl::F_GETFL))
45
+ assert fp.sync
43
46
  assert_nothing_raised { tmp.close! }
44
47
  assert_nothing_raised { to.close! }
48
+ assert_nothing_raised { fp.close }
45
49
  end
46
50
 
47
51
  def test_reopen_logs_renamed_with_encoding
data/unicorn.gemspec CHANGED
@@ -49,5 +49,7 @@ Gem::Specification.new do |s|
49
49
  # *strongly* recommended for security reasons.
50
50
  s.add_dependency(%q<rack>)
51
51
 
52
+ s.add_development_dependency('isolate', '~> 2.0.2')
53
+
52
54
  # s.licenses = %w(GPLv2 Ruby) # licenses= method is not in older RubyGems
53
55
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unicorn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.99.0
4
+ version: 0.990.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Unicorn hackers
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-05-06 00:00:00 +00:00
12
+ date: 2010-06-08 00:00:00 +00:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -22,6 +22,16 @@ dependencies:
22
22
  - !ruby/object:Gem::Version
23
23
  version: "0"
24
24
  version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: isolate
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 2.0.2
34
+ version:
25
35
  description: |-
26
36
  \Unicorn is an HTTP server for Rack applications designed to only serve
27
37
  fast clients on low-latency, high-bandwidth connections and take
@@ -59,11 +69,13 @@ extra_rdoc_files:
59
69
  - lib/unicorn/http_request.rb
60
70
  - lib/unicorn/http_response.rb
61
71
  - lib/unicorn/launcher.rb
72
+ - lib/unicorn/oob_gc.rb
62
73
  - lib/unicorn/socket_helper.rb
63
74
  - lib/unicorn/tee_input.rb
64
75
  - lib/unicorn/util.rb
65
76
  - ext/unicorn_http/unicorn_http.c
66
77
  - ISSUES
78
+ - Sandbox
67
79
  files:
68
80
  - .CHANGELOG.old
69
81
  - .document
@@ -91,15 +103,18 @@ files:
91
103
  - README
92
104
  - Rakefile
93
105
  - SIGNALS
106
+ - Sandbox
94
107
  - TODO
95
108
  - TUNING
96
109
  - bin/unicorn
97
110
  - bin/unicorn_rails
111
+ - examples/big_app_gc.rb
98
112
  - examples/echo.ru
99
113
  - examples/git.ru
100
114
  - examples/init.sh
101
115
  - examples/logger_mp_safe.rb
102
116
  - examples/nginx.conf
117
+ - examples/unicorn.conf.minimal.rb
103
118
  - examples/unicorn.conf.rb
104
119
  - ext/unicorn_http/CFLAGS
105
120
  - ext/unicorn_http/c_util.h
@@ -121,6 +136,7 @@ files:
121
136
  - lib/unicorn/http_request.rb
122
137
  - lib/unicorn/http_response.rb
123
138
  - lib/unicorn/launcher.rb
139
+ - lib/unicorn/oob_gc.rb
124
140
  - lib/unicorn/socket_helper.rb
125
141
  - lib/unicorn/tee_input.rb
126
142
  - lib/unicorn/util.rb
@@ -137,9 +153,41 @@ files:
137
153
  - t/bin/utee
138
154
  - t/env.ru
139
155
  - t/my-tap-lib.sh
156
+ - t/rails3-app/.gitignore
157
+ - t/rails3-app/Gemfile
158
+ - t/rails3-app/Rakefile
159
+ - t/rails3-app/app/controllers/application_controller.rb
160
+ - t/rails3-app/app/helpers/application_helper.rb
161
+ - t/rails3-app/app/views/layouts/application.html.erb
162
+ - t/rails3-app/config.ru
163
+ - t/rails3-app/config/application.rb
164
+ - t/rails3-app/config/boot.rb
165
+ - t/rails3-app/config/database.yml
166
+ - t/rails3-app/config/environment.rb
167
+ - t/rails3-app/config/environments/development.rb
168
+ - t/rails3-app/config/environments/production.rb
169
+ - t/rails3-app/config/environments/test.rb
170
+ - t/rails3-app/config/initializers/backtrace_silencers.rb
171
+ - t/rails3-app/config/initializers/inflections.rb
172
+ - t/rails3-app/config/initializers/mime_types.rb
173
+ - t/rails3-app/config/initializers/secret_token.rb
174
+ - t/rails3-app/config/initializers/session_store.rb
175
+ - t/rails3-app/config/locales/en.yml
176
+ - t/rails3-app/config/routes.rb
177
+ - t/rails3-app/db/seeds.rb
178
+ - t/rails3-app/doc/README_FOR_APP
179
+ - t/rails3-app/lib/tasks/.gitkeep
180
+ - t/rails3-app/public/404.html
181
+ - t/rails3-app/public/500.html
182
+ - t/rails3-app/public/x.txt
183
+ - t/rails3-app/script/rails
184
+ - t/rails3-app/test/performance/browsing_test.rb
185
+ - t/rails3-app/test/test_helper.rb
186
+ - t/rails3-app/vendor/plugins/.gitkeep
140
187
  - t/t0000-http-basic.sh
141
188
  - t/t0001-reload-bad-config.sh
142
189
  - t/t0002-config-conflict.sh
190
+ - t/t0300-rails3-basic.sh
143
191
  - t/test-lib.sh
144
192
  - test/aggregate.rb
145
193
  - test/benchmark/README
@@ -206,22 +254,22 @@ files:
206
254
  - test/rails/app-2.2.2/log/.gitignore
207
255
  - test/rails/app-2.2.2/public/404.html
208
256
  - test/rails/app-2.2.2/public/500.html
209
- - test/rails/app-2.3.5/.gitignore
210
- - test/rails/app-2.3.5/Rakefile
211
- - test/rails/app-2.3.5/app/controllers/application_controller.rb
212
- - test/rails/app-2.3.5/app/controllers/foo_controller.rb
213
- - test/rails/app-2.3.5/app/helpers/application_helper.rb
214
- - test/rails/app-2.3.5/config/boot.rb
215
- - test/rails/app-2.3.5/config/database.yml
216
- - test/rails/app-2.3.5/config/environment.rb
217
- - test/rails/app-2.3.5/config/environments/development.rb
218
- - test/rails/app-2.3.5/config/environments/production.rb
219
- - test/rails/app-2.3.5/config/routes.rb
220
- - test/rails/app-2.3.5/db/.gitignore
221
- - test/rails/app-2.3.5/log/.gitignore
222
- - test/rails/app-2.3.5/public/404.html
223
- - test/rails/app-2.3.5/public/500.html
224
- - test/rails/app-2.3.5/public/x.txt
257
+ - test/rails/app-2.3.8/.gitignore
258
+ - test/rails/app-2.3.8/Rakefile
259
+ - test/rails/app-2.3.8/app/controllers/application_controller.rb
260
+ - test/rails/app-2.3.8/app/controllers/foo_controller.rb
261
+ - test/rails/app-2.3.8/app/helpers/application_helper.rb
262
+ - test/rails/app-2.3.8/config/boot.rb
263
+ - test/rails/app-2.3.8/config/database.yml
264
+ - test/rails/app-2.3.8/config/environment.rb
265
+ - test/rails/app-2.3.8/config/environments/development.rb
266
+ - test/rails/app-2.3.8/config/environments/production.rb
267
+ - test/rails/app-2.3.8/config/routes.rb
268
+ - test/rails/app-2.3.8/db/.gitignore
269
+ - test/rails/app-2.3.8/log/.gitignore
270
+ - test/rails/app-2.3.8/public/404.html
271
+ - test/rails/app-2.3.8/public/500.html
272
+ - test/rails/app-2.3.8/public/x.txt
225
273
  - test/rails/test_rails.rb
226
274
  - test/test_helper.rb
227
275
  - test/unit/test_configurator.rb