Nuestro equipo ha estado operando como invitado en otra instancia de Discourse. Estamos configurando nuestra propia instancia de Discourse y nos gustaría migrar nuestras categorías de la instancia existente a la nueva. No tenemos acceso de administrador al servidor existente, pero los administradores están dispuestos a hacer una exportación de categorías para nosotros. Sin embargo, esta exportación no contiene ningún archivo adjunto o imagen. Tenemos acceso a la API de la instancia existente, pero solo a nuestras categorías. Tenemos acceso de administrador en la nueva instancia.
¿Es posible migrar archivos adjuntos e imágenes utilizando solo la API de la instancia existente?
Estuve mirando el JSON exportado y los nombres de archivo de los adjuntos son cadenas aleatorias diferentes a las que se sirven en el navegador, lo que hace que la ingeniería inversa de la API para descargar archivos adjuntos e imágenes no sea tan sencilla. Incluso si pudiéramos descargar todos los archivos adjuntos de la instancia existente, no estoy seguro de cómo agregarlos a la nueva instancia. Esta publicación me hace creer que es tan fácil como colocarlos en esa ubicación con el requisito de que los nombres de archivo sean idénticos a los del JSON exportado, pero eso no parece funcionar.
Parece no haber relación en los nombres de archivo. Dada esta información, puedo usar la API para obtener los adjuntos que no están incluidos en la exportación. Pero no estoy seguro de qué nombre de archivo darle y dónde colocarlo en el nuevo servidor.
Una vez que eso se resuelva, ¿sería posible que los adjuntos aparecieran en las páginas de temas renderizados cuando se carguen como antes de la migración?
Informando de vuelta con una solución que funciona con una instancia de prueba que no he probado en producción.
Esto es para que mi yo futuro se lo pase al equipo que realmente hará la migración o a cualquier otra persona que necesite algo similar.
Los archivos adjuntos deben tener el nombre completo, que se puede convertir de la forma corta en el json mediante el script de python en Converting short upload URLs to full URLs
Los archivos adjuntos deben colocarse en discourse/public/uploads/tombstone/default/original/
Luego, ejecute uploads:recover_from_tombstone mientras está en /var/discourse/