Importar erro "Failed to map post"

Tenho cerca de 1000 posts falhando na importação, com, creio eu, o principal erro sendo “Falha ao mapear post”, como

Falha ao mapear post para b9ec0145-e587-c0e2-768d-ad482c3ab928@mmtaylor.net
método hex não definido para nil:NilClass

Isso parece causar falhas em muitos outros posts com mensagens de erro como,

1109 / 65895 ( 1.7%) [400 itens/min] A mensagem pai b9ec0145-e587-c0e2-768d-ad482c3ab928@mmtaylor.net não existe. Ignorando CAKPLMstp+CaTyfFinM-dHHpVxNHt0fy2vXT9Fx+21mE2RT-ijg@mail.gmail.com: Uma abordagem PCT para a “Lei de Potência”

Alguma sugestão sobre como resolver isso?

Tenho 28 anos de posts, com uma pasta para cada ano e um arquivo mbox para cada mês. Há 66.909 mensagens nos arquivos mbox. A importação mostra 65.895. A diferença de 1.014 é devido às falhas indicadas na saída da importação?

Os posts foram convertidos de mbx’s do Eudora para mbox’s padrão com o Aid4Mail.

Para o erro “A mensagem pai não existe”, vejo 421 ocorrências.
Para o erro “Falha ao mapear post”, vejo 149 ocorrências.

Minha expressão regular de divisão (split_regex) é “^From .@. [0-9]{4}”, que parece adequada para cabeçalhos como,

From mmt-xxx@somedomain.net Wed Aug 10 12:06:53 2016

Socorro! Alguma sugestão para isso? :woozy_face:

Vi o mesmo erro na semana passada enquanto trabalhava em um problema diferente. Vou corrigi-lo esta semana e postarei uma atualização aqui assim que estiver resolvido.

Essas são apenas avisos e provavelmente aparecem devido aos erros de “Falha ao mapear post”. Isso acontece quando uma mensagem referencia um post que não existe. Tenho quase certeza de que corrigir o outro problema resolverá a maioria, senão todos, desses avisos.

Esse erro deve ser corrigido por FIX: Email attachments with a size of 0 bytes caused error · discourse/discourse@e84d88d · GitHub

Eu atualizei, reconstruí a importação, verifiquei se o receiver.rb havia sido atualizado e executei a importação novamente.

Isso parece ter resolvido algumas centenas de mensagens, obrigado.

Ainda estou tendo cerca de 200 falhas, no entanto, devido a alguns tipos de erros:

Data ausente. Pulando bbe76bf7a9cab5a2ec2a06e6ef453555

Falha ao mapear post para 23a86e52-71ba-7435-1c9c-c4f2a134b90d@mmtaylor.net
Discourse::InvalidAccess

Além disso, há muitas mensagens de “Parent doesn’t exist” (Pai não existe), que presumo serem resultado dos erros acima.

Alguma ideia do que causa esses erros? No primeiro caso, examinei a mensagem mbx e não vi nenhuma data ausente.

Você pode dar uma olhada no index.db que o script de importação cria. É um banco de dados SQLite3. Você pode executar a seguinte consulta para ver com o que o analisador está trabalhando. Ela seleciona as mensagens para os dois Message-ID que você postou.

SELECT *
FROM email
WHERE msg_id IN ('bbe76bf7a9cab5a2ec2a06e6ef453555', '23a86e52-71ba-7435-1c9c-c4f2a134b90d@mmtaylor.net')

Acho que as colunas email_date e raw_message serão as mais interessantes para você. Talvez você consiga descobrir o que está confundindo o analisador de e-mails…

Para o primeiro, a data é nula, e vejo que não há data para essa mensagem no mbx. Notei que a resposta (com :Re) aparece antes da mensagem “inicial”, motivo pelo qual pensei que a data não estivesse faltando. A importação considera as mensagens pai como a primeira no arquivo com esse assunto?

A data do e-mail é extraída da linha “Date:”, como esta?

Date: Wed, 25 Mar 1992 12:23:00 GMT

Vou verificar se consigo corrigir aqueles com datas ausentes.

Quanto ao segundo, não consigo ver nada obviamente errado. Essa imagem dá alguma pista sobre o problema?

Não, ele usa os cabeçalhos In-Reply-To e References para corresponder e ordenar por Message-ID, a menos que você tenha alterado a configuração group_messages_by_subject do importador para true.

Sim.

Minha melhor suposição é que haja um problema com um dos anexos. Talvez a extensão do arquivo não seja permitida?

Eu configurei a configuração group_messages_by_subject para true, pois sem ela não havia nenhum agrupamento.

Essa mensagem tem duas imagens embutidas:

Content-Type: application/octet-stream;
name=“Conflict (was … long live Wil”
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename=“Conflict (was … long live Wil”

Content-Type: image/jpeg; name=“2.1.3FarmerSideEffectLoop.jpg”
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename=“2.1.3FarmerSideEffectLoop.jpg”

Será que o primeiro nome de arquivo não tem extensão?

Poderia resolver o problema da data inserindo-a no index.db, em vez de mexer no arquivo mbx?

Sim, isso funciona. Fiz o mesmo no passado. Recomendo definir index_only como true em settings.yml, para que ele não comece a importar imediatamente após indexar as mensagens. Você pode fazer todas as alterações necessárias no banco de dados após a conclusão da indexação. Em seguida, altere index_only para false novamente e reinicie a importação.

Acho que estou entendendo algo errado. A indexação já não foi feita, já que o index.db já está construído?

Eu transfiri o index.db para minha área de trabalho. Ia atualizar as datas, depois transferir o index.db de volta para o servidor e executar a importação novamente. Isso não está correto?

Decidi seguir o caminho de editar os arquivos mbox, adicionando uma linha “Date”, por exemplo: “Date: Wed, 25 Mar 1992 17:43:06”. Transfiri os arquivos atualizados e executei a importação novamente, duas vezes. No entanto, o campo email_date não foi atualizado.

Preciso excluir o index.db?

Sim, você precisa excluí-lo.