我正在使用 Rails 异常通知程序 gem 运行 Rails3。当发生异常并且应该发送电子邮件时,我从 ParameterFilter 类收到异常。我在 Rails 源代码中发现了问题,但不确定继续的最佳方法。
问题出现在 ActionDispatch::Http::ParameterFilter 中。在compile_filter方法中,第38行出现错误:key = key.dup
when key
是一个符号,因为符号是不可重复的。这是来源:
def compiled_filter
...
elsif blocks.present?
key = key.dup
value = value.dup if value.duplicable?
blocks.each { |b| b.call(key, value) }
end
我看到他们只打电话dup
on value
几时duplicable
。如果我将源修补为仅调用dup
on key
when key
is duplicable
,那么我的问题就消失了。我假设作者提出这个条件是有原因的value
并不是key
,所以我很好奇是否有人对这段代码有更好的理解。
仅当您将块添加到 application.rb 中的过滤器参数时,才会发生此错误。因此,也许我原来的问题有一个解决方法,不需要在这里使用块。有兴趣的话可以看看我同事的问题Rails:从日志中过滤 JSON 参数中的敏感数据
造成这个问题的关键是:action
。这来自 Rails,我不知道是否有任何方法可以强制它成为字符串。
我提交了一个 Rails 错误https://rails.lighthouseapp.com/projects/8994/tickets/6557-symbol-duplication-error-in-parameterfilter-compiled_filter我已经准备好了一个补丁,添加了 ifkey.duplicable?
to the key.dup
行,我正在寻找有关这是否是正确解决方案的意见。
这看起来像是 Rails 中的一个错误。键应该是字符串而不是符号,或者dup
应受到保护duplicable?
.
您应该在以下位置提交错误:https://rails.lighthouseapp.com/,如果可能的话包括一个最小的测试用例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)