Instância escrava do Discourse com acesso offline

Contexto
Temos uma instância do Discourse hospedada na nuvem para a comunidade Ruby da Austrália (vou me referir a ela como Master). Duas vezes por ano, realizamos eventos do RailsCamp. É quando passamos um fim de semana inteiro juntos em um local remoto (50 a 150 pessoas por evento). Muitas vezes há pouca ou nenhuma recepção de celular, o que torna a coordenação desafiadora.

Estava pensando que uma instância do Discourse hospedada na rede local durante o evento seria ideal (vou me referir a ela como Slave). Poderíamos usá-la para publicar anúncios, cronogramas, compartilhar fotos etc.

Como já temos uma comunidade crescente no Master, seria ótimo aproveitar isso. Por exemplo, seu perfil já estaria configurado quando você chegasse ao evento, e você teria uma cópia de todo o conteúdo.

Desafio
Como manter a instância Slave do Discourse funcionando junto com a Master enquanto a Slave estiver offline por três dias?

Solução proposta
Entendo que o Discourse não foi projetado para isso. Mas acho que há uma maneira de atender às nossas necessidades. Estou interessado em suas ideias sobre isso.

O plano:

  • Configuramos uma instância Slave do Discourse na rede local durante o evento.
  • Imediatamente antes do evento, fazemos um backup do Master e o restauramos na Slave.
  • Na Slave:
    • Todas as categorias serão marcadas como somente leitura.
    • Criamos uma nova categoria de leitura/gravação para o evento.
  • Após o evento, usamos um script em Ruby para transferir informações da Slave para o Master:
    • Novos usuários criados.
    • Todos os tópicos e posts da categoria criada para o evento.
  • Lucro.

Perguntas

  • Você vê algum problema com a solução proposta?
  • Você consegue visualizar uma abordagem melhor?

Seria ótimo permitir acesso de escrita a todas as categorias na Slave, mas sinto que o processo de sincronização poderia ser muito complicado. Além disso, isso poderia causar confusão, já que algumas pessoas ainda poderiam acessar o Master se tivessem recepção.

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

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 ?

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