From: Matthias Reitinger Date: 2009-03-22T03:09:28+09:00 Subject: Re: how to know where ERB stopped? 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 template = < text2 <%= thing2() %> text3 <%= thing3() %> text4 ERB erb = ERB.new(template) 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 Hope that helps! -Matthias [1]: http://www.pastie.org/422933 -- Posted via http://www.ruby-forum.com/.