A solução está literalmente no post acima do seu. ![]()
Nós deveríamos corrigir o script. Talvez você possa criar um PR que resolva o problema para todos?
A solução está literalmente no post acima do seu. ![]()
Nós deveríamos corrigir o script. Talvez você possa criar um PR que resolva o problema para todos?
Obrigado, isso resolveu, desculpe por isso. Em penitência pela minha incapacidade de ler, abri Added duplication to name to prevent modification of frozen string exception by adam-skalicky · Pull Request #30325 · discourse/discourse · GitHub para poupar qualquer outra pessoa da vergonha de fazer uma pergunta estúpida.
Este script de importação faz com que o Discourse replique o encadeamento de e-mails do Mailman 2 de alguma forma (por exemplo, usando a pequena seta do Discourse para significar “In-Reply-To”) ou é puramente cronológico (para cada thread com base em Message-ID, In-Reply-To e References)?
Sim, faz.
Legal. Vários dos meus e-mails da lista de mala direta não têm os cabeçalhos In-Reply-To e References que deveriam ter, então podem ser importados como novos tópicos em vez de apenas respostas. Pela memória, o script usa esses cabeçalhos ou cabeçalhos de assunto (não ambos).
Acho que já perguntei isso no passado distante, mas existem maneiras não manuais de adicionar esses cabeçalhos ao arquivo MBOX e/ou reorganizar os e-mails antes ou depois de importar para o Discourse?
É possível agora mesclar tópicos e manter a ordem cronológica, então talvez essa seja a resposta. Eles apenas não teriam a pequena seta do Discourse para indicar a quem a mensagem estava respondendo.
O script de importação mbox tem duas fases. A primeira é a indexação e gera um banco de dados SQLite. Você pode modificar os dados no SQLite antes da importação ou modificar o script Ruby.
Toda a mágica de ordenação/agrupamento por assunto ou cabeçalhos acontece aqui:
Você pode adicionar sua própria lógica de agrupamento se souber como deseja agrupar e-mails.
Vai demorar um pouco até que eu considere algo tão complexo!
Em https://bazaar.launchpad.net/~mailman-coders/mailman/2.1/view/head:/Mailman/Archiver/pipermail.py#L669, o Pipermail do Mailman 2 parece procurar o seguinte em ordem de preferência:
Essa combinação de abordagens parece ideal. No terceiro caso, pode fazer sentido o Discourse não usar a seta “em resposta a”.
Pela memória, o Hyperkitty do Mailman 3 não considerava o assunto de forma alguma, o que não era tão bom.
Perdoe-me por me intrometer com uma pergunta possivelmente estúpida, mas não consegui encontrar uma resposta clara aqui. Gostaria de saber se o processo de importação cria um novo usuário do Discourse para cada e-mail, com desduplicação, é claro, ou se todos eles se tornam um único usuário do sistema. Eu tenho uma lista de e-mails com 20 anos de postagens e ela é bem grande e difícil de experimentar. Além disso, e quanto às respostas na lista original? Elas são encadeadas?
Sim, os usuários são criados, um por endereço de e-mail.
Consegui fazer um Google Takeout dos meus grupos do Google, fazer upload dos arquivos .mbox e importar.
Esses passos foram úteis para mapear o data/folder para uma categoria existente, mas isso precisa ser feito no contêiner import, não no contêiner app como neste artigo:
./launcher enter import
rails c
# Use o ID da categoria mostrado na URL, por exemplo
# é 16 quando o caminho da categoria se parece com isso: /c/soccer/16
category = Category.find(16)
# Use o nome do diretório onde os arquivos mbox estão armazenados. Por exemplo,
# quando os arquivos estão armazenados em import/data/foo, você deve usar "foo" como nome do diretório.
category.custom_fields["import_id"] = "soccer"
category.save!
Já tenho usuários no Discourse que se migraram automaticamente, e por isso o script de importação falhou ao criar contatos para eles (provavelmente não é algo ruim), mas as mensagens importadas nas quais esses usuários existentes do Discourse estavam envolvidos mostram o remetente como system em vez do nome deles.
Existe alguma maneira de fazer com que ele mapeie os usuários existentes para suas mensagens importadas?
Por enquanto, desfiz tudo recuperando de um backup recente. Estou pronto para tentar novamente com alguma orientação sobre como lidar com usuários existentes do Discourse e suas mensagens importadas.
Atualização:
O Claude ajudou a resolver o mapeamento de usuários existentes; é necessário executar este loop no console do Rails, além do trecho acima:
User.where("id > 0").find_each do |u|
email = u.email.downcase
unless u.custom_fields["import_id"].present?
u.custom_fields["import_id"] = email
u.save_custom_fields
end
end