J’ai installé avec succès Discourse en utilisant le service cloud de Digital Ocean, dans le but de migrer certaines listes de diffusion listserv si je parviens à faire en sorte que Discourse réponde à tous nos besoins. Lors des tests, j’ai utilisé Thunderbird sur Windows 10 pour enregistrer les nouveaux e-mails provenant de la liste de diffusion tous les quelques jours dans un dossier sous Windows, que je copie ensuite dans le dossier /var/discourse/shared/standalone/import/data/ExampleCategory1 (ou ExampleCategory2) à l’aide de FileZilla. Je lance ensuite le conteneur d’importation Docker et exécute le script import_mbox.sh. Jusqu’à présent, tout a bien fonctionné et je peux manuellement faire en sorte que Discourse reproduise ce qui est arrivé via les listes de diffusion auxquelles je suis abonné.
Cependant, imaginez que j’aie ExampleCategory1 et ExampleCategory2 comme catégories et que je place par erreur les e-mails destinés au premier dossier, ExampleCategory1, dans le second, ExampleCategory2, puis que j’exécute l’importation avant de m’en rendre compte. (Le glisser-déposer a mal fonctionné sur FileZilla !)
J’ai maintenant par erreur les e-mails d’une liste de diffusion dans la catégorie d’une autre.
Pour corriger cela, j’ai supprimé tous les sujets/messages dans ExampleCategory2 en utilisant l’interface web, et aussi en utilisant la commande rake destroy:topics[“ExampleCategory2”] ensuite pour plus de sécurité, avec l’intention de relancer simplement l’import_mbox.sh (j’ai des copies de tous les e-mails qui devraient être dans chaque catégorie). Cependant, Discourse semble se souvenir des e-mails qu’il a importés, même si les messages ont été supprimés, et ne les importe donc pas à nouveau !
Comment puis-je faire cela ?
Le journal des e-mails reçus dans la section des paramètres d’administration montre toujours les e-mails entrants qui ont créé les messages maintenant supprimés, mais il n’y a pas de lien hypertexte pour accéder au message (car il est maintenant supprimé). Je suppose que je dois effacer toute trace de l’e-mail entrant d’origine, mais je n’ai aucune idée de comment faire cela.
À moins que vous n’ayez des centaines de milliers de publications, ce que je recommande est d’effacer la base de données et de recommencer. Si vous voulez le faire d’une manière plus douloureuse qui risque de vous causer des problèmes, vous pouvez trouver comment supprimer les PostCustomField qui contiennent les identifiants d’importation. Si vous voulez tous les supprimer, vous pouvez faire PostCustomField.all.destroy_all, mais si vous allez faire cela, autant le faire facilement.
Quand vous dites « effacer la base de données », entendez-vous tous les sujets et publications de Discourse ainsi que tous les enregistrements des e-mails entrants qui sont passés par l’importateur (mais laisser la structure de Discourse, les utilisateurs, etc. intacts) ? Ou entendez-vous la base de données des e-mails importés, ce qui laisserait les publications existantes en place mais me permettrait de réexécuter l’importateur avec les anciens e-mails ?
Oh. Si vous avez exécuté votre importation sur une instance active où des utilisateurs ont ajouté des publications et autres, alors vous êtes dans un beau pétrin.
Si vous avez supprimé toutes les publications importées, vous pouvez faire quelque chose comme
Merci beaucoup @pfaffman ! Cela semble avoir fonctionné, bien que je ne sois pas entièrement sûr de ce qui s’est passé en coulisses.
J’ai utilisé ./launcher enter app, puis j’ai tapé rails c, puis PostCustomField.where(name: \"import_id\").destroy_all et beaucoup de texte est apparu (avec certaines parties colorées en rouge et vert), puis lorsque j’ai quitté rails et relancé import_mbox.sh, les e-mails d’origine qui avaient été précédemment importés puis supprimés par moi (en supprimant les sujets) sont tous réapparus dans discourse. Si je copie des e-mails dans le dossier de l’autre catégorie, ils sont également réimportés, en double comme je le suspectais.
C’est juste un forum de test avec quelques réponses supplémentaires comme tests pour que les gens puissent regarder avant de décider si nous déménageons ou non vers discourse, donc effacer et redémarrer n’aurait pas été une grande perte.
Vous avez également mentionné d’effacer la base de données et de tout réimporter. Quelle est la manière la plus simple d’effacer ?
Content que ça ait marché ! Et content que recommencer ne pose pas de problème. Je pense vraiment qu’il vaut mieux repartir de zéro si on peut.
Le moyen le plus simple de tout effacer est de
rm -r /var/discourse/shared/standalone/post*
Et ensuite de reconstruire. Une autre chose que vous pouvez faire est de faire une sauvegarde immédiatement après avoir reconstruit, puis vous pourrez restaurer celle-ci.