Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Changeset 2624

Show
Ignore:
Timestamp:
10/15/05 19:05:15 (3 years ago)
Author:
ulysses
Message:

Clean up error pages by providing better backtraces

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/actionpack/CHANGELOG

    r2612 r2624  
    11*SVN* 
     2 
     3* Clean up error pages by providing better backtraces [Nicholas Seckar] 
    24 
    35* 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] 
  • trunk/actionpack/lib/action_controller/templates/rescues/diagnostics.rhtml

    r1048 r2624  
    1 <% 
    2   clean_backtrace = @exception.backtrace.collect { |line| Object.const_defined?(:RAILS_ROOT) ? line.gsub(RAILS_ROOT, "") : line } 
    3   app_trace       = clean_backtrace.reject { |line| line =~ /(vendor|dispatch|ruby)/ } 
    4   framework_trace = clean_backtrace - app_trace 
    5 %> 
    6  
    71<h1> 
    82  <%=h @exception.class.to_s %> in 
    93  <%=h (@request.parameters["controller"] || "<controller not set>").capitalize %>#<%=h @request.parameters["action"] || "<action not set>" %> 
    104</h1> 
    11 <pre><%=h Object.const_defined?(:RAILS_ROOT) ? @exception.message.gsub(RAILS_ROOT, "") : @exception.message %></pre> 
     5<pre><%=h @exception.clean_message %></pre> 
    126 
    13 <% unless app_trace.empty? %><pre><code><%=h app_trace.join("\n") %></code></pre><% end %> 
    14  
    15 <% unless framework_trace.empty? %> 
    16   <a href="#" onclick="document.getElementById('framework_trace').style.display='block'; return false;">Show framework trace</a> 
    17   <pre id="framework_trace" style="display:none"><code><%=h framework_trace.join("\n") %></code></pre> 
    18 <% end %> 
     7<%= render_file(@rescues_path + "/_trace.rhtml", false) %> 
    198 
    209<%= render_file(@rescues_path + "/_request_and_response.rhtml", false) %> 
  • trunk/actionpack/lib/action_controller/templates/rescues/template_error.rhtml

    r1173 r2624  
    1414<p><%=h @exception.sub_template_message %></p> 
    1515 
    16 <a href="#" onclick="document.getElementById('framework_trace').style.display='block'">Show template trace</a> 
    17 <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> 
     16<% @real_exception = @exception 
     17   @exception = @exception.original_exception || @exception %> 
     18<%= render_file(@rescues_path + "/_trace.rhtml", false) %> 
     19<% @exception = @real_exception %> 
    1820 
    1921<%= render_file(@rescues_path + "/_request_and_response.rhtml", false) %> 
  • trunk/actionpack/lib/action_view/base.rb

    r2571 r2624  
    406406        begin 
    407407          unless file_name.blank? 
    408             CompiledTemplates.module_eval(render_source, File.expand_path(file_name), -line_offset) 
     408            CompiledTemplates.module_eval(render_source, file_name, -line_offset) 
    409409          else 
    410410            CompiledTemplates.module_eval(render_source, 'compiled-template', -line_offset) 
  • trunk/actionpack/lib/action_view/template_error.rb

    r2058 r2624  
    1010      @base_path, @assigns, @source, @original_exception =  
    1111        base_path, assigns, source, original_exception 
    12       @file_name = File.expand_path file_name 
     12      @file_name = file_name 
    1313    end 
    1414   
     
    4747   
    4848    def line_number 
    49       if @file_name 
    50         regexp = /#{Regexp.escape @file_name}(?:\(.*?\))?:(\d+)/ # A regexp to match a line number in our file 
    51         [@original_exception.message, @original_exception.backtrace].flatten.each do |line| 
     49      if file_name 
     50        regexp = /#{Regexp.escape file_name}:(\d+)\s*$/ 
     51        [@original_exception.message, @original_exception.clean_backtrace].flatten.each do |line| 
    5252          return $1.to_i if regexp =~ line 
    5353        end 
     
    5757   
    5858    def file_name 
    59       strip_base_path(@file_name) 
     59      stripped = strip_base_path(@file_name) 
     60      stripped[0] == ?/ ? stripped[1..-1] : stripped 
    6061    end 
    6162     
     
    6364      "\n\n#{self.class} (#{message}) on line ##{line_number} of #{file_name}:\n" +  
    6465      source_extract + "\n    " + 
    65       clean_backtrace(original_exception).join("\n    ") + 
     66      original_exception.clean_backtrace.join("\n    ") + 
    6667      "\n\n" 
    6768    end 
     
    7071      [  
    7172        "On line ##{line_number} of #{file_name}\n\n#{source_extract(4)}\n    " +  
    72         clean_backtrace(original_exception).join("\n    ") 
     73        original_exception.clean_backtrace.join("\n    ") 
    7374      ] 
    7475    end 
     
    7980        file_name.gsub(@base_path, "") 
    8081      end 
    81  
    82       if defined?(RAILS_ROOT) 
    83         RailsRootRegexp = %r((#{Regexp.escape RAILS_ROOT}|#{Regexp.escape File.expand_path(RAILS_ROOT)})/(.*)?) 
    84       else 
    85         RailsRootRegexp = /^()(.*)$/ 
    86       end 
    87  
    88       def clean_backtrace(exception) 
    89         exception.backtrace.collect do |line| 
    90           line.gsub %r{^(\s*)(/[-\w\d\./]+)} do 
    91             leading, path = $1, $2 
    92             path = $2 if RailsRootRegexp =~ path 
    93             leading + path 
    94           end 
    95         end 
    96       end 
    9782  end 
    9883end 
     84 
     85Exception::TraceSubstitutions << [/:in\s+`_run_(html|xml).*'\s*$/, ''] if defined?(Exception::TraceSubstitutions)