Obrigado por fornecer este guia e script de importação! Usei-o com sucesso com um grupo do Google, usando o Google Takeout. Apenas coloquei o arquivo .mbox no diretório correto e executei o script.
Tive uma dúvida sobre a importação de e-mails que têm pais que não estão no .mbox. Por exemplo, há muitos tópicos em nosso grupo que são iniciados a partir de um FWD de um e-mail que não foi enviado para o grupo, ou adicionando o grupo à lista de respostas no meio de uma conversa para incluí-los.
Atualmente, ao importar, parece que esses e-mails anteriores não estão presentes. Você pode encontrá-los, se clicar no ícone de e-mail e visualizar o HTML. Fiquei curioso se mais alguém encontrou essa mesma situação e teve alguma solução para isso. Eu poderia imaginar incluir a cadeia de e-mails anterior na postagem ou tentar analisá-la e extrair uma série de mensagens dela e adicionar todas elas.
Você precisaria encontrar uma maneira de gerar essas mensagens a partir do texto citado e adicioná-las ao arquivo mbox (provavelmente com cabeçalhos Id) antes de executar o script de importação.
Isto é realmente excelente. Mas tenho alguns problemas com alguns e-mails que chegam ao Discourse com um e-mail inicial e, em seguida, as respostas no formato mbox na mesma postagem, não formatadas. Não tenho certeza do que está causando isso.
A questão é: como posso excluir todos os e-mails importados (20 anos) sem excluir e recriar a instância do Discourse de destino?
Sei que o requisito recomendado de RAM é de 8 GB. Tentei importar 20 anos de posts em uma máquina virtual de 2 GB e ela funcionou por um tempo e travou com a mensagem ‘killed’. Máquinas de 8 GB em provedores de hospedagem como a DigitalOcean são caras (para mim). Existe alguma maneira de fazer isso com menos memória? Importar em lotes menores, talvez?
Talvez excluir essas categorias e, em seguida, excluir os campos personalizados de tópico associados.
Não, não acho que você possa fazer muito em uma máquina pequena em termos de importação. Você poderia tentar em um desktop, mas então você teria problemas de largura de banda para trazer o banco de dados de volta para a internet.
Sei que não há muita atividade neste tópico, mas não consigo fazer com que funcione corretamente. Muitos dos e-mails no formato mbox que importo não são divididos adequadamente. As linhas “From” se parecem com isto:
From MAILER-DAEMON Tue Nov 01 05:57:09 2022
Mas algumas mensagens têm uma importação correta e, em seguida, no mesmo corpo, têm itens brutos no formato mbox começando com a linha “From” típica. Em outras palavras, eles não estão sendo divididos. Não vejo que preciso modificar a regex que faz a divisão e não sei ruby, então não posso depurar o script de importação.
Não sei para onde ir a partir daqui. São 20 anos de mensagens para importar, então não posso revisar as mensagens importadas manualmente para corrigi-las. Em resumo, este script não está funcionando para mim. Por que eu seria o único a quem isso acontece?
Você não é o único. Meu primeiro trabalho pago no Discourse foi passar meses limpando arquivos mbox antigos que, por algum motivo que não me lembro, haviam sido editados manualmente.
Parece que você precisa mexer com a regex ou encontrar outra maneira de corrigir as mensagens erradas. Uma maneira é usar alguma outra ferramenta para dividir as mensagens em uma por arquivo.
Para constar, escrevi vários scripts de importação antes de saber Ruby.
Toda importação é única. Com 20 anos de dados, é uma boa aposta que você terá vários problemas diferentes, pois as coisas mudaram nos vários sistemas que foram usados.
Quero importar 20 anos de mensagens do meu sistema mailman2 para um diretório de arquivo, mas não quero criar IDs de usuário (nem mesmo os temporários) para eles, já que muitos de nossos assinantes se mudaram ou faleceram e isso criaria muitas contas que apenas ocupariam espaço.
Posso importá-los todos sob o mesmo ID de usuário (talvez ‘archive’)?
E esta pode ser uma pergunta boba, mas como o aplicativo é desligado durante o processo de importação, isso significa que os usuários que se inscreveram para receber e-mails sobre novas postagens não serão inundados com e-mails sobre todos os arquivos que acabaram de ser carregados?
Você pode comentar a função import_users e todas as mensagens serão de propriedade do sistema.
Você não vai economizar muito espaço.
Nenhum usuário receberá e-mail até que tenha usado o processo de “esqueci minha senha” para fazer login em sua conta. Se você estiver importando esses dados para uma comunidade existente, acredito que os usuários receberão notificações sobre as novas mensagens criadas pelo script de importação.
Obrigado, eu estava olhando o script de importação e pensei que poderia simplesmente desabilitar a seção de novos usuários. Testar isso está na minha lista.
Não é espaço em disco que estou pensando, é ter possivelmente centenas de contas de usuário preparadas que nunca serão usadas, então é mais como espaço mental ou uma lista de usuários muito longa.
Não estou encontrando o arquivo import_mbox.sh e, quando tento executar o script mbox.rb diretamente, recebo um monte de erros Ruby:
root@lists-import:/var/www/discourse/script/import_scripts# ruby mbox.rb mbox
fatal: propriedade duvidosa detectada no repositório em ‘/var/www/discourse’
Para adicionar uma exceção para este diretório, chame:
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/zeitwerk-2.6.7/lib/zeitwerk/loader/callbacks.rb:25:in `on_file_autoloaded’: esperado que o arquivo /var/www/discourse/lib/freedom_patches/pluck_first.rb defina a constante FreedomPatches::PluckFirst, mas não o fez (Zeitwerk::NameError)
Saudações, pessoal. Que ótimo guia. Obrigado a Gerhard e outros por contribuírem.
Alguém aqui adaptou isso para Lyris? Estou interessado em migrar uma instalação histórica e gostaria de entender se houve alguma preocupação especial que eles encontraram em um projeto semelhante.
para ser mais específico, modifiquei com sucesso o código que permitiu a importação, adicionando .dup na linha 447 do arquivo /var/www/discourse/script/import_scripts/base.rb:
params[:name].dup.strip!
Uma coisa não está clara: como posso importar para um dos sites multissite?
Alguém já encontrou um erro de "não é possível modificar String congelada"? Meu index.db é criado corretamente, mas falha ao criar categorias.
root@xxxxxxxxxx:/var/www/discourse# import_mbox.sh
O início da importação do mbox...
Carregando grupos existentes...
Carregando usuários existentes...
Carregando categorias existentes...
Carregando posts existentes...
Carregando tópicos existentes...
criando índice
indexando arquivos em /shared/import/data/xxxxx-xxxxxxx@xxxxxxx.com
indexando /shared/import/data/xxxxx-xxxxxxx@xxxxxxx.com/export.mbox
indexando respostas e usuários
criando categorias
/var/www/discourse/script/import_scripts/base.rb:447:in `strip!': **can't modify frozen String: \"xxxxx-xxxxxxx@xxxxxxx.com\" (****FrozenError****)**
from /var/www/discourse/script/import_scripts/base.rb:447:in `block in create_categories'
from /var/www/discourse/script/import_scripts/base.rb:438:in `each'
from /var/www/discourse/script/import_scripts/base.rb:438:in `create_categories'
from /var/www/discourse/script/import_scripts/mbox/importer.rb:50:in `import_categories'
from /var/www/discourse/script/import_scripts/mbox/importer.rb:34:in `execute'
from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
from script/import_scripts/mbox.rb:13:in `<module:Mbox>'
from script/import_scripts/mbox.rb:11:in `<module:ImportScripts>'
from script/import_scripts/mbox.rb:10:in `<main>'