Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

show routes while debugging RoutingError

If someone receives a routing error, they likely need to view the routes. Rather than making them visit '/rails/info/routes' or run `rake routes` we can give them that information on the page.
  • Loading branch information...
commit fa714ec7dffd12b8508c756e6526eff5ae8e4202 1 parent ee20be7
Richard Schneeman schneems authored
13 actionpack/lib/action_dispatch/middleware/debug_exceptions.rb
View
@@ -1,5 +1,7 @@
require 'action_dispatch/http/request'
require 'action_dispatch/middleware/exception_wrapper'
+require 'rails/application/route_inspector'
+
module ActionDispatch
# This middleware is responsible for logging exceptions and
@@ -39,7 +41,8 @@ def render_exception(env, exception)
:exception => wrapper.exception,
:application_trace => wrapper.application_trace,
:framework_trace => wrapper.framework_trace,
- :full_trace => wrapper.full_trace
+ :full_trace => wrapper.full_trace,
+ :routes => formatted_routes(exception)
)
file = "rescues/#{wrapper.rescue_template}"
@@ -78,5 +81,13 @@ def logger(env)
def stderr_logger
@stderr_logger ||= ActiveSupport::Logger.new($stderr)
end
+
+ private
+ def formatted_routes(exception)
+ if exception.is_a?(ActionController::RoutingError) || exception.is_a?(ActionView::Template::Error)
+ inspector = Rails::Application::RouteInspector.new
+ inspector.format(Rails.application.routes.routes).join("\n")
+ end
+ end
end
end
10 actionpack/lib/action_dispatch/middleware/templates/rescues/routing_error.erb
View
@@ -10,8 +10,14 @@
</ol>
</p>
<% end %>
+<%= render :template => "rescues/_trace" %>
+
+<h2>
+ Routes
+</h2>
+
<p>
- Try running <code>rake routes</code> for more information on available routes.
+ Routes match in priority from top to bottom
</p>
-<%= render :template => "rescues/_trace" %>
+<p><pre><%= @routes %></pre></p>

1 comment on commit fa714ec

Mike Burns

Fantastic!

Please sign in to comment.
Something went wrong with that request. Please try again.