Rails: ParameterFilter::compiled_filter пытается дублировать символ
Я использую rails3 с гемом уведомлений об исключениях rails. Когда возникает исключение, и электронное письмо должно быть отправлено, я получаю исключение из класса ParameterFilter. Я нашел проблему в источнике рельсов, и я не уверен, что лучший способ продолжить.
Проблема возникает в ActionDispatch::Http::ParameterFilter. В методе compiled_filter в строке 38 возникает ошибка: key = key.dup
когда key
является символом, потому что символы не дублируются. Вот источник:
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
на key
когда key
является duplicable
тогда моя проблема исчезнет. Я предполагаю, что есть причина, по которой автор поставил это условие value
и не key
, поэтому мне любопытно, если кто-то там лучше понимает этот код.
Эта ошибка возникает, только когда вы добавляете блок к параметрам фильтра в application.rb. Так что, возможно, есть обходной путь для моей первоначальной проблемы, который не требует использования блока здесь. Если вам интересно, посмотрите вопрос моего коллеги Rails: фильтруйте конфиденциальные данные в параметре JSON из журналов.
Ключ, для которого это проблема, :action
, Это происходит от рельсов, и я не знаю, есть ли способ заставить его быть строкой.
Я подал ошибку rails https://rails.lighthouseapp.com/projects/8994/tickets/6557-symbol-duplication-error-in-parameterfilter-compiled_filter и у меня есть готовый патч, который добавляет, если key.duplicable?
к key.dup
линия, я ищу информацию о том, является ли это правильным решением.
1 ответ
Это похоже на ошибку в Rails. Либо ключ должен быть строкой, чем символом, либо dup
должны быть защищены duplicable?
,
Вы должны отправить сообщение об ошибке на https://rails.lighthouseapp.com/, включая минимальный тестовый пример, если это возможно.