ブロック内で発生するすべての例外の前にデバッグ情報を追加する必要がありますが、バックトレースを台無しにしたくありません。$!
1.9.3ではこれを許可していないようです。raise
私が何をしようとしても、バックトレースを置き換えています。
アイデア?
これが私が最初に使用していたものです:
def self.load(filename, virtual_path = nil)
t = Template.new(filename, virtual_path)
t.is_page? ? Page.new(t) : t
rescue
raise $!, "Error loading template '#{filename}'#{virtual_path ? " under virtual path '" + virtual_path + "'" : ""}: #{$!}"
end
私がこれまでに見つけた最高のものはこれです:
def self.load(filename, virtual_path = nil)
t = Template.new(filename, virtual_path)
t.is_page? ? Page.new(t) : t
rescue => e
raise e, "Error loading template '#{filename}'#{virtual_path ? " under virtual path '" + virtual_path + "'" : ""}: #{e.message} #{e.backtrace}"
end
これにより、元のスタックトレースがメッセージにダンプされますが、古いスタックトレースはスタックトレースとして保持されません。