Quizás el orden de clasificación sea incorrecto porque estás agrupando los correos electrónicos por asunto. Podría valer la pena investigarlo. Los mensajes solo se ordenan por Subject y por el orden de los correos dentro del archivo mbox.
¿Estás realmente seguro de que necesitas agrupar los correos electrónicos por asunto? A juzgar por tu captura de pantalla, parece que los correos tienen el Message-ID correcto, así como las cabeceras In-Reply-To y References.
Gracias. Al observar la tabla email_order, parecen estar en el orden correcto:
msg_id
rowid
9205270657.AB03850@ben.dciem.dnd.ca
874
9206031720.AA22567@ben.dciem.dnd.ca
875
¿Podría haber algo más que impida importar estos mensajes padres?
Cuando hice la primera importación, parecía que no había ningún agrupamiento. Creo que el problema es que las respuestas están dirigidas a la lista de correo y no al remitente original. Además, algunos mensajes no tienen esos campos en absoluto, ya que el archivo fue compilado manualmente durante 28 años de manera bastante desordenada con diferentes versiones de Eudora.
¿Quizás no logra importar el mensaje principal? ¿Hubo algún error? Es difícil saber por qué no encuentra el mensaje. Lo siento, pero creo que tendrás que depurarlo tú mismo modificando el código Ruby del script de importación.
Vale, aunque no estoy familiarizado con Ruby ni con el script de importación, pero quizás pueda intentarlo.
¿Podrías indicarme qué scripts debo revisar y dónde se encuentran? ¿“Depurar” significa agregar sentencias de impresión o hay una funcionalidad más sofisticada?
Bueno, agregué algunos debugs con print a map_first_post
def map_first_post(row)
puts "Mapeando padre #{row['msg_id']} #{row['subject'][0..40]}"
mapped = map_post(row)
mapped[:category] = category_id_from_imported_category_id(row['category'])
mapped[:title] = row['subject'].strip[0...255]
mapped
puts "Mensaje mapeado #{row['msg_id']} #{row['subject'][0..40]}"
end
def map_reply(row)
parent = @lookup.topic_lookup_from_imported_post_id(row['in_reply_to'])
if parent.blank?
puts "El mensaje padre #{row['in_reply_to']} no existe. Saltando #{row['msg_id']}: #{row['subject'][0..40]}"
return nil
end
mapped = map_post(row)
mapped[:topic_id] = parent[:topic_id]
mapped
end
Estos prints funcionan bien y sugieren que el padre está mapeado (¿importado?)
873 / 65936 ( 1.3%) [3895 elementos/min]
Mapeando padre 9205270657.AB03850@ben.dciem.dnd.ca A CALL FOR HELP
Mensaje mapeado 9205270657.AB03850@ben.dciem.dnd.ca A CALL FOR HELP
874 / 65936 ( 1.3%) [3900 elementos/min]
El mensaje padre 9205270657.AB03850@ben.dciem.dnd.ca no existe. Saltando 9206031720.AA22567@ben.dciem.dnd.ca: A CALL FOR HELP
Así que no veo por qué el padre está en blanco en map_reply. Lo único que noto es que los números (873/874) son uno menos que el rowid anterior.
Pero creo que no puedo avanzar mucho más, ya que no sé qué hace @lookup.topic_lookup_from_imported_post_id y es muy laborioso editar con vi y volver a ejecutar la importación, con cada ciclo tomando alrededor de 30 minutos.
Está en base.rb, en el mismo directorio. Y hace exactamente lo que sugiere el nombre de la función: busca el topic_id encontrando el import_id (que, supongo, es el ID del mensaje en este caso) en un campo personalizado de tema (¿o quizás de publicación?).
Eso es mejor que los que tardan una semana. (A veces puedes hacer cosas para que el script de importación solo importe lo que estás tratando de depurar; averiguar cómo hacerlo queda como ejercicio para el lector.)
Puedes intentar revisar la base de datos y ver si el mensaje padre se está importando y si tiene un campo personalizado de tema/publicación llamado import_id.
¿Con ‘base de datos’ te refieres a index.db? ¿Con ‘importado’ te refieres a que se introdujo en la tabla de correos de index.db? Sí, está ahí. Pero no hay ninguna columna llamada ‘import_id’.
Importé el plugin de explorador de datos y revisé la base de datos de Discourse. Descubrí que el import_id del mensaje padre estaba presente en las tablas topic_custom_field y post_custom_field. Además, el mensaje existía.
Sin embargo, había sido eliminado. Así que, supongo, recibí el error “el mensaje padre no existe” porque la importación estaba buscando en la base de datos de Discourse en lugar de en index.db. Habría sido útil recibir un mensaje de error indicando que la publicación había sido eliminada.
De todos modos, creo que esto ocurrió porque, durante una prueba temprana, eliminé el primer lote (pequeño) de publicaciones importadas. Pensé que había restaurado el estado anterior a ese momento, pero claramente no fue así.
Lo bueno es que esto solo aplica a mi servidor de pruebas y no debería tener el problema en la importación del servidor en vivo.