Rails: ParameterFilter::compiled_filter пытается дублировать символ

Я запускаю rails3 с драгоценным камнем уведомления об исключениях rails. Когда возникает исключение и должно быть отправлено электронное письмо, я получаю исключение из класса ParameterFilter. Я нашел проблему в источнике рельсов и не уверен, что это лучший способ продолжить.

Проблема возникает в ActionDispatch::Http::ParameterFilter. В методеcompile_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. Это исходит от рельсов, и я не знаю, есть ли способ заставить его быть строкой.

Я зарегистрировал ошибку рельсов https://rails.lighthouseapp.com/projects/8994/tickets/6557-symbol-duplication-error-in-parameterfilter-compiled_filter и у меня есть готовый патч, добавляющий if key.duplicable? в строку key.dup, я ищу вход в том, является ли это правильным решением.


person andrewmitchell    schedule 10.03.2011    source источник
comment
Вы когда-нибудь получали ответ на это?   -  person David N. Welton    schedule 31.12.2012


Ответы (1)


Это похоже на ошибку в Rails. Либо ключ должен быть строкой, а не символом, либо dup должен быть защищен duplicable?.

Вы должны сообщить об ошибке по адресу https://rails.lighthouseapp.com/, включая, по возможности, минимальный тестовый пример. .

person John    schedule 19.03.2011