app_status 1.1.2 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (28) hide show
  1. data/app/controllers/app_status/application_controller.rb +3 -1
  2. data/app/controllers/app_status/status_controller.rb +8 -2
  3. data/app/views/app_status/status/index.html.erb +3 -1
  4. data/bin/nokogiri +16 -0
  5. data/config/routes.rb +2 -2
  6. data/lib/app_status/engine.rb +0 -3
  7. data/lib/app_status/version.rb +1 -1
  8. data/spec/dummy/app/controllers/widgets_controller.rb +83 -0
  9. data/spec/dummy/app/views/layouts/application.html.erb +4 -0
  10. data/spec/dummy/app/views/widgets/_form.html.erb +17 -0
  11. data/spec/dummy/app/views/widgets/edit.html.erb +6 -0
  12. data/spec/dummy/app/views/widgets/index.html.erb +21 -0
  13. data/spec/dummy/app/views/widgets/new.html.erb +5 -0
  14. data/spec/dummy/app/views/widgets/show.html.erb +5 -0
  15. data/spec/dummy/config/routes.rb +3 -1
  16. data/spec/dummy/log/development.log +150 -0
  17. data/spec/dummy/log/test.log +1554 -0
  18. data/spec/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  19. data/spec/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  20. data/spec/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  21. data/spec/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  22. data/spec/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
  23. data/spec/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  24. data/spec/features/app_status_features_spec.rb +90 -0
  25. data/spec/spec_helper.rb +1 -4
  26. metadata +47 -7
  27. data/app/views/layouts/app_status/application.html.erb +0 -14
  28. data/spec/controllers/status_controller_spec.rb +0 -28
@@ -1,4 +1,6 @@
1
1
  module AppStatus
2
- class ApplicationController < ActionController::Base
2
+ # inherit from the parent app's ApplicationController so we can
3
+ # render inside it's default layout.
4
+ class ApplicationController < ::ApplicationController
3
5
  end
4
6
  end
@@ -1,11 +1,17 @@
1
1
  module AppStatus
2
- class StatusController < ApplicationController
2
+ class StatusController < ::ApplicationController
3
3
  def index
4
4
  @checks = CheckCollection.new
5
5
  @checks.evaluate!
6
6
 
7
7
  json_data = @checks.as_json
8
- json_data['more_info'] = app_status_url
8
+
9
+ more_info = app_status_engine.root_url
10
+ # try to build html url, when main app has route like '/status(.:format)'
11
+ if match = more_info.match(/(.*)\.json/)
12
+ more_info = match[1]+'.html'
13
+ end
14
+ json_data['more_info'] = more_info
9
15
 
10
16
  respond_to do |format|
11
17
  format.json { render json: json_data}
@@ -1,5 +1,4 @@
1
1
  <div class="app_status">
2
-
3
2
  <h1 class="<%= @checks.status %>">Current Status : <%= @checks.status %></h1>
4
3
 
5
4
  <% if @checks.size > 0 %>
@@ -10,6 +9,9 @@
10
9
  <td class="name"><%= check.name %></td>
11
10
  <td class="details"><%= check.details %></td>
12
11
  <td class="ms"><%= check.ms %>ms</td>
12
+ <td class="more_info">
13
+ <% if check.description.present? -%>More Info<% end %>
14
+ </td>
13
15
  </tr>
14
16
  <% if check.description.present? -%>
15
17
  <tr class="<%= check.name %> description" style="display: none;">
data/bin/nokogiri ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'nokogiri' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('nokogiri', 'nokogiri')
data/config/routes.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  AppStatus::Engine.routes.draw do
2
- root :to => 'status#index', :defaults => {:format => 'json'}
3
- get "/index" => 'status#index', :as => 'app_status'
2
+ get '/index(.:format)', to: 'app_status/status#index'
3
+ root to: 'app_status/status#index'
4
4
  end
@@ -1,10 +1,7 @@
1
1
  module AppStatus
2
2
  class Engine < ::Rails::Engine
3
- isolate_namespace AppStatus
4
-
5
3
  config.generators do |g|
6
4
  g.test_framework :rspec, :fixture => false
7
- #g.fixture_replacement :factory_girl, :dir => 'spec/factories'
8
5
  g.assets false
9
6
  g.helper false
10
7
  end
@@ -1,3 +1,3 @@
1
1
  module AppStatus
2
- VERSION = "1.1.2"
2
+ VERSION = "1.2.0"
3
3
  end
