我刚刚发现了一个奇怪的行为,它使用ruby的字符串插值 如果我使用多行字符串,则会有所不同:
rescue StandardError => e
msg = 'Some long error message without interpolation '\
"#{symbol.inspect}: #{e.message}."
Rails.logger.error msg
raise e.exception(msg)
end
我将msg
的字符串分成两行,并将第一部分放入单行
引号,因为没有任何内插。 Rubocop很高兴。
日志记录语句使用symbol
的正确值记录消息:
11:06:57 web.1 | Some long error message without interpolation "VALOFSYMBOL": ERRORMSG
但是,当之后引发的异常,携带相同的消息时,是
最后打印(在resque failure log和airbrake中),不同的值(其中
变量有一段时间之前)打印symbol
:
Some long error message without interpolation "COMPLETEYDIFFERENT": ERRORMSG
不幸的是,我无法提供完整的工作示例,因为有一些
涉及的应用层,我只是希望可能有人
可以指出我正确的方向。怎么会发生这种情况?我的理解是
插值发生在字符串分配给msg
的时候,但是
似乎并非如此。
将代码更改为单行字符串可修复问题,字符串为 按照预期在两个地方印刷:
msg = "Some long error message without interpolation #{symbol.inspect}: #{e.message}."