Istanza slave di Discourse con accesso offline

Contesto
Abbiamo un’istanza di Discourse ospitata nel cloud per la comunità Ruby australiana (la chiamerò Master). Due volte all’anno organizziamo eventi RailsCamp. In queste occasioni trascorriamo un intero weekend insieme in una località remota (50-150 persone per evento). Spesso c’è poca o nessuna copertura cellulare, il che rende difficile la coordinazione.

Stavo pensando che un’istanza di Discourse ospitata sulla rete locale durante l’evento sarebbe ideale (la chiamerò Slave). Potremmo utilizzarla per pubblicare annunci, programmi, condividere foto, ecc.

Dato che abbiamo già una comunità in crescita su Master, sarebbe ottimo sfruttarla. Ad esempio, il tuo profilo sarebbe già configurato quando arrivi all’evento e avresti una copia di tutto il contenuto.

Sfida
Come far funzionare l’istanza Slave di Discourse insieme a Master quando Slave è offline per tre giorni.

Soluzione proposta
So che Discourse non è progettato per questo scenario, ma penso che ci sia un modo per adattarlo alle nostre esigenze. Sono interessato alle vostre idee su questo.

Il piano:

  • Impostiamo un’istanza Slave di Discourse sulla rete locale durante l’evento.
  • Poco prima dell’evento, facciamo un backup di Master e lo ripristiniamo su Slave.
  • Su Slave:
    • tutte le categorie saranno contrassegnate come sola lettura;
    • creiamo una nuova categoria in scrittura/lettura per l’evento.
  • Dopo l’evento, utilizziamo uno script Ruby per trasferire le informazioni da Slave a Master:
    • nuovi utenti creati;
    • tutti i topic e i post della categoria creata per l’evento.
  • Risultato finale.

Domande

  • Vedete qualche problema con la soluzione proposta?
  • Potete immaginare un approccio migliore?

Sarebbe ottimo consentire l’accesso in scrittura a tutte le categorie su Slave, ma temo che il processo di sincronizzazione potrebbe diventare molto complicato. Inoltre, ciò potrebbe creare confusione, poiché alcune persone potrebbero ancora accedere a Master se hanno copertura.

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.

@antulik

Hai già provato qualcosa a riguardo?
Mi trovo in una situazione simile: devo portare Discourse offline con sincronizzazione.
Ho un server master e avrò più di 100-200 istanze slave. Le istanze slave possono essere online o offline, ma verranno utilizzate dagli utenti. Ogni volta che un’istanza offline torna online, deve poter sincronizzarsi con il server master senza creare conflitti e aggiornare tutti i dati più recenti. Non voglio apportare modifiche al codice, dato che Discourse si aggiorna frequentemente e non voglio rompere le istanze a causa di cambiamenti nel codice.

Sto pensando di modificare in qualche misura PostgreSQL. Gli altri file relativi ai dati possono essere sincronizzati tramite Syncthing. Ma l’aggiornamento dei dati di PostgreSQL è ciò che mi preoccupa, perché se sincronizzo direttamente i dati del master, il lavoro svolto dall’utente offline verrà cancellato dopo la sincronizzazione. Com’è stata la tua esperienza nello scrivere script per questo scopo?

Non l’abbiamo ancora fatto perché non avevamo accesso a Internet in tutti i luoghi dell’evento.