aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actionpack/CHANGELOG2
-rw-r--r--actionpack/lib/action_controller/templates/rescues/diagnostics.rhtml15
-rw-r--r--actionpack/lib/action_controller/templates/rescues/template_error.rhtml6
-rw-r--r--actionpack/lib/action_view/base.rb2
-rw-r--r--actionpack/lib/action_view/template_error.rb33
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)