La solución está literalmente en la publicación que está encima de la tuya. ![]()
Deberíamos arreglar el script. ¿Quizás puedas crear una PR que resuelva el problema para todos?
La solución está literalmente en la publicación que está encima de la tuya. ![]()
Deberíamos arreglar el script. ¿Quizás puedas crear una PR que resuelva el problema para todos?
Gracias, eso lo solucionó, lamento lo sucedido. Como penitencia por mi incapacidad para leer, abrí Added duplication to name to prevent modification of frozen string exception by adam-skalicky · Pull Request #30325 · discourse/discourse · GitHub para ahorrarle a cualquier otra persona la vergüenza de hacer una pregunta tonta.
¿Este script de importación hace que Discourse replique el encadenamiento de correos electrónicos de Mailman 2 de alguna manera (por ejemplo, usando la pequeña flecha de Discourse para indicar “In-Reply-To”) o es puramente cronológico (para cada hilo basado en Message-ID, In-Reply-To y References)?
Sí, lo hace
Genial. A muchos de mis correos electrónicos de la lista de distribución les faltan las cabeceras In-Reply-To y References que deberían tener, por lo que podrían importarse como temas nuevos en lugar de simplemente respuestas. Si no recuerdo mal, el script utiliza esas cabeceras o las cabeceras del asunto (no ambas).
Creo que ya pregunté esto en el pasado, pero ¿hay alguna forma no manual de añadir estas cabeceras al archivo MBOX y/o reorganizar los correos electrónicos antes o después de importarlos a Discourse?
Ahora es posible fusionar temas y mantener el orden cronológico, así que tal vez esa sea la respuesta. Simplemente les faltaría la pequeña flecha de Discourse para indicar a quién respondía el mensaje.
El script de importación de mbox tiene dos fases. La primera es la indexación y genera una base de datos SQLite. Podrías modificar los datos en SQLite antes de la importación, o modificar el script de Ruby.
Toda la magia de ordenar/agrupar por asunto o encabezados ocurre aquí:
Podrías añadir tu propia lógica de agrupación si sabes cómo quieres agrupar los correos electrónicos.
¡Tardará un tiempo antes de que siquiera considere algo tan complejo!
En https://bazaar.launchpad.net/~mailman-coders/mailman/2.1/view/head:/Mailman/Archiver/pipermail.py#L669, Pipermail de Mailman 2 parece buscar lo siguiente en orden de preferencia:
Esa combinación de enfoques parece ideal. En el tercer caso, podría tener sentido que Discourse no utilice la flecha “en respuesta a”.
Según recuerdo, Hyperkitty de Mailman 3 no consideraba el asunto en absoluto, lo cual no era tan bueno.
Disculpe que me inmiscuya con una pregunta posiblemente tonta, pero no pude encontrar una respuesta clara aquí. Me gustaría saber si el proceso de importación crea un nuevo usuario de Discourse por cada correo electrónico, con deduplicación por supuesto, o si todos se registran como un único usuario del sistema. Tengo una lista de correo con 20 años de publicaciones y es bastante grande y difícil experimentar. Además, ¿qué pasa con las respuestas en la lista original? ¿Se enlazan en hilos?
Sí, los usuarios se crean, uno por dirección de correo electrónico.
Logré realizar una Google Takeout de mis grupos de Google, subir los archivos .mbox e importarlos.
Estos pasos fueron útiles para mapear data/folder a una categoría existente, pero esto debe hacerse en el contenedor import, no en el contenedor app como se indica en este artículo:
./launcher enter import
rails c
# Usa el ID de categoría mostrado en la URL, por ejemplo
# es 16 cuando la ruta de la categoría se ve así: /c/soccer/16
category = Category.find(16)
# Usa el nombre del directorio donde se almacenan los archivos mbox. Por ejemplo,
# cuando los archivos están en import/data/foo, debes usar "foo" como nombre del directorio.
category.custom_fields["import_id"] = "soccer"
category.save!
Ya tengo usuarios en Discourse que se migraron por sí mismos, por lo que el script de importación no pudo crear contactos para ellos (probablemente no sea algo malo), pero los mensajes importados en los que participaron estos usuarios existentes de Discourse muestran al remitente como system en lugar de su nombre.
¿Existe alguna forma de hacer que se mapeen los usuarios existentes a sus mensajes importados?
Por ahora, deshice todo recuperándome de una copia de seguridad reciente. Estoy listo para intentarlo de nuevo con alguna orientación sobre cómo manejar los usuarios existentes de Discourse y sus mensajes importados.
Actualización:
Claude ayudó a resolver el mapeo de usuarios existentes; es necesario ejecutar este bucle en la consola de Rails, además del fragmento anterior:
User.where("id > 0").find_each do |u|
email = u.email.downcase
unless u.custom_fields["import_id"].present?
u.custom_fields["import_id"] = email
u.save_custom_fields
end
end