Migrer une liste de diffusion vers Discourse (mbox, Listserv, Google Groups, etc)

La solution se trouve littéralement dans le message juste au-dessus du vôtre. :wink:

Nous devrions corriger le script. Peut-être pourriez-vous créer une PR qui résoudrait le problème pour tout le monde ?

Merci, ça a résolu le problème, désolé pour ça. En pénitence pour mon incapacité à lire, j’ai ouvert Added duplication to name to prevent modification of frozen string exception by adam-skalicky · Pull Request #30325 · discourse/discourse · GitHub pour épargner à quiconque la honte de poser une question stupide.

1 « J'aime »

Ce script d’importation permet-il à Discourse de répliquer le chaînage des e-mails de Mailman 2 d’une quelconque manière (par exemple, en utilisant la petite flèche de Discourse pour signifier « In-Reply-To ») ou est-il purement chronologique (pour chaque fil basé sur Message-ID, In-Reply-To et References) ?

1 « J'aime »

Oui, c’est le cas

3 « J'aime »

Bien. Pas mal de mes e-mails de liste de diffusion n’ont pas les en-têtes In-Reply-To et References qu’ils devraient avoir, ils pourraient donc être importés comme de nouveaux sujets plutôt que comme de simples réponses. De mémoire, le script utilise ces en-têtes ou les en-têtes de sujet (pas les deux).

Je pense que j’ai déjà posé cette question dans le passé, mais existe-t-il des moyens non manuels d’ajouter ces en-têtes au fichier MBOX et/ou de réorganiser autrement les e-mails avant ou après l’importation dans Discourse ?

Il est maintenant possible de fusionner des sujets et de conserver l’ordre chronologique, donc c’est peut-être la solution. Ils manqueraient juste la petite flèche Discourse pour indiquer à qui le message était une réponse.

1 « J'aime »

Le script d’importation mbox comporte deux phases. La première est l’indexation et génère une base de données SQLite. Vous pouvez soit modifier les données dans SQLite avant l’importation, soit modifier le script Ruby.

Toute la magie du tri/regroupement par sujet ou en-têtes se produit ici :

Vous pouvez ajouter votre propre logique de regroupement si vous savez comment vous voulez regrouper les e-mails.

3 « J'aime »

Il faudra un certain temps avant même d’envisager quelque chose d’aussi complexe !

Sur https://bazaar.launchpad.net/~mailman-coders/mailman/2.1/view/head:/Mailman/Archiver/pipermail.py#L669, Pipermail de Mailman 2 semble rechercher les éléments suivants par ordre de préférence :

  1. In-Reply-To.
  2. References.
  3. Le plus ancien e-mail avec un sujet correspondant.

Cette combinaison d’approches semble idéale. Dans le troisième cas, il pourrait être judicieux que Discourse n’utilise pas la flèche « en réponse à ».

D’après mes souvenirs, Hyperkitty de Mailman 3 ne prenait pas du tout en compte le sujet, ce qui était moins bien.

2 « J'aime »

Pardonnez-moi de m’immiscer avec une question peut-être stupide, mais je n’ai pas trouvé de réponse claire ici. Je voudrais savoir si le processus d’importation crée un nouvel utilisateur Discourse pour chaque e-mail, avec déduplication bien sûr, ou s’ils sont tous importés comme un seul utilisateur système. J’ai une liste de diffusion avec 20 ans de publications et elle est assez volumineuse et difficile à expérimenter. Et aussi, qu’en est-il des réponses dans la liste d’origine ? Sont-elles intégrées dans un fil de discussion ?

Oui, les utilisateurs sont créés, un par adresse e-mail.

J’ai pu effectuer un Google Takeout de mes Google Groups, télécharger les fichiers .mbox et les importer.

Ces étapes ont été utiles pour mapper le data/folder à une catégorie existante, mais cela doit être fait dans le conteneur import, et non dans le conteneur app comme indiqué dans ce guide :

./launcher enter import
rails c

# Utilisez l'ID de catégorie affiché dans l'URL, par exemple
# c'est 16 lorsque le chemin de la catégorie ressemble à ceci : /c/soccer/16
category = Category.find(16)

# Utilisez le nom du répertoire où les fichiers mbox sont stockés. Par exemple,
# lorsque les fichiers sont stockés dans import/data/foo, vous devez utiliser "foo" comme nom de répertoire.
category.custom_fields["import_id"] = "soccer"
category.save!

J’ai déjà des utilisateurs dans Discourse qui se sont migrés eux-mêmes, et donc le script d’importation a échoué à créer des contacts pour eux (ce qui n’est probablement pas une mauvaise chose), mais les messages importés auxquels ces utilisateurs Discourse existants étaient associés affichent l’expéditeur comme system au lieu de leur nom.

Existe-t-il un moyen de mapper les utilisateurs existants à leurs messages importés ?

Pour l’instant, j’ai annulé tout cela en restaurant une sauvegarde récente. Je suis prêt à réessayer avec quelques conseils sur la gestion des utilisateurs Discourse existants et de leurs messages importés.

Mise à jour :

Claude a aidé à résoudre le mappage des utilisateurs existants ; il faut exécuter cette boucle dans la console Rails, en plus du bloc ci-dessus :

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
1 « J'aime »