首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails: ParameterFilter::compiled_filter尝试复制符号

Rails: ParameterFilter::compiled_filter尝试复制符号
EN

Stack Overflow用户
提问于 2011-03-11 04:18:49
回答 1查看 384关注 0票数 5

我正在使用rails异常通知程序gem运行rails3。当异常发生时,应该发送一封电子邮件,我从ParameterFilter类得到了一个异常。我在rails源代码中发现了这个问题,并且不确定最好的继续进行的方法。

此问题发生在ActionDispatch::Http::ParameterFilter中。在compiled_filter方法中,当key是一个符号时,第38行:key = key.dup出现错误,因为符号是不可复制的。以下是源代码:

代码语言:javascript
复制
def compiled_filter
    ...
    elsif blocks.present?
        key = key.dup
        value = value.dup if value.duplicable?
        blocks.each { |b| b.call(key, value) }
    end

我看到他们只在value上调用duplicable时才调用dup。如果我对源代码打补丁,使其只在key上调用dup,而keyduplicable,那么我的问题就解决了。我假设作者将该条件放在value上而不是key上是有原因的,所以我很好奇是否有人对这段代码有更好的理解。

仅当在application.rb中将块添加到过滤器参数时,才会出现此错误。因此,对于我最初的问题,可能有一种解决方法,它不需要在这里使用块。如果你感兴趣,请看我同事的问题Rails: Filter sensitive data in JSON parameter from logs

这个问题的关键是:action。这来自rails,我不知道是否有任何方法可以强制它成为字符串。

我提交了一个rails bug https://rails.lighthouseapp.com/projects/8994/tickets/6557-symbol-duplication-error-in-parameterfilter-compiled_filter,我已经准备好了一个补丁,它将if key.duplicable?添加到key.dup行中,我正在寻找关于这是否是正确的解决方案的意见。

EN

回答 1

Stack Overflow用户

发布于 2011-03-20 03:19:04

这看起来像是Rails中的一个bug。密钥应该是字符串而不是符号,或者dup应该受duplicable?保护。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5265431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档