Themen von einer Discourse-Instanz auf eine andere verschieben

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
    • :warning: 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.json

Fertig

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=

:cake: 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

44 „Gefällt mir“
UI: Topic and Category Export/Import
CLI command to migrate a single category
Moving topics between sites?
Category/Topic export fails with error "database "discourse_development" does not exist"
Easiest way to export a single topic?
Saving a Conversation
Migrate user custom fields to another instance
How to export user data from a category on a hosted site
Error Importing Categories from a Discourse Instance to Another
Import CSV User Activity from one Discourse to Another
How use API to convert topic in discourse1.com to discourse2.com
Can sub-forums of the same instance split up and move to new independent servers (or discourse instances)?
Help migrating category from one instance to another without admin on the source instance
Adding default sets of topics, categories and users to a new Discourse
How to download Comments and Topics
Downloading Content
Can we combine 2 separate discourse sites?
Tracking and resolving a schema drift cause
Merge two Discourse forums into one
Moving topics from a forum on one website to a forum on another website
Transfer topics between forums?
Forum Aquisition
Transfering inbox group messages to another instance?
Transfering inbox group messages to another instance?
Imported categories are not in parent category
I wonder how to add hundreds of users into a group? Is there any api?
Selective backups skipping settings and config
Test driving admin/moderation features
Add backup to existing Discourse instance
Merging two Discourse forums
Migrating vBulletin onto existing and live Discourse instance
Migrate topics from one discourse instance to another?
A system where people have to start at lesson 1, and cannot see the other lessons?
How to divide my community into 2 parts

Ich werde es noch einmal versuchen.

Gibt es eine einfache Möglichkeit, die relevanten Uploads zusammen mit den Themen zu migrieren?

Nicht wirklich. Eine Sache, die meistens funktioniert, ist, wenn Sie all diese Uploads erhalten und die URL des Originals in jeden Beitrag auf der Website einfügen, zu der Sie wechseln. Dann sollte das passieren, dass diese Uploads mit demselben SHA erstellt werden und es funktioniert einfach.

Sie würden also die Sache tun, die die Dinge im Beitrag in die URL umwandelt, um diese URLs zu erhalten. (Ich kann mich nie ganz daran erinnern, wie das geht, also muss ich es jedes Mal herausfinden).

Hmmm – ich bin immer noch etwas verwirrt. Sagen Sie damit, dass dies funktionieren wird?

  1. Alle Upload-Dateien von der ersten Website abrufen
    • Wie?
  2. Sie in ein einziges Thema einfügen
  3. Sie werden denselben relativen Link wie auf der alten Website generieren und Magie!

Oder meinten Sie das?

  1. Alle absoluten URLs in Ihren Interessenskategorien von der alten Website abrufen
  2. Diese in ein Thema einfügen
  3. Sie werden alle mit demselben SHA auf die neue Website heruntergeladen und die vorhandenen Links werden wie von Zauberhand funktionieren

Oder etwas ganz anderes?

Ich denke, beide sollten funktionieren. Sie können diese Bilder jedoch auf die neue Website übertragen. Sie sollten denselben SHA generieren, sodass die vorhandenen Links in den Themen automatisch funktionieren.

Vielleicht könnten Sie etwas tun wie

cat_id=123
Topic.where(category_id: cat_id).each do| t|
  Post.where(topic_id: t.id) do |p|
      p.cooked.match(image url)....
         puts(the match)

Und ich denke, wenn Sie das tun und diese Links irgendwo auf Ihrer Website in einen Beitrag einfügen, werden alle diese Bilder lokal heruntergeladen und derselbe SHA erstellt, sodass diese Links funktionieren. Sie können ein paar manuell ausprobieren, um zu sehen.

Es ist mitten in der Nacht. Ihre Ergebnisse können variieren.

1 „Gefällt mir“

Hallo, ich bin mir nicht sicher, ob dieses Tutorial das ist, was ich tun möchte, aber ich stelle die Frage hier.

Wenn ich Discourse auf einem Server installiere, aber aufgrund von Wachstum auf einen leistungsfähigeren Server umziehen muss, sind dies die Schritte?

Was passiert zum Beispiel mit der Backup-Option? Kann ich das nicht tun, Discourse auf einem anderen Server installieren und dann die Sicherungskopie der anderen Instanz über diese Option wiederherstellen?

Ich erwarte Ihre Klärung, da ich wissen möchte, wie ich umziehen kann, wenn ich muss, und die Arbeit, die ich in letzter Zeit geleistet habe, nicht verliere.

Nein. Um zu einem größeren Server zu wechseln, ist ein einfaches Backup und Wiederherstellen alles, was benötigt wird. Sie können auch Eine Discourse-Site mit rsync auf einen anderen VPS verschieben