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.
SessionStore was recently changed to delegate to hash
object instead of inherit from it. Since we don't want
to extend SessionStore with every method implemented in
Hash, it's better to just convert any object passed to
debug_hash (which is also better as we don't require
to pass Hash instance there, it can be any object that
can be converted to Hash).
If a user gets a routing error due to a view helper such as using user_path without an :id they must go to their logs to see the backtrace. By adding in the trace template, a user can see which line the error occurred on without leaving the browser.
When a routing error occurs outside of the view the application trace will be blank and will not confuse developers.
When a newcomer hits the routing error page they
are often confused about how to trouble shoot the
next step. Adding a simple help text can gently
remind coders where to get more help.
This commit breaks all exception catching plugins like ExceptionNotifier. These plugins should be rewritten as middleware instead overriding Controller#rescue_action_in_public.