5

rails exception-notifier gem で rails3 を実行しています。例外が発生し、電子メールを送信する必要がある場合、ParameterFilter クラスから例外が発生します。Rails のソースに問題が見つかりましたが、最善の方法がわかりません。

問題は ActionDispatch::Http::ParameterFilter で発生します。コンパイルされた_filter メソッドでは、38 行目でエラーが発生します: key = key.dupwhenkeyはシンボルです。シンボルは複製できないためです。ソースは次のとおりです。

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。isの場合にのみ呼び出すようdupにソースにパッチを適用すると、問題は解決します。作者がその条件をではなくにした理由があると思いますので、誰かがこのコードをよりよく理解しているかどうか知りたいです。keykeyduplicablevaluekey

このエラーは、application.rb のフィルタ パラメータにブロックを追加した場合にのみ発生します。したがって、ここでブロックを使用する必要のない、元の問題の回避策があるかもしれません。興味がある場合は、同僚の質問Rails: Filtersensitive data in JSON parameter from logsを参照してください。

これが問題となるキーは:action. これはレールからのものであり、代わりに強制的に文字列にする方法があるかどうかはわかりません。

Rails のバグhttps://rails.lighthouseapp.com/projects/8994/tickets/6557-symbol-duplication-error-in-parameterfilter-compiled_filterを提出し、次の行にifkey.duplicable?を追加するパッチを用意しました。key.dupそれが正しい解決策であるかどうかについての情報を探しています。

4

1 に答える 1

2

これは Rails のバグのようです。キーは記号ではなく文字列にするか、dupで保護する必要がありますduplicable?

https://rails.lighthouseapp.com/でバグを報告し、可能であれば最小限のテスト ケースを含めてください。

于 2011-03-19T19:19:03.777 に答える