默认情况下,当Erubis模板引发错误时,您会得到如下内容:
(erubis):32:in `evaluate': compile error (SyntaxError)
(erubis):30: syntax error, unexpected ')', expecting ']'
(erubis):32: unterminated string meets end of file
行号是指模板。
当你只有一个模板时,这一切都很好,但我正在批量处理一堆模板文件。用更可用的错误消息替换上述内容的最佳方法是什么,例如一个显示源文件的路径而不是(erubis):32
?
我想过拯救,搞乱异常对象,再次提升,但我想知道Erubis API(或其他一些)提供的方法是否更简单。
答案 0 :(得分:2)
您可以将:filename参数传递给Erubis。
eruby = Erubis::Eruby.new(string, :filename=>"file.rhtml")
答案 1 :(得分:0)
我仍然怀疑使用Erubis API可能有更好的方法来做到这一点,但是我写的一些代码似乎有效:
def compile_template(template_path, template_str, context, &block)
begin
Erubis::Eruby.new(template_str).evaluate(context, &block)
rescue Exception => exc
trace_normalizer = lambda { |line| line.gsub(/^\(erubis\):/, template_path + ':') }
backtrace = exc.backtrace.collect(&trace_normalizer)
message = trace_normalizer.call(exc.message)
raise exc.class, message, backtrace
end
end