But let's say we get an error (exception) during the execution of
thing2(). How can I find out that this is where the error occurred? I
don't want to instrument thing1, thing2, thing3, etc; I'm hoping I can
just find out what ERB was doing when we errored out. Thx - m.
But let's say we get an error (exception) during the execution of
thing2(). How can I find out that this is where the error occurred? I
don't want to instrument thing1, thing2, thing3, etc; I'm hoping I can
just find out what ERB was doing when we errored out. Thx - m.
The following code illustrates how this could be accomplished (also
available as a pastie[1]):
require 'erb'
def thing1(); "foo" end
def thing2(); raise Exception.new("Something went wrong") end
def thing3(); "bar" end
begin
erb.run
rescue Exception => e
puts "Exception: #{e}"
line = e.backtrace.grep(/^\(erb\)/)[0].split(':')[1].to_i
puts "While evaluating line #{line} of the template:"
puts template.split("\n")[line-1]
puts "Backtrace: ", e.backtrace
end
Very much so, thank you. Grepping and parsing the backtrace is the exact
clue that I needed. m.
···
Matthias Reitinger <reitinge@in.tum.de> wrote:
matt neuburg wrote:
> Let's say I've got an ERB template:
>
> text1
> <%= thing1() %>
> text2
> <%= thing2() %>
> text3
> <%= thing3() %>
> text4
>
> But let's say we get an error (exception) during the execution of
> thing2(). How can I find out that this is where the error occurred? I
> don't want to instrument thing1, thing2, thing3, etc; I'm hoping I can
> just find out what ERB was doing when we errored out. Thx - m.
The following code illustrates how this could be accomplished (also
available as a pastie[1]):
require 'erb'
def thing1(); "foo" end
def thing2(); raise Exception.new("Something went wrong") end
def thing3(); "bar" end
begin
erb.run
rescue Exception => e
puts "Exception: #{e}"
line = e.backtrace.grep(/^\(erb\)/)[0].split(':')[1].to_i
puts "While evaluating line #{line} of the template:"
puts template.split("\n")[line-1]
puts "Backtrace: ", e.backtrace
end