2011-03-10 10 views
5

Estoy ejecutando rails3 con rails exception-notifier gem. Cuando se produce una excepción y se debe enviar un correo electrónico, recibo una excepción de la clase ParameterFilter. He encontrado el problema en la fuente de los rieles, y no estoy seguro de cuál es la mejor manera de proceder.Rails: ParameterFilter :: compiled_filter intenta duplicar el símbolo

El problema ocurre en ActionDispatch :: Http :: ParameterFilter. En el método compiled_filter, se produce un error en la línea 38: key = key.dup cuando key es un símbolo, porque los símbolos no son duplicables. Aquí está la fuente:

def compiled_filter 
    ... 
    elsif blocks.present? 
     key = key.dup 
     value = value.dup if value.duplicable? 
     blocks.each { |b| b.call(key, value) } 
    end 

veo que sólo llaman dup en value cuando es duplicable. Si parcheo la fuente para que solo llame al dup en key cuando key es duplicable, entonces mi problema desaparece. Supongo que hay una razón por la cual el autor puso esa condición en value y no en key, por lo que tengo curiosidad si alguien entiende mejor este código.

Este error solo se produce cuando agrega un bloque a sus parámetros de filtro en application.rb. Entonces, tal vez haya una solución alternativa para mi problema original que no requiere el uso de un bloque aquí. Si está interesado, consulte la pregunta de mi compañero de trabajo Rails: Filter sensitive data in JSON parameter from logs

La clave por la cual este es un problema es :action. Esto proviene de los rieles y no sé si hay alguna manera de forzarlo a ser una cadena en su lugar.

I presentado un error rieles https://rails.lighthouseapp.com/projects/8994/tickets/6557-symbol-duplication-error-in-parameterfilter-compiled_filter y tengo un parche que añade listo si key.duplicable? a la línea key.dup, estoy buscando para la entrada de si esa es la solución correcta.

+0

¿Alguna vez recibió una respuesta a esto? –

Respuesta

2

Parece un error en Rails. O la clave debe ser una cadena en lugar de un símbolo, o el dup debe estar protegido por duplicable?.

Debe archivar un error en https://rails.lighthouseapp.com/, incluyendo un caso de prueba mínimo si es posible.

Cuestiones relacionadas