Möchtest du einige Inhalte von einer Discourse-Instanz zu einer anderen verschieben?
Es gibt ein Befehlszeilentool zum Exportieren eines Themas, einer Reihe von Themen oder einer gesamten Kategorie und ein weiteres Tool zum Importieren dieser Inhalte auf der anderen Seite.
Thema-Export/-Import
- ein oder mehrere Themen und ihre Antworten
- die Benutzer, die im Thema gepostet haben
Kategorien-Export/-Import
- die Kategorie und alle ihre Unterkategorien
- ihre Sicherheitseinstellungen
- in den Sicherheitseinstellungen erwähnte benutzerdefinierte Gruppen
Wenn eine der Gruppen die Funktion „Mitgliedschaftsanfragen“ aktiviert hat, stürzt das Tool ab. Schalte dies vor dem Export ab
- alle Themen und Beiträge in der Kategorie und den Unterkategorien
- alle Benutzer, die gepostet haben, und ordnet sie den Gruppen zu
Schritt 1: IDs identifizieren
Identifiziere zunächst die ID(s) des =Exports=, den du exportieren möchtest. Diese findest du am Ende der URL, die zum 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 befindest du dich mitten in einem Thema – nimm die erste Zahl) -
https://meta.discourse.org/c/howto/faq/4
Kategorien- oder Themen-ID(s)
Mehrere Themen
Du kannst mehr als ein Thema auswählen, indem du IDs durch ein Leerzeichen getrennt hinzufügst; dies funktioniert im obigen Feld (ich glaube jedoch nicht, dass dies für Kategorien funktioniert):
53797 200943 124096
Export-Skript ausführen
Das Tool kann als Root-Benutzer innerhalb des Containers ausgeführt werden:
cd /var/discourse
./launcher enter app
Führe diesen Befehl aus:
discourse export_=Export= =ID=
Die Ausgabe sollte in etwa so aussehen:
Starte Export von =Export=…
Woher kommen die neuen Benutzer alle?
Export gespeichert in =Export=-export-2021-08-27-015437.jsonFertig
Exportierte Datei verschieben
Die exportierte .json-Datei muss vom Inneren des Anwendungsccontainers, in dem du den Export durchgeführt hast, in den Container der empfangenden Instanz verschoben werden. Dies erfordert einige Schritte.
Kopiere sie nach „außen"
Verlasse den Container, falls du dies noch nicht getan hast
exit
Du solltest nun eine Eingabeaufforderung wie diese sehen:
root@yourserver:/var/discourse
Verwende Docker, um die Datei aus dem Container zu kopieren (ich glaube nicht, dass man sie verschieben kann):
docker cp app:/var/www/discourse/=FileName= .
Verschiebe sie zur anderen Instanz
Dies liegt außerhalb des Rahmens dieser Anleitung, aber dies könnte dir dabei helfen:
Kopiere sie in den Container der empfangenden Instanz
Melde dich per SSH als Root bei deiner empfangenden Instanz an und navigiere zum Discourse-Verzeichnis:
cd /var/discourse
Verwende erneut Docker, um die Datei in den anderen Container zu kopieren
docker cp =FileName= app:/var/www/discourse
Inhalte importieren
Betrete den Container in der empfangenden Instanz:
./launcher enter app
Führe das Import-Skript aus
discourse import_=Export= =FileName=
Fertig!
Du musst möglicherweise einige offene Punkte bereinigen, aber hoffentlich ist alles erledigt.
Erweiterte Tipps
Fehlendes Ruby-Gem
Bei einem komplexen Kategorien-Import fehlte mir auf meiner Instanz das Ruby-Gem „Listen".
Dies wurde durch folgende Schritte behoben (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, sodass ein Neuaufbau danach erforderlich war
./launcher rebuild app
Multisite
Verwende in einer Multisite-Umgebung die Umgebungsvariable RAILS_DB.
RAILS_DB=xxxmoves discourse export_=Export= =ID=
RAILS_DB=dancerehab discourse import_=Export= =FileName=
Bitte melde Bugs in der Kategorie Contribute > Bug und fordere Verbesserungen in der Kategorie Contribute > Feature an.
Verwandte Themen
Zuletzt überprüft von @SaraDev am 2022-07-13T00:00:00Z