Talvez a ordem de classificação esteja incorreta porque você está agrupando e-mails por assunto? Vale a pena investigar. As mensagens são classificadas apenas por Subject e pela ordem dos e-mails dentro do arquivo mbox.
Você tem certeza de que precisa agrupar os e-mails por assunto? A julgar pela sua captura de tela, parece que os e-mails possuem Message-ID, bem como os cabeçalhos In-Reply-To e References corretos.
Obrigado. Analisando a tabela email_order, elas parecem estar na ordem correta:
msg_id
rowid
9205270657.AB03850@ben.dciem.dnd.ca
874
9206031720.AA22567@ben.dciem.dnd.ca
875
Poderia haver algo mais impedindo a importação dessas mensagens pai?
Quando fiz a primeira importação, parecia que não havia nenhum agrupamento. Acredito que o problema seja que as respostas são direcionadas à lista de discussão e não ao remetente original. Além disso, algumas mensagens não possuem esses campos, já que o arquivo foi montado manualmente ao longo de 28 anos de forma bastante desorganizada, com diferentes versões do Eudora.
Talvez ele falhe ao importar a mensagem pai? Houve algum erro? É difícil dizer por que ele não encontra a mensagem. Sinto muito, mas acho que você precisará depurar isso você mesmo, modificando o código Ruby do script de importação.
Bem, adicionei alguns prints de debug ao map_first_post
def map_first_post(row)
puts "Mapeando pai #{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 "Mensagem mapeada #{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 "Mensagem pai #{row['in_reply_to']} não existe. Ignorando #{row['msg_id']}: #{row['subject'][0..40]}"
return nil
end
mapped = map_post(row)
mapped[:topic_id] = parent[:topic_id]
mapped
end
Esses prints funcionam e sugerem que o pai foi mapeado (importado?)
873 / 65936 ( 1.3%) [3895 itens/min]
Mapeando pai 9205270657.AB03850@ben.dciem.dnd.ca A CALL FOR HELP
Mensagem mapeada 9205270657.AB03850@ben.dciem.dnd.ca A CALL FOR HELP
874 / 65936 ( 1.3%) [3900 itens/min]
Mensagem pai 9205270657.AB03850@ben.dciem.dnd.ca não existe. Ignorando 9206031720.AA22567@ben.dciem.dnd.ca: A CALL FOR HELP
Então, não vejo por que o pai estaria em branco no map_reply. A única coisa que notei é que os números (873/874) são um a menos que o rowid acima.
Mas acho que não consigo avançar muito mais, pois não sei o que @lookup.topic_lookup_from_imported_post_id está fazendo e é muito trabalhoso editar com vi e relançar a importação, com cada ciclo levando cerca de 30 minutos.
Ele está em base.rb, no mesmo diretório. E está fazendo exatamente o que o nome da função sugere: está procurando o topic_id ao encontrar o import_id (que, presumo, seja o ID da mensagem neste caso) em um campo personalizado do tópico (ou talvez de um post?).
Isso é melhor do que aqueles que levam uma semana. (Às vezes, é possível fazer com que o script de importação importe apenas o que você está tentando depurar; descobrir como fazer isso fica como um exercício para o leitor.)
Você pode tentar verificar no banco de dados se a mensagem pai está sendo importada e se ela possui um campo personalizado de tópico/post com import_id.
Por ‘banco de dados’, você quer dizer index.db? Por ‘importada’, você quer dizer inserida na tabela de e-mails do index.db? Sim, ela está lá. Mas não há nenhuma coluna chamada ‘import_id’.
Importei o plugin Data Explorer e examinei o banco de dados do Discourse. Percebi que o import_id da mensagem pai estava presente nas tabelas topic_custom_field e post_custom_field. Além disso, a mensagem realmente existia.
No entanto, ela havia sido excluída. Então, imagino que tenha recebido o erro “mensagem pai não existe” porque a importação estava consultando o banco de dados do Discourse em vez do index.db. Seria bom receber uma mensagem de erro informando que a postagem havia sido excluída.
De qualquer forma, acredito que isso ocorreu porque, durante um teste inicial, eu havia excluído o primeiro lote (pequeno) de postagens importadas. Achei que tivesse restaurado o sistema para antes desse ponto, mas claramente não foi isso que aconteceu.
A boa notícia é que isso só se aplica ao meu servidor de testes e não devo ter esse problema na importação no servidor de produção.