Reimportando e-mails que já foram importados

Instalei com sucesso o Discourse usando o serviço de nuvem da Digital Ocean com o objetivo de migrar algumas listas de mala direta do listserv, se parecer que consigo fazer o Discourse fazer tudo o que precisamos. Durante os testes, usei o Thunderbird no Windows 10 para salvar novos e-mails que chegam da lista de mala direta a cada poucos dias em uma pasta no Windows, que depois copio para a pasta /var/discourse/shared/standalone/import/data/ExampleCategory1 (ou ExampleCategory2) usando o FileZilla. Em seguida, inicio o contêiner de importação do Docker e executo o import_mbox.sh. Até agora, tudo funcionou bem e posso fazer o Discourse replicar manualmente o que chegou através das listas de mala direta em que estou.

No entanto, imagine que tenho ExampleCategory1 e ExampleCategory2 como categorias e coloco os e-mails destinados à primeira pasta, ExampleCategory1, na segunda, ExampleCategory2, por engano, e depois executo a importação antes de perceber. (O arrastar e soltar deu errado no FileZilla!)

Agora tenho os e-mails de uma lista de mala direta na categoria de outra, por engano.

Para corrigir isso, deletei todos os tópicos/postagens em ExampleCategory2 usando a interface web, e também usando o comando rake destroy:topics["ExampleCategory2"] depois, para garantir, com o plano de apenas executar o import_mbox.sh novamente (tenho cópias de todos os e-mails que deveriam estar em cada categoria). No entanto, o Discourse parece se lembrar de quais e-mails ele importou, mesmo que as postagens tenham sido excluídas, e, portanto, não os importará novamente!

Como posso fazer isso?

O log de e-mails recebidos na seção de configurações do administrador mostra os e-mails de entrada que criaram as postagens que agora foram excluídas, mas não há hiperlink para levá-lo à postagem (já que ela foi excluída). Presumo que eu tenha que limpar toda a evidência do e-mail de entrada original, mas não tenho ideia de como fazer isso.

2 curtidas

A menos que você tenha centenas de milhares de posts, o que eu recomendo é apagar o banco de dados e começar de novo. Se você quiser fazer isso de uma maneira mais dolorosa e que provavelmente causará problemas, você pode descobrir como excluir os PostCustomFields que contêm os IDs de importação. Se você quiser excluir todos eles, pode fazer PostCustomField.all.destroy_all, mas se for fazer isso, então é melhor fazer do jeito fácil.

2 curtidas

Quando você diz ‘limpar o banco de dados’, você quer dizer todos os tópicos e postagens do Discourse e também todos os registros de e-mails recebidos que passaram pelo importador (mas deixar a estrutura do Discourse e usuários intactos)? Ou você quer dizer o banco de dados de e-mails importados, o que deixaria as postagens existentes no lugar, mas me permitiria reexecutar o importador com e-mails antigos?

1 curtida

Ah. Se você tem executado sua importação em uma instância ativa que teve usuários adicionando posts e afins, então você está em apuros.

Se você excluiu todos os posts importados, você pode fazer algo como

PostCustomField.where(name: “import_id”).destroy_all

1 curtida

Muito obrigado @pfaffman! Isso parece ter funcionado, embora eu não tenha certeza do que aconteceu nos bastidores.

Eu usei ./launcher enter app, depois digitei rails c, então PostCustomField.where(name: "import_id").destroy_all e muita escrita apareceu (com algumas partes coloridas de vermelho e verde), depois quando saí do rails e executei novamente import_mbox.sh os e-mails originais que haviam sido importados anteriormente e depois deletados por mim (removendo os tópicos) apareceram novamente no discourse. Se eu copiar e-mails para a outra pasta de categoria, eles também são reimportados, como duplicatas, como eu suspeitava.

É apenas um fórum de teste com algumas respostas adicionais como testes para as pessoas olharem antes de decidirmos se mudamos ou não para o discourse, então apagar e reiniciar não teria sido uma grande perda.

Você também mencionou apagar o banco de dados e reimportar tudo. Qual é a maneira mais fácil de apagar?

Fico feliz que tenha funcionado! E fico feliz que começar de novo não será um problema. Eu realmente acho que é melhor começar do zero, se você puder.

A maneira mais fácil de limpar é

rm -r /var/discourse/shared/standalone/post*

E então reconstruir. Outra coisa que você pode fazer é fazer um backup imediatamente após reconstruir e então você pode restaurar esse.

1 curtida