5

我正在使用 rails exception-notifier gem 运行 rails3。当发生异常并且应该发送电子邮件时,我从 ParameterFilter 类中得到一个异常。我在 rails 源代码中发现了问题,但不确定最好的解决方法。

问题出现在 ActionDispatch::Http::ParameterFilter 中。在compiled_filter方法中,第38行出现错误:key = key.dupwhen keyis 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

我看到他们只dupvalue它是时才打电话duplicable。如果我将源修补为仅调用dupwhen keyis keyduplicable那么我的问题就会消失。我假设作者将条件设置为 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行,我寻找有关这是否是正确解决方案的输入。

4

1 回答 1

2

这看起来像 Rails 中的一个错误。键应该是字符串而不是符号,或者dup应该由duplicable?.

你应该在https://rails.lighthouseapp.com/提交一个错误,如果可能的话,包括一个最小的测试用例。

于 2011-03-19T19:19:03.777 回答