我正在使用 rails exception-notifier gem 运行 rails3。当发生异常并且应该发送电子邮件时,我从 ParameterFilter 类中得到一个异常。我在 rails 源代码中发现了问题,但不确定最好的解决方法。
问题出现在 ActionDispatch::Http::ParameterFilter 中。在compiled_filter方法中,第38行出现错误:key = key.dup
when key
is a symbol,因为symbols are not dupliable。这是来源:
def compiled_filter
...
elsif blocks.present?
key = key.dup
value = value.dup if value.duplicable?
blocks.each { |b| b.call(key, value) }
end
我看到他们只dup
在value
它是时才打电话duplicable
。如果我将源修补为仅调用dup
when key
is key
,duplicable
那么我的问题就会消失。我假设作者将条件设置为 onvalue
和 not是有原因的key
,所以我很好奇那里是否有人对这段代码有更好的理解。
仅当您将块添加到 application.rb 中的过滤器参数时,才会发生此错误。因此,对于我的原始问题,也许有一种解决方法,不需要在此处使用块。如果您有兴趣,请参阅我同事的问题Rails: Filter sensitive data in JSON parameter from logs
这是一个问题的关键是:action
。这来自rails,我不知道是否有任何方法可以强制它成为一个字符串。
我提交了一个 Rails 错误https://rails.lighthouseapp.com/projects/8994/tickets/6557-symbol-duplication-error-in-parameterfilter-compiled_filter并且我准备好了一个补丁,如果添加key.duplicable?
到该key.dup
行,我寻找有关这是否是正确解决方案的输入。