@@ -0,0 +1,83 @@
1
+ class WidgetsController < ApplicationController
2
+ # GET /widgets
3
+ # GET /widgets.json
4
+ def index
5
+ @widgets = Widget.all
6
+
7
+ respond_to do |format|
8
+ format.html # index.html.erb
9
+ format.json { render json: @widgets }
10
+ end
11
+ end
12
+
13
+ # GET /widgets/1
14
+ # GET /widgets/1.json
15
+ def show
16
+ @widget = Widget.find(params[:id])
17
+
18
+ respond_to do |format|
19
+ format.html # show.html.erb
20
+ format.json { render json: @widget }
21
+ end
22
+ end
23
+
24
+ # GET /widgets/new
25
+ # GET /widgets/new.json
26
+ def new
27
+ @widget = Widget.new
28
+
29
+ respond_to do |format|
30
+ format.html # new.html.erb
31
+ format.json { render json: @widget }
32
+ end
33
+ end
34
+
35
+ # GET /widgets/1/edit
36
+ def edit
37
+ @widget = Widget.find(params[:id])
38
+ end
39
+
40
+ # POST /widgets
41
+ # POST /widgets.json
42
+ def create
43
+ @widget = Widget.new(params[:widget])
44
+
45
+ respond_to do |format|
46
+ if @widget.save
47
+ format.html { redirect_to @widget, notice: 'Widget was successfully created.' }
48
+ format.json { render json: @widget, status: :created, location: @widget }
49
+ else
50
+ format.html { render action: "new" }
51
+ format.json { render json: @widget.errors, status: :unprocessable_entity }
52
+ end
53
+ end
54
+ end
55
+
56
+ # PUT /widgets/1
57
+ # PUT /widgets/1.json
58
+ def update
59
+ @widget = Widget.find(params[:id])
60
+
61
+ respond_to do |format|
62
+ if @widget.update_attributes(params[:widget])
63
+ format.html { redirect_to @widget, notice: 'Widget was successfully updated.' }
64
+ format.json { head :no_content }
65
+ else
66
+ format.html { render action: "edit" }
67
+ format.json { render json: @widget.errors, status: :unprocessable_entity }
68
+ end
69
+ end
70
+ end
71
+
72
+ # DELETE /widgets/1
73
+ # DELETE /widgets/1.json
74
+ def destroy
75
+ @widget = Widget.find(params[:id])
76
+ @widget.destroy
77
+
78
+ respond_to do |format|
79
+ format.html { redirect_to widgets_url }
80
+ format.json { head :no_content }
81
+ end
82
+ end
83
+ end
@@ -8,6 +8,10 @@
8
8
  </head>
9
9
  <body>
10
10
 
11
+ <div id="widget_menu">
12
+ Widgets are at <%= widgets_url %>.
13
+ </div>
14
+
11
15
  <%= yield %>
12
16
 
13
17
  </body>
@@ -0,0 +1,17 @@
1
+ <%= form_for(@widget) do |f| %>
2
+ <% if @widget.errors.any? %>
3
+ <div id="error_explanation">
4
+ <h2><%= pluralize(@widget.errors.count, "error") %> prohibited this widget from being saved:</h2>
5
+
6
+ <ul>
7
+ <% @widget.errors.full_messages.each do |msg| %>
8
+ <li><%= msg %></li>
9
+ <% end %>
10
+ </ul>
11
+ </div>
12
+ <% end %>
13
+
14
+ <div class="actions">
15
+ <%= f.submit %>
16
+ </div>
17
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <h1>Editing widget</h1>
2
+
3
+ <%= render 'form' %>
4
+
5
+ <%= link_to 'Show', @widget %> |
6
+ <%= link_to 'Back', widgets_path %>
@@ -0,0 +1,21 @@
1
+ <h1>Listing widgets</h1>
2
+
3
+ <table>
4
+ <tr>
5
+ <th></th>
6
+ <th></th>
7
+ <th></th>
8
+ </tr>
9
+
10
+ <% @widgets.each do |widget| %>
11
+ <tr>
12
+ <td><%= link_to 'Show', widget %></td>
13
+ <td><%= link_to 'Edit', edit_widget_path(widget) %></td>
14
+ <td><%= link_to 'Destroy', widget, method: :delete, data: { confirm: 'Are you sure?' } %></td>
15
+ </tr>
16
+ <% end %>
17
+ </table>
18
+
19
+ <br />
20
+
21
+ <%= link_to 'New Widget', new_widget_path %>
@@ -0,0 +1,5 @@
1
+ <h1>New widget</h1>
2
+
3
+ <%= render 'form' %>
4
+
5
+ <%= link_to 'Back', widgets_path %>
@@ -0,0 +1,5 @@
1
+ <p id="notice"><%= notice %></p>
2
+
3
+
4
+ <%= link_to 'Edit', edit_widget_path(@widget) %> |
5
+ <%= link_to 'Back', widgets_path %>
@@ -1,3 +1,5 @@
1
1
  Rails.application.routes.draw do
