rails exception-notifier gem で rails3 を実行しています。例外が発生し、電子メールを送信する必要がある場合、ParameterFilter クラスから例外が発生します。Rails のソースに問題が見つかりましたが、最善の方法がわかりません。
問題は ActionDispatch::Http::ParameterFilter で発生します。コンパイルされた_filter メソッドでは、38 行目でエラーが発生します: key = key.dup
whenkey
はシンボルです。シンボルは複製できないためです。ソースは次のとおりです。
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
にソースにパッチを適用すると、問題は解決します。作者がその条件をではなくにした理由があると思いますので、誰かがこのコードをよりよく理解しているかどうか知りたいです。key
key
duplicable
value
key
このエラーは、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
それが正しい解決策であるかどうかについての情報を探しています。