Instance esclave Discourse avec accès hors ligne

Contexte
Nous hébergeons une instance Discourse dans le cloud pour la communauté Ruby australienne (je l’appellerai « Maître »). Deux fois par an, nous organisons des événements RailsCamp. Il s’agit de passer un week-end entier ensemble dans un lieu isolé (50 à 150 personnes par événement). Souvent, il y a peu ou pas de couverture réseau mobile, ce qui rend la coordination difficile.

Je pensais qu’une instance Discourse hébergée sur le réseau local lors de l’événement serait idéale (je l’appellerai « Esclave »). Nous pourrions l’utiliser pour publier des annonces, le programme, partager des photos, etc.

Puisque nous avons déjà une communauté grandissante sur Maître, il serait excellent de pouvoir en tirer parti. Par exemple, votre profil est déjà configuré lorsque vous arrivez à l’événement, et vous avez une copie de tout le contenu.

Défi
Comment faire en sorte que l’instance Discourse Esclave fonctionne en parallèle de Maître alors que l’Esclave est hors ligne pendant trois jours.

Solution proposée
Je comprends que Discourse n’est pas conçu pour cela. Mais je pense qu’il existe un moyen de répondre à nos besoins. Je suis intéressé par vos idées à ce sujet.

Le plan

  • Nous mettons en place une instance Discourse Esclave sur le réseau local lors de l’événement.
  • Juste avant l’événement, nous effectuons une sauvegarde de Maître et la restaurons sur Esclave.
  • Sur Esclave :
    • toutes les catégories seront marquées en lecture seule ;
    • nous créons une nouvelle catégorie en lecture/écriture pour l’événement.
  • Après l’événement, nous utilisons un script Ruby pour transférer les informations de Esclave vers Maître :
    • les nouveaux utilisateurs créés ;
    • tous les sujets et messages de la catégorie créée pour l’événement.
  • Résultat optimal.

Questions

  • Voyez-vous des problèmes avec la solution proposée ?
  • Pouvez-vous imaginer une approche meilleure ?

Il serait idéal de permettre l’accès en écriture à toutes les catégories sur Esclave, mais je sens que le processus de synchronisation pourrait devenir très compliqué. De plus, cela pourrait prêter à confusion, car certaines personnes pourraient toujours accéder à Maître si elles ont une couverture réseau.

4 « J'aime »

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 « J'aime »

@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 « J'aime »

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