Tengo una lista de correos electrónicos en un archivo CSV a los que voy a otorgar una insignia. Esperaba que un grupo no se correspondiera en nuestro foro (estoy usando la lista de todos los asistentes a un evento y no todos tienen cuenta en el foro). Parecía que funcionaba, muchos se correspondieron bien, pero noté que alguien que debería haber recibido una no lo hizo.
Lo probé de nuevo solo con su dirección de correo electrónico en un CSV, y todavía apareció como que no se correspondía con un usuario existente.
Podría hacer eso para este ejemplo, pero como tengo una lista de miles de correos electrónicos y no nombres de usuario, no escalaría para todos los demás.
Estas advertencias no están relacionadas con tu problema. Todos los que no configuraron una clave de licencia de MaxMind las ven. Dado que la gente está perdiendo tiempo investigando estas advertencias cuando se enfrenta a otros problemas, quería silenciarlas. Sin embargo, mi commit fue revertido, ya que rompió algunas otras pruebas de CI y entornos de desarrollo. Necesita ser rehecho de otra manera.
Con respecto a tu problema, aquí están los bloques de código relevantes:
No veo ningún error obvio, pero tampoco soy programador de Ruby. Lo probé en nuestra instancia con una o dos direcciones de correo electrónico en un simple CSV separado por comas, y funcionó. También funcionó, independientemente de si usé finales de línea LF o CRLF, solo para descartar algunos problemas comunes del analizador de archivos. ¿Cómo creas el archivo CSV y se ve bien cuando lo abres en un editor de texto simple, como el Bloc de notas, nano, vi, lo que sea?
Genial, gracias por tu ayuda. Eso es lo que estaba pensando sobre la advertencia de MaxMind, pero solo tuve tiempo de leerla brevemente antes de desconectarme ayer.
El archivo CSV se genera desde Salesforce y tiene una dirección de correo electrónico en cada línea, sin comas ni espacios. Cuando lo pego en un editor de texto básico, se ve totalmente bien; sin caracteres adicionales ni nada. También probé con un CSV nuevo con una sola dirección de correo electrónico y tuve el mismo error.
Estrictamente hablando, entonces no es un CSV, que significa “valores separados por comas” . Pero sé que la extensión de archivo se usa ampliamente también con otros separadores, y lo que es más importante, los saltos de línea son comunes como separador de conjuntos de datos, por lo que un correo electrónico por línea debería funcionar, y … funciona aquí.
De hecho, hice una prueba incorrecta ayer, ya que agregué mi correo electrónico válido primero y el no válido segundo. Pensé que simplemente omitía los correos electrónicos inexistentes en silencio, pero en realidad solo analiza la primera entrada de cada línea, por lo que no permite múltiples direcciones de correo electrónico en cada línea. El código en realidad lo deja bastante claro:
line = CSV.parse_line(line).first&.strip
Y luego agrega todo el valor de line como una entrada de correo electrónico o nombre de usuario para que coincida.
Cuando agrego varios correos electrónicos en una línea cada uno, mezclando válidos e inválidos, muestra el número correcto de lotes aplicados con éxito y enumera todos los correos electrónicos que no se pudieron emparejar. Probado nuevamente con saltos de línea de Windows y UNIX:
Sin embargo, las líneas múltiples o los valores múltiples de todos modos no son tu problema, si falla en el primer correo electrónico a pesar de que es correcto . No estoy seguro de cómo depurar fácilmente sin reconstruir la instancia de Discourse. ¿Usas el instalador oficial de la imagen de Docker?
EDIT: Lol, el subtítulo de la imagen fue agregado por alguna IA, en idioma alemán, al menos aquí en mi navegador con configuración regional alemana. Bastante detallado y muy correcto .
Lo comprobaré con nuestro equipo de TI, ellos son los que lo configuraron, así que no estoy seguro de si está en Docker.
Además, una actualización algo extraña… Creo que lo resolví, pero no tengo idea de por qué o cómo.
Aquí está mi cadena de eventos actual:
El archivo original era un archivo .xlsx descargado de Salesforce, que guardé como CSV; esto no otorgó a mi usuario de prueba, pero funcionó con otros.
Probé con solo un correo electrónico en un CSV nuevo; eso tampoco funcionó.
Intenté algunas cosas para limpiar los datos; aquí es cuando comencé a recibir el error 502 y no se enviaron correos electrónicos. Creo que de alguna manera agregué campos vacíos adicionales o algo extraño aquí que hizo que el archivo fuera demasiado grande y no pudiera ser analizado, de ahí el (nuevo) error 502.
Pegar los correos electrónicos de ese mismo CSV en un CSV nuevo y fresco parece haberlo resuelto: ¡mi usuario de prueba recibió la insignia!
… ¿y posiblemente la parte más extraña es que él es el único al que le faltaba la insignia? No sé si creo esto completamente, porque parece poco probable que este problema solo afecte su correo electrónico y el de nadie más. Si marca la diferencia, su correo electrónico era el primero en el archivo.
Genial que lo hayas resuelto. Probablemente algún carácter espacial se coló dentro, como “test” y \"test\" aquí en Discourse, lo que resultó en diferentes caracteres de comillas dobles, a pesar de que ingresé lo mismo.
Hay un límite de 50,000 entradas en el código de Discourse para este CSV, probablemente se pueda anular con la configuración. Sin embargo, supongo que no hubo 50,000 líneas. Probablemente el propio analizador, o incluso el servidor web, tengan otros límites de tamaño/caracteres más bajos.
Por cierto, puedes simplemente pasar un nuevo CSV con todos los correos electrónicos (y este en particular corregido) a “bulk badge” y te mostrará los resultados como si todo se hubiera asignado de nuevo. Así puedes verificar y asegurarte de si realmente todos los demás lo recibieron.