diff options
-rw-r--r-- | actionpack/CHANGELOG | 2 | ||||
-rw-r--r-- | actionpack/lib/action_controller/templates/rescues/diagnostics.rhtml | 15 | ||||
-rw-r--r-- | actionpack/lib/action_controller/templates/rescues/template_error.rhtml | 6 | ||||
-rw-r--r-- | actionpack/lib/action_view/base.rb | 2 | ||||
-rw-r--r-- | actionpack/lib/action_view/template_error.rb | 33 |
5 files changed, 19 insertions, 39 deletions
diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 4a703ac88a..acf6777daf 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Clean up error pages by providing better backtraces [Nicholas Seckar] + * Raise an exception if an attempt is made to insert more session data into the ActiveRecordStore data column than the column can hold. #2234. [justin@textdrive.com] * Removed references to assertions.rb from actionpack assert's backtraces. Makes error reports in functional unit tests much less noisy. [Tobias Luetke] diff --git a/actionpack/lib/action_controller/templates/rescues/diagnostics.rhtml b/actionpack/lib/action_controller/templates/rescues/diagnostics.rhtml index 80634b2d34..584659252a 100644 --- a/actionpack/lib/action_controller/templates/rescues/diagnostics.rhtml +++ b/actionpack/lib/action_controller/templates/rescues/diagnostics.rhtml @@ -1,20 +1,9 @@ -<% - clean_backtrace = @exception.backtrace.collect { |line| Object.const_defined?(:RAILS_ROOT) ? line.gsub(RAILS_ROOT, "") : line } - app_trace = clean_backtrace.reject { |line| line =~ /(vendor|dispatch|ruby)/ } - framework_trace = clean_backtrace - app_trace -%> - <h1> <%=h @exception.class.to_s %> in <%=h (@request.parameters["controller"] || "<controller not set>").capitalize %>#<%=h @request.parameters["action"] || "<action not set>" %> </h1> -<pre><%=h Object.const_defined?(:RAILS_ROOT) ? @exception.message.gsub(RAILS_ROOT, "") : @exception.message %></pre> - -<% unless app_trace.empty? %><pre><code><%=h app_trace.join("\n") %></code></pre><% end %> +<pre><%=h @exception.clean_message %></pre> -<% unless framework_trace.empty? %> - <a href="#" onclick="document.getElementById('framework_trace').style.display='block'; return false;">Show framework trace</a> - <pre id="framework_trace" style="display:none"><code><%=h framework_trace.join("\n") %></code></pre> -<% end %> +<%= render_file(@rescues_path + "/_trace.rhtml", false) %> <%= render_file(@rescues_path + "/_request_and_response.rhtml", false) %> diff --git a/actionpack/lib/action_controller/templates/rescues/template_error.rhtml b/actionpack/lib/action_controller/templates/rescues/template_error.rhtml index 074d3a0bc0..2cf812cd5f 100644 --- a/actionpack/lib/action_controller/templates/rescues/template_error.rhtml +++ b/actionpack/lib/action_controller/templates/rescues/template_error.rhtml @@ -13,7 +13,9 @@ <p><%=h @exception.sub_template_message %></p> -<a href="#" onclick="document.getElementById('framework_trace').style.display='block'">Show template trace</a> -<pre id="framework_trace" style="display:none"><code><%=h @exception.original_exception.backtrace.collect { |line| Object.const_defined?(:RAILS_ROOT) ? line.gsub(RAILS_ROOT, "") : line }.join("\n") %></code></pre> +<% @real_exception = @exception + @exception = @exception.original_exception || @exception %> +<%= render_file(@rescues_path + "/_trace.rhtml", false) %> +<% @exception = @real_exception %> <%= render_file(@rescues_path + "/_request_and_response.rhtml", false) %> diff --git a/actionpack/lib/action_view/base.rb b/actionpack/lib/action_view/base.rb index c4fb589063..c65faeafbd 100644 --- a/actionpack/lib/action_view/base.rb +++ b/actionpack/lib/action_view/base.rb @@ -405,7 +405,7 @@ module ActionView #:nodoc: begin unless file_name.blank? - CompiledTemplates.module_eval(render_source, File.expand_path(file_name), -line_offset) + CompiledTemplates.module_eval(render_source, file_name, -line_offset) else CompiledTemplates.module_eval(render_source, 'compiled-template', -line_offset) end diff --git a/actionpack/lib/action_view/template_error.rb b/actionpack/lib/action_view/template_error.rb index 28f11675cf..9f7fc416c9 100644 --- a/actionpack/lib/action_view/template_error.rb +++ b/actionpack/lib/action_view/template_error.rb @@ -9,7 +9,7 @@ module ActionView def initialize(base_path, file_name, assigns, source, original_exception) @base_path, @assigns, @source, @original_exception = base_path, assigns, source, original_exception - @file_name = File.expand_path file_name + @file_name = file_name end def message @@ -46,9 +46,9 @@ module ActionView end def line_number - if @file_name - regexp = /#{Regexp.escape @file_name}(?:\(.*?\))?:(\d+)/ # A regexp to match a line number in our file - [@original_exception.message, @original_exception.backtrace].flatten.each do |line| + if file_name + regexp = /#{Regexp.escape file_name}:(\d+)\s*$/ + [@original_exception.message, @original_exception.clean_backtrace].flatten.each do |line| return $1.to_i if regexp =~ line end end @@ -56,20 +56,21 @@ module ActionView end def file_name - strip_base_path(@file_name) + stripped = strip_base_path(@file_name) + stripped[0] == ?/ ? stripped[1..-1] : stripped end def to_s "\n\n#{self.class} (#{message}) on line ##{line_number} of #{file_name}:\n" + source_extract + "\n " + - clean_backtrace(original_exception).join("\n ") + + original_exception.clean_backtrace.join("\n ") + "\n\n" end def backtrace [ "On line ##{line_number} of #{file_name}\n\n#{source_extract(4)}\n " + - clean_backtrace(original_exception).join("\n ") + original_exception.clean_backtrace.join("\n ") ] end @@ -78,21 +79,7 @@ module ActionView file_name = File.expand_path(file_name).gsub(/^#{Regexp.escape File.expand_path(RAILS_ROOT)}/, '') file_name.gsub(@base_path, "") end - - if defined?(RAILS_ROOT) - RailsRootRegexp = %r((#{Regexp.escape RAILS_ROOT}|#{Regexp.escape File.expand_path(RAILS_ROOT)})/(.*)?) - else - RailsRootRegexp = /^()(.*)$/ - end - - def clean_backtrace(exception) - exception.backtrace.collect do |line| - line.gsub %r{^(\s*)(/[-\w\d\./]+)} do - leading, path = $1, $2 - path = $2 if RailsRootRegexp =~ path - leading + path - end - end - end end end + +Exception::TraceSubstitutions << [/:in\s+`_run_(html|xml).*'\s*$/, ''] if defined?(Exception::TraceSubstitutions) |