Erneutes Importieren bereits importierter E-Mails

Ich habe Discourse erfolgreich mit dem Cloud-Dienst von Digital Ocean installiert, mit dem Ziel, einige Listserv-Mailinglisten zu migrieren, falls sich herausstellt, dass Discourse alles tun kann, was wir brauchen. Beim Testen habe ich Thunderbird unter Windows 10 verwendet, um neue E-Mails, die alle paar Tage von der Mailingliste kommen, in einem Ordner unter Windows zu speichern, den ich dann mit FileZilla in den Ordner /var/discourse/shared/standalone/import/data/ExampleCategory1 (oder ExampleCategory2) kopiere. Anschließend starte ich den Import-Docker und führe import_mbox.sh aus. Bisher hat alles gut funktioniert und ich kann manuell in Discourse replizieren, was über die Mailinglisten, auf denen ich bin, eingegangen ist.

Stellen Sie sich jedoch vor, ich habe ExampleCategory1 und ExampleCategory2 als Kategorien und lege die E-Mails, die für den ersten Ordner, ExampleCategory1, bestimmt sind, versehentlich in den zweiten, ExampleCategory2, und führe dann den Import aus, bevor ich es bemerke. (Drag & Drop hat bei FileZilla nicht funktioniert!)

Ich habe nun versehentlich die E-Mails einer Mailingliste in der Kategorie einer anderen.

Um dies zu beheben, habe ich alle Themen/Beiträge in ExampleCategory2 über die Weboberfläche gelöscht und zur Sicherheit auch rake destroy:topics["ExampleCategory2"] danach ausgeführt, mit dem Plan, import_mbox.sh einfach erneut auszuführen (ich habe Kopien aller E-Mails, die in jeder Kategorie sein sollten). Allerdings scheint sich Discourse daran zu erinnern, welche E-Mails es importiert hat, auch wenn die Beiträge gelöscht wurden, und importiert sie daher nicht erneut!

Wie könnte ich das tun?

Das Protokoll für empfangene E-Mails im Admin-Einstellungsbereich zeigt immer noch die eingehenden E-Mails an, die die nun gelöschten Beiträge erstellt haben, aber es gibt keinen Hyperlink, der Sie zu dem Beitrag führt (da er jetzt gelöscht ist). Ich vermute, ich muss alle Spuren der ursprünglichen eingehenden E-Mail löschen, aber ich habe keine Ahnung, wie ich das tun soll.

2 „Gefällt mir“

Es sei denn, Sie haben Hunderttausende von Beiträgen, was ich empfehle, ist, die Datenbank zu löschen und neu zu beginnen. Wenn Sie es auf eine schmerzhaftere Weise tun möchten, die wahrscheinlich Probleme verursacht, können Sie herausfinden, wie Sie die PostCustomFields löschen, die die Import-IDs enthalten. Wenn Sie alle löschen möchten, können Sie PostCustomField.all.destroy_all verwenden, aber wenn Sie das tun werden, dann können Sie es auch auf einfache Weise tun.

2 „Gefällt mir“

Wenn Sie sagen „die Datenbank löschen“, meinen Sie dann alle Themen und Beiträge von Discourse sowie alle Aufzeichnungen eingehender E-Mails, die den Importer durchlaufen haben (aber die Struktur von Discourse und Benutzern usw. intakt lassen)? Oder meinen Sie die Datenbank der importierten E-Mails, wodurch bestehende Beiträge erhalten bleiben, aber ich den Importer mit alten E-Mails erneut ausführen kann?

1 „Gefällt mir“

Oh. Wenn Sie Ihren Import auf einer Live-Instanz ausgeführt haben, auf der Benutzer Beiträge und Ähnliches hinzugefügt haben, dann haben Sie ein Problem.

Wenn Sie alle importierten Beiträge gelöscht haben, können Sie etwas tun wie

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

1 „Gefällt mir“

Vielen Dank @pfaffman! Das scheint funktioniert zu haben, obwohl ich nicht ganz sicher bin, was hinter den Kulissen passiert ist.

Ich habe ./launcher enter app verwendet, dann rails c eingegeben, dann PostCustomField.where(name: \"import_id\").destroy_all und viele Texte erschienen (mit einigen Teilen in Rot und Grün gefärbt), dann, als ich Rails beendet und import_mbox.sh erneut ausgeführt habe, erschienen die ursprünglichen E-Mails, die zuvor importiert und dann von mir gelöscht wurden (durch Entfernen der Themen), alle wieder in Discourse. Wenn ich E-Mails in den anderen Kategorieordner kopiere, werden sie wie vermutet auch als Duplikate erneut importiert.

Es ist nur ein Testforum mit ein paar zusätzlichen Antworten als Tests, die Leute sich ansehen können, bevor wir entscheiden, ob wir zu Discourse wechseln oder nicht, daher wäre ein Löschen und Neustarten kein großer Verlust gewesen.

Sie erwähnten auch, die Datenbank zu löschen und alles neu zu importieren. Was ist der einfachste Weg, das Löschen durchzuführen?

Das hat funktioniert! Und gut, dass ein Neustart kein Problem darstellt. Ich denke wirklich, es ist besser, sauber anzufangen, wenn man kann.

Der einfachste Weg, alles zu löschen, ist:

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

Und dann neu aufbauen. Eine andere Möglichkeit ist, direkt nach dem Neuaufbau ein Backup zu erstellen und dieses dann wiederherzustellen.

1 „Gefällt mir“