Ошибка следов в Erubis
По умолчанию, когда шаблон Erubis вызывает ошибку, вы получаете что-то вроде этого:
(erubis):32:in `evaluate': compile error (SyntaxError)
(erubis):30: syntax error, unexpected ')', expecting ']'
(erubis):32: unterminated string meets end of file
Номера строк относятся к шаблону.
Это все хорошо, когда у вас есть только один шаблон, но я обрабатываю несколько файлов шаблонов. Каков наилучший способ заменить вышеперечисленное более удобным сообщением об ошибке, например, с указанием пути к исходному файлу вместо (erubis):32
?
Я думал о спасении, возни с объектом исключения и повторном поднятии, но мне интересно, есть ли более простой способ, предоставляемый API Erubis (или каким-либо другим).
2 ответа
Решение
Вы можете передать: параметр имени файла в Erubis.
eruby = Erubis::Eruby.new(string, :filename=>"file.rhtml")
Я все еще подозреваю, что мог бы быть лучший способ сделать это, используя 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