Instancia esclavo de Discourse con acceso offline

Antecedentes
Tenemos una instancia de Discourse alojada en la nube para la comunidad Ruby de Australia (me referiré a ella como Maestra). Dos veces al año organizamos eventos de RailsCamp. Es cuando pasamos un fin de semana completo juntos en un lugar remoto (50-150 personas por evento). A menudo hay poca o ninguna cobertura de telefonía móvil, lo que hace difícil la coordinación.

Estaba pensando que sería ideal tener una instancia de Discourse alojada en la red local durante el evento (me referiré a ella como Esclava). Podríamos usarla para publicar anuncios, horarios, compartir fotos, etc.

Dado que ya tenemos una comunidad en crecimiento en la Maestra, sería excelente aprovecharla. Por ejemplo, tu perfil ya estaría configurado cuando llegues al evento y tendrías una copia de todo el contenido.

Desafío
¿Cómo tener la instancia de Discourse Esclava funcionando junto con la Maestra cuando la Esclava está desconectada durante tres días?

Solución propuesta
Entiendo que Discourse no está diseñado para eso. Pero creo que hay una manera de adaptarlo a nuestras necesidades. Estoy interesado en sus ideas al respecto.

El plan:

  • Configuramos una instancia de Discourse Esclava en la red local durante el evento.
  • Justo antes del evento, hacemos una copia de seguridad de la Maestra y la restauramos en la Esclava.
  • En la Esclava:
    • Todas las categorías se marcarán como solo lectura.
    • Creamos una nueva categoría de lectura/escritura para el evento.
  • Después del evento, utilizamos un script en Ruby para transferir información de la Esclava a la Maestra:
    • Nuevos usuarios creados.
    • Todos los temas y publicaciones de la categoría creada para el evento.
  • Éxito.

Preguntas

  • ¿Ven algún problema con la solución propuesta?
  • ¿Pueden ver un enfoque mejor?

Sería genial permitir el acceso de escritura a todas las categorías en la Esclava, pero siento que el proceso de sincronización podría ser muy complicado. Además, eso podría ser confuso, ya que algunas personas aún podrían acceder a la Maestra si tienen cobertura.

4 Me gusta

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 Me gusta

@antulik

¿Probaste algo similar?
Estoy trabajando en algo parecido, donde necesito llevar Discourse offline con sincronización.
Tengo un servidor maestro y tendré más de 100-200 instancias esclavas. Las instancias esclavas pueden estar online/offline, pero serán utilizadas por usuarios. Sin embargo, cada vez que una instancia offline vuelve a estar online, debe poder sincronizarse con el servidor maestro sin crear conflictos y actualizar todos los datos más recientes. No quiero realizar cambios en el código, ya que Discourse se actualiza con bastante frecuencia y no quiero romper la instancia debido a modificaciones en el código.

Estoy pensando en ajustar PostgreSQL en cierta medida. Los archivos relacionados con los datos se pueden sincronizar usando Syncthing. Pero actualizar los datos de PostgreSQL es lo que me preocupa, porque si sincronizo directamente los datos del maestro, el trabajo realizado por el usuario offline se perderá después de la sincronización. ¿Cómo fue tu experiencia escribiendo scripts para esto?

1 me gusta

No lo hemos hecho todavía, ya que no tuvimos acceso a Internet en todos los lugares del evento.