2
- mount AppStatus::Engine => "/status"
2
+ resources :widgets
3
+
4
+ mount AppStatus::Engine => "/status(.:format)", defaults: {format: 'json'}
3
5
  end
@@ -815,3 +815,153 @@ Served asset /jquery.js - 304 Not Modified (0ms)
815
815
 
816
816
  Started GET "/assets/jquery_ujs.js?body=1" for 127.0.0.1 at 2013-10-08 21:51:51 -0500
817
817
  Served asset /jquery_ujs.js - 304 Not Modified (0ms)
818
+
819
+
820
+ Started GET "/status/index.json" for 127.0.0.1 at 2013-10-12 17:01:20 -0500
821
+ Processing by AppStatus::StatusController#index as JSON
822
+ Completed 200 OK in 3ms (Views: 0.5ms)
823
+
824
+
825
+ Started GET "/status/index.html" for 127.0.0.1 at 2013-10-12 17:01:27 -0500
826
+ Processing by AppStatus::StatusController#index as HTML
827
+ Rendered /Users/alex/Code/app_status/app/views/app_status/status/index.html.erb within layouts/application (80.8ms)
828
+ Compiled application.css (0ms) (pid 62743)
829
+ Compiled application.js (6ms) (pid 62743)
830
+ Completed 200 OK in 128ms (Views: 128.0ms)
831
+
832
+
833
+ Started GET "/assets/application.css?body=1" for 127.0.0.1 at 2013-10-12 17:01:27 -0500
834
+ Served asset /application.css - 200 OK (1ms)
835
+
836
+
837
+ Started GET "/assets/jquery.js?body=1" for 127.0.0.1 at 2013-10-12 17:01:27 -0500
838
+ Served asset /jquery.js - 200 OK (1ms)
839
+
840
+
841
+ Started GET "/assets/jquery_ujs.js?body=1" for 127.0.0.1 at 2013-10-12 17:01:27 -0500
842
+ Served asset /jquery_ujs.js - 200 OK (1ms)
843
+
844
+
845
+ Started GET "/assets/application.js?body=1" for 127.0.0.1 at 2013-10-12 17:01:27 -0500
846
+ Served asset /application.js - 200 OK (2ms)
847
+
848
+
849
+ Started GET "/status.html" for 127.0.0.1 at 2013-10-12 17:10:04 -0500
850
+ Processing by AppStatus::StatusController#index as HTML
851
+ Rendered /Users/alex/Code/app_status/app/views/app_status/status/index.html.erb within layouts/application (5.4ms)
852
+ Completed 500 Internal Server Error in 12ms
853
+
854
+ ActionView::Template::Error (rendering HTML):
855
+ 1: <% raise "rendering HTML" %>
856
+ 2: <div class="app_status">
857
+ 3: <h1 class="<%= @checks.status %>">Current Status : <%= @checks.status %></h1>
858
+ 4:
859
+ /Users/alex/Code/app_status/app/views/app_status/status/index.html.erb:1:in `___sers_alex__ode_app_status_app_views_app_status_status_index_html_erb__4255533823524142632_70320794355040'
860
+ actionpack (3.2.14) lib/action_view/template.rb:145:in `block in render'
861
+ activesupport (3.2.14) lib/active_support/notifications.rb:125:in `instrument'
862
+ actionpack (3.2.14) lib/action_view/template.rb:143:in `render'
863
+ actionpack (3.2.14) lib/action_view/renderer/template_renderer.rb:48:in `block (2 levels) in render_template'
864
+ actionpack (3.2.14) lib/action_view/renderer/abstract_renderer.rb:38:in `block in instrument'
865
+ activesupport (3.2.14) lib/active_support/notifications.rb:123:in `block in instrument'
866
+ activesupport (3.2.14) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
867
+ activesupport (3.2.14) lib/active_support/notifications.rb:123:in `instrument'
868
+ actionpack (3.2.14) lib/action_view/renderer/abstract_renderer.rb:38:in `instrument'
869
+ actionpack (3.2.14) lib/action_view/renderer/template_renderer.rb:47:in `block in render_template'
870
+ actionpack (3.2.14) lib/action_view/renderer/template_renderer.rb:55:in `render_with_layout'
871
+ actionpack (3.2.14) lib/action_view/renderer/template_renderer.rb:46:in `render_template'
872
+ actionpack (3.2.14) lib/action_view/renderer/template_renderer.rb:19:in `render'
873
+ actionpack (3.2.14) lib/action_view/renderer/renderer.rb:36:in `render_template'
874
+ actionpack (3.2.14) lib/action_view/renderer/renderer.rb:17:in `render'
875
+ actionpack (3.2.14) lib/abstract_controller/rendering.rb:110:in `_render_template'
876
+ actionpack (3.2.14) lib/action_controller/metal/streaming.rb:225:in `_render_template'
877
+ actionpack (3.2.14) lib/abstract_controller/rendering.rb:103:in `render_to_body'
878
+ actionpack (3.2.14) lib/action_controller/metal/renderers.rb:28:in `render_to_body'
879
+ actionpack (3.2.14) lib/action_controller/metal/compatibility.rb:50:in `render_to_body'
880
+ actionpack (3.2.14) lib/abstract_controller/rendering.rb:88:in `render'
881
+ actionpack (3.2.14) lib/action_controller/metal/rendering.rb:16:in `render'
882
+ actionpack (3.2.14) lib/action_controller/metal/instrumentation.rb:40:in `block (2 levels) in render'
883
+ activesupport (3.2.14) lib/active_support/core_ext/benchmark.rb:5:in `block in ms'
884
+ /Users/alex/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/benchmark.rb:295:in `realtime'
885
+ activesupport (3.2.14) lib/active_support/core_ext/benchmark.rb:5:in `ms'
886
+ actionpack (3.2.14) lib/action_controller/metal/instrumentation.rb:40:in `block in render'
887
+ actionpack (3.2.14) lib/action_controller/metal/instrumentation.rb:83:in `cleanup_view_runtime'
888
+ actionpack (3.2.14) lib/action_controller/metal/instrumentation.rb:39:in `render'
889
+ actionpack (3.2.14) lib/action_controller/metal/implicit_render.rb:10:in `default_render'
890
+ actionpack (3.2.14) lib/action_controller/metal/mime_responds.rb:196:in `respond_to'
891
+ /Users/alex/Code/app_status/app/controllers/app_status/status_controller.rb:18:in `index'
892
+ actionpack (3.2.14) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
893
+ actionpack (3.2.14) lib/abstract_controller/base.rb:167:in `process_action'
894
+ actionpack (3.2.14) lib/action_controller/metal/rendering.rb:10:in `process_action'
895
+ actionpack (3.2.14) lib/abstract_controller/callbacks.rb:18:in `block in process_action'
896
+ activesupport (3.2.14) lib/active_support/callbacks.rb:414:in `_run__3823003795726122098__process_action__1171103283506279445__callbacks'
897
+ activesupport (3.2.14) lib/active_support/callbacks.rb:405:in `__run_callback'
898
+ activesupport (3.2.14) lib/active_support/callbacks.rb:385:in `_run_process_action_callbacks'
899
+ activesupport (3.2.14) lib/active_support/callbacks.rb:81:in `run_callbacks'
900
+ actionpack (3.2.14) lib/abstract_controller/callbacks.rb:17:in `process_action'
901
+ actionpack (3.2.14) lib/action_controller/metal/rescue.rb:29:in `process_action'
902
+ actionpack (3.2.14) lib/action_controller/metal/instrumentation.rb:30:in `block in process_action'
903
+ activesupport (3.2.14) lib/active_support/notifications.rb:123:in `block in instrument'
904
+ activesupport (3.2.14) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
905
+ activesupport (3.2.14) lib/active_support/notifications.rb:123:in `instrument'
906
+ actionpack (3.2.14) lib/action_controller/metal/instrumentation.rb:29:in `process_action'
907
+ actionpack (3.2.14) lib/action_controller/metal/params_wrapper.rb:207:in `process_action'
908
+ actionpack (3.2.14) lib/abstract_controller/base.rb:121:in `process'
909
+ actionpack (3.2.14) lib/abstract_controller/rendering.rb:45:in `process'
910
+ actionpack (3.2.14) lib/action_controller/metal.rb:203:in `dispatch'
911
+ actionpack (3.2.14) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'
912
+ actionpack (3.2.14) lib/action_controller/metal.rb:246:in `block in action'
913
+ actionpack (3.2.14) lib/action_dispatch/routing/route_set.rb:73:in `call'
914
+ actionpack (3.2.14) lib/action_dispatch/routing/route_set.rb:73:in `dispatch'
915
+ actionpack (3.2.14) lib/action_dispatch/routing/route_set.rb:36:in `call'
916
+ journey (1.0.4) lib/journey/router.rb:68:in `block in call'
917
+ journey (1.0.4) lib/journey/router.rb:56:in `each'
918
+ journey (1.0.4) lib/journey/router.rb:56:in `call'
919
+ actionpack (3.2.14) lib/action_dispatch/routing/route_set.rb:608:in `call'
920
+ railties (3.2.14) lib/rails/engine.rb:484:in `call'
921
+ railties (3.2.14) lib/rails/railtie/configurable.rb:30:in `method_missing'
922
+ journey (1.0.4) lib/journey/router.rb:68:in `block in call'
923
+ journey (1.0.4) lib/journey/router.rb:56:in `each'
924
+ journey (1.0.4) lib/journey/router.rb:56:in `call'
925
+ actionpack (3.2.14) lib/action_dispatch/routing/route_set.rb:608:in `call'
926
+ actionpack (3.2.14) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'
927
+ rack (1.4.5) lib/rack/etag.rb:23:in `call'
928
+ rack (1.4.5) lib/rack/conditionalget.rb:25:in `call'
929
+ actionpack (3.2.14) lib/action_dispatch/middleware/head.rb:14:in `call'
930
+ actionpack (3.2.14) lib/action_dispatch/middleware/params_parser.rb:21:in `call'
931
+ actionpack (3.2.14) lib/action_dispatch/middleware/flash.rb:242:in `call'
932
+ rack (1.4.5) lib/rack/session/abstract/id.rb:210:in `context'
933
+ rack (1.4.5) lib/rack/session/abstract/id.rb:205:in `call'
934
+ actionpack (3.2.14) lib/action_dispatch/middleware/cookies.rb:341:in `call'
935
+ actionpack (3.2.14) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
936
+ activesupport (3.2.14) lib/active_support/callbacks.rb:405:in `_run__3779300152876328565__call__313638182897300773__callbacks'
937
+ activesupport (3.2.14) lib/active_support/callbacks.rb:405:in `__run_callback'
938
+ activesupport (3.2.14) lib/active_support/callbacks.rb:385:in `_run_call_callbacks'
939
+ activesupport (3.2.14) lib/active_support/callbacks.rb:81:in `run_callbacks'
940
+ actionpack (3.2.14) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
941
+ actionpack (3.2.14) lib/action_dispatch/middleware/reloader.rb:65:in `call'
942
+ actionpack (3.2.14) lib/action_dispatch/middleware/remote_ip.rb:31:in `call'
943
+ actionpack (3.2.14) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call'
944
+ actionpack (3.2.14) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
945
+ railties (3.2.14) lib/rails/rack/logger.rb:32:in `call_app'
946
+ railties (3.2.14) lib/rails/rack/logger.rb:16:in `block in call'
947
+ activesupport (3.2.14) lib/active_support/tagged_logging.rb:22:in `tagged'
948
+ railties (3.2.14) lib/rails/rack/logger.rb:16:in `call'
949
+ actionpack (3.2.14) lib/action_dispatch/middleware/request_id.rb:22:in `call'
950
+ rack (1.4.5) lib/rack/methodoverride.rb:21:in `call'
951
+ rack (1.4.5) lib/rack/runtime.rb:17:in `call'
952
+ activesupport (3.2.14) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
953
+ rack (1.4.5) lib/rack/lock.rb:15:in `call'
954
+ actionpack (3.2.14) lib/action_dispatch/middleware/static.rb:63:in `call'
955
+ railties (3.2.14) lib/rails/engine.rb:484:in `call'
956
+ railties (3.2.14) lib/rails/application.rb:231:in `call'
957
+ rack (1.4.5) lib/rack/content_length.rb:14:in `call'
958
+ railties (3.2.14) lib/rails/rack/log_tailer.rb:17:in `call'
959
+ rack (1.4.5) lib/rack/handler/webrick.rb:59:in `service'
960
+ /Users/alex/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
961
+ /Users/alex/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
962
+ /Users/alex/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'
963
+
964
+
965
+ Rendered /Users/alex/.rvm/gems/ruby-1.9.3-p194@app_status/gems/actionpack-3.2.14/lib/action_dispatch/middleware/templates/rescues/_trace.erb (12.1ms)
966
+ Rendered /Users/alex/.rvm/gems/ruby-1.9.3-p194@app_status/gems/actionpack-3.2.14/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (0.7ms)
967
+ Rendered /Users/alex/.rvm/gems/ruby-1.9.3-p194@app_status/gems/actionpack-3.2.14/lib/action_dispatch/middleware/templates/rescues/template_error.erb within rescues/layout (19.5ms)