Möchten Sie Inhalte von einer Discourse-Instanz auf eine andere verschieben?
Es gibt ein Befehlszeilenwerkzeug, um ein Thema, eine Reihe von Themen oder eine ganze Kategorie zu exportieren, und ein weiteres, um sie am anderen Ende zu importieren.
Themen-Export/Import
- ein oder mehrere Themen und deren Antworten
- die Benutzer, die in dem Thema gepostet haben
Kategorie-Export/Import
- die Kategorie und alle ihre Unterkategorien
- deren Sicherheitseinstellungen
- benutzerdefinierte Gruppen, die in den Sicherheitseinstellungen erwähnt werden
Wenn eine der Gruppen „Mitgliedschaftsanfragen“ aktiviert hat, stürzt der Vorgang ab. Deaktivieren Sie dies vor dem Export
- alle Themen und Beiträge in der Kategorie und den Unterkategorien
- alle Benutzer, die gepostet haben, und weisen Sie sie den Gruppen zu
Beginnen Sie mit der Identifizierung der IDs
Identifizieren Sie zunächst die ID(s) des =Export=, den Sie exportieren möchten. Sie finden diese am Ende der URL, die für den Zugriff verwendet wird.
-
https://meta.discourse.org/t/how-to-contribute-to-discourse/53797 -
https://meta.discourse.org/t/how-to-contribute-to-discourse/53797/12
(In diesem Fall befinden Sie sich mitten in einem Thema – nehmen Sie die erste Zahl) -
https://meta.discourse.org/c/howto/faq/4
Kategorie- oder Themen-ID(s)
Mehrere Themen
Sie können mehr als ein Thema auswählen, indem Sie IDs durch ein Leerzeichen getrennt hinzufügen; dies funktioniert im obigen Feld (ich glaube nicht, dass dies für Kategorien funktioniert):
53797 200943 124096
Führen Sie das Export-Skript aus
Das Tool kann als Root-Benutzer innerhalb des Containers ausgeführt werden:
cd /var/discourse
./launcher enter app
Führen Sie diesen Befehl aus:
discourse export_=Export= =ID=
Die Ausgabe sollte ungefähr so aussehen:
Starte Export von =Export=…
Woher kommen die neuen Benutzer alle?
Export gespeichert unter =Export=-export-2021-08-27-015437.jsonFertig
Verschieben der exportierten Datei
Die exportierte .json-Datei muss vom Inneren des Anwendungskonters, in dem Sie den Export durchgeführt haben, in das Innere des Konters der empfangenden Instanz verschoben werden. Dies erfordert einige Schritte.
Kopieren nach „außen“
Verlassen Sie den Container, falls Sie dies noch nicht getan haben
exit
Sie sollten nun eine Eingabeaufforderung wie diese sehen:
root@ihrserver:/var/discourse
Verwenden Sie Docker, um die Datei aus dem Container zu kopieren (ich glaube nicht, dass Sie sie verschieben können)
docker cp app:/var/www/discourse/=FileName= .
Verschieben auf die andere Instanz
Dies liegt außerhalb des Rahmens dieser Anleitung, aber dies könnte Ihnen helfen, dorthin zu gelangen:
Kopieren in den Container der empfangenden Instanz
Stellen Sie eine SSH-Verbindung zu Ihrer empfangenden Instanz als Root her und wechseln Sie in das Discourse-Verzeichnis:
cd /var/discourse
Verwenden Sie Docker erneut, um die Datei in den anderen Container zu kopieren
docker cp =FileName= app:/var/www/discourse
Den Inhalt importieren
Rufen Sie den Container in der empfangenden Instanz auf:
./launcher enter app
Führen Sie das Import-Skript aus
discourse import_=Export= =FileName=
Fertig!
Möglicherweise müssen Sie einige lose Enden aufräumen, aber hoffentlich ist alles erledigt.
Erweiterte Tipps
Fehlende Ruby Gem
Bei einem komplexen Kategorie-Import fehlte meiner Instanz das „Listen“-Ruby.
Dies wurde gelöst, indem Folgendes getan wurde: (unter Verwendung des Discourse-Benutzers innerhalb des Containers)
./launcher enter app
su discourse
bundle config --delete without
bundle config --delete with
bundle install
exit
exit
Dies hat die Rails-Konsole beschädigt, was anschließend einen Wiederaufbau erforderlich machte
./launcher rebuild app
Multisite
In einer Multisite-Umgebung verwenden Sie die Umgebungsvariable RAILS_DB.
RAILS_DB=xxxmoves discourse export_=Export= =ID=
RAILS_DB=dancerehab discourse import_=Export= =FileName=
Bitte melden Sie Fehler in der Kategorie bug und fordern Sie Verbesserungen in der Kategorie #feature an.
Verwandte Themen
Zuletzt geprüft von @SaraDev am 2022-07-13T00:00:00Z