Discourse-Slave-Instanz mit Offline-Zugriff

Hintergrund
Wir haben eine in der Cloud gehostete Discourse-Instanz für die australische Ruby-Community (ich nenne sie Master). Zweimal im Jahr veranstalten wir RailsCamp-Events. Dabei verbringen wir ein ganzes Wochenende an einem abgelegenen Ort (50–150 Personen pro Event). Oft gibt es dort kaum oder gar keinen Mobilfunkempfang, was die Koordination erschwert.

Ich dachte mir, eine Discourse-Instanz, die während des Events im lokalen Netzwerk gehostet wird (ich nenne sie Slave), wäre ideal. Wir könnten sie nutzen, um Ankündigungen zu veröffentlichen, den Zeitplan zu teilen, Fotos hochzuladen usw.

Da wir auf Master bereits eine wachsende Community haben, wäre es großartig, diese zu nutzen. Zum Beispiel ist Ihr Profil bereits eingerichtet, wenn Sie beim Event ankommen, und Sie haben eine Kopie aller Inhalte.

Herausforderung
Wie kann die Slave-Discourse-Instanz parallel zur Master-Instanz laufen, wenn die Slave-Instanz drei Tage lang offline ist?

Vorgeschlagene Lösung
Ich verstehe, dass Discourse nicht dafür ausgelegt ist. Aber ich denke, es gibt einen Weg, um unsere Bedürfnisse zu erfüllen. Ich bin an Ihren Ideen dazu interessiert.

Der Plan:

  • Wir richten eine Slave-Discourse-Instanz im lokalen Netzwerk des Events ein.
  • Kurz vor dem Event sichern wir Master und stellen sie auf Slave wieder her.
  • Auf Slave:
    • Alle Kategorien werden als schreibgeschützt markiert.
    • Wir erstellen eine neue schreib-/lesefähige Kategorie für das Event.
  • Nach dem Event verwenden wir ein Ruby-Skript, um Informationen von Slave zu Master zu übertragen:
    • Neu erstellte Benutzer
    • Alle Themen und Beiträge aus der für das Event erstellten Kategorie
  • Ergebnis

Fragen

  • Sehen Sie Probleme mit der vorgeschlagenen Lösung?
  • Können Sie einen besseren Ansatz erkennen?

Es wäre großartig, auf Slave Schreibzugriff für alle Kategorien zu ermöglichen, aber ich habe das Gefühl, dass der Synchronisationsprozess sehr kompliziert werden könnte. Außerdem könnte das verwirrend sein, da einige Personen weiterhin auf Master zugreifen könnten, wenn sie Empfang haben.

4 „Gefällt mir“

Hello from a fellow Australian Rubyist… :wave:

This all sounds fine to me. To sync stuff up after the event I would recommend writing a small script that zooms through your read write categories and then makes API requests using our JSON API to create the topics / posts on the master.

I definitely recommend strongly against having any kind of merge topic scenario, it will be full of dragons and not worth the effort.

8 „Gefällt mir“

@antulik

Did you try anything for the same ?
I am into a similar thing where I need to take discourse offline with sync.
I have a master server and I will be having more than 100-200 slave instance. Slave instance can be online/offline but will be used by users. But whenever an offline instance comes online it should be able to sync with master server without creating conflicts and all update all the latest data. I do not want to create any code related changes as discourse keeps updating itself quite often and don’t want to break instance due to code changes.

I am thinking of tweaking postgresql to some extent. Other files related data can be synced using syncthing. But updating postgresql data is something which worries me because if i directly sync master data then the work done by offline user will get erased after the sync. How was your experience writing scripts for the same ?

1 „Gefällt mir“

We didn’t do it yet as we had internet access at all event locations.