¿Necesitas mover algunos datos de una instancia de Discourse a otra?
Existe una herramienta de línea de comandos para exportar un tema, un conjunto de temas o una categoría completa, y otra para importarlos en el extremo receptor.
Exportación/Importación de temas
- uno o más temas y sus respuestas
- los usuarios que publicaron en el tema
Exportación/Importación de categorías
- la categoría y todas sus subcategorías
- su configuración de seguridad
- grupos personalizados mencionados en la configuración de seguridad
si alguno de los grupos tiene habilitadas las ‘solicitudes de membresía’, se producirá un error. Desactívalo antes de la exportación
- todos los temas y publicaciones en la categoría y subcategorías
- todos los usuarios que publicaron, y los asigna a los grupos
Inicio: Identificar los IDs
Primero, identifica el/los ID(s) de la =Exportación= que deseas exportar. Lo encontrarás al final de la URL utilizada para acceder a ella.
-
https://meta.discourse.org/t/how-to-contribute-to-discourse/53797 -
https://meta.discourse.org/t/how-to-contribute-to-discourse/53797/12
(en este caso estás en medio de un tema: toma el primer número) -
https://meta.discourse.org/c/howto/faq/4
ID(s) de categoría o tema
Múltiples temas
Puedes seleccionar más de un tema añadiendo IDs separados por un espacio; esto funciona en el campo anterior (creo que esto no funciona para categorías):
53797 200943 124096
Ejecutar el script de exportación
La herramienta se puede ejecutar como usuario root dentro del contenedor:
cd /var/discourse
./launcher enter app
Ejecuta este comando:
discourse export_=Export= =ID=
La salida debería parecerse a esto:
Iniciando exportación de =Exportación=…
¿De dónde vienen todos los nuevos usuarios?
Exportación guardada en =Exportación=-export-2021-08-27-015437.jsonHecho
Mover el archivo exportado
El archivo .json exportado debe moverse desde el interior del contenedor de la aplicación donde realizaste la exportación hasta el interior del contenedor de la instancia receptora. Esto requiere varios pasos.
Copiarlo al ‘exterior’
Sal del contenedor si aún no lo has hecho
exit
Ahora deberías tener un indicador como este:
root@yourserver:/var/discourse
Usa docker para copiar el archivo fuera del contenedor (creo que no puedes moverlo)
docker cp app:/var/www/discourse/=FileName= .
Moverlo a la otra instancia
Esto está fuera del alcance de esta guía, pero esto podría ayudarte a llegar allí:
Copiarlo dentro del contenedor en la instancia receptora
Conéctate por SSH a tu instancia receptora como root y accede al directorio de Discourse:
cd /var/discourse
Usa docker nuevamente para copiar el archivo en el otro contenedor
docker cp =FileName= app:/var/www/discourse
Importar el contenido
Entra en el contenedor en la instancia receptora:
./launcher enter app
Ejecuta el script de importación
discourse import_=Export= =FileName=
¡Hecho!
Es posible que necesites resolver algunos detalles pendientes, pero con suerte, todo debería estar resuelto.
Consejos avanzados
Falta la gema de Ruby
Al realizar una importación compleja de categorías, a mi instancia le faltaba la gema ‘Listen’ de Ruby.
Esto se solucionó haciendo lo siguiente: (usando el usuario de Discourse dentro del contenedor)
./launcher enter app
su discourse
bundle config --delete without
bundle config --delete with
bundle install
exit
exit
Esto rompió la consola de rails, lo que requirió una reconstrucción posterior
./launcher rebuild app
Multisitio
En un entorno multisitio, utiliza la variable de entorno RAILS_DB.
RAILS_DB=xxxmoves discourse export_=Export= =ID=
RAILS_DB=dancerehab discourse import_=Export= =FileName=
Por favor, informa de errores en la categoría Contribute > Bug y solicita mejoras en la categoría Contribute > Feature.
Temas relacionados
Última revisión por @SaraDev en 2022-07-13T00:00:00Z