Imágenes perdidas en copia de seguridad/restauración, cambio de dominio, no se pueden cargar nuevas

Nuestro grupo estuvo ejecutando nuestro Discourse en un dominio temporal durante dos meses hasta que acordamos nuestro dominio real. Ayer intenté migrar todo el contenido desde el dominio antiguo al nuevo. Todo el contenido de texto, las cuentas de usuario e incluso los enlaces entre hilos se transfirieron correctamente. Pero ahora:

  • Todos los incrustados de imágenes anteriores parecen haberse perdido.
  • No se pueden subir nuevas imágenes.

Este fue mi proceso:

  • Generé una nueva aplicación de Discourse en un nuevo droplet de DigitalOcean.
  • Conecté el nuevo nombre de dominio a ese nuevo droplet.
  • Confirmé que ambas aplicaciones de Discourse y todos los complementos estuvieran actualizados con las últimas versiones de software disponibles.
  • Puse el Discourse antiguo en modo de solo lectura para evitar la adición de nuevo contenido.
  • Ejecuté una copia de seguridad del Discourse antiguo.
  • Subí la copia de seguridad al nuevo Discourse.
  • Actualicé la dirección de correo electrónico de Discourse desde el correo del dominio antiguo al del nuevo dominio.
  • Ejecuté una prueba de notificaciones y funcionaron correctamente en el nuevo Discourse.
  • Revisé todas las configuraciones de Discourse para actualizar cualquier mención del dominio antiguo al nuevo.
  • Cambié el subdominio antiguo para que redirija a su dominio correcto y añadí temporalmente una nota y un enlace al nuevo Discourse allí.

Como se mencionó anteriormente, la mayor parte del contenido pareció transferirse sin problemas. Pero ahora, un día después, hemos notado que las imágenes incrustadas antiguas se han perdido y no se pueden subir nuevas imágenes. Solo aparece su contenido “alt”. A continuación, una captura de pantalla de un ejemplo.

Al buscar en Google, parece haber varios hilos extensos sobre este tema, pero no encontré ninguno que incluya un cambio de nombre de dominio y la imposibilidad de volver a subir archivos.

Acabo de intentar resolver esto de la siguiente manera:

  • Ingresar a la máquina mediante SSH.
  • Navegar al directorio de Discourse y entrar en la aplicación.
  • Ejecutar rake posts:missing_uploads. Esto informa:
Looking for missing uploads on: default

0 post uploads are missing.
  • Ejecutar rake uploads:missing. Esto muestra una lista larga:
/var/www/discourse/public/uploads/default/original/1X/bbc547e72f080561282be277749165709cbb0983.ico
/var/www/discourse/public/uploads/default/original/1X/0a421ccd1a08047895e2355f44c332f8b069107d.jpeg
/var/www/discourse/public/uploads/default/original/1X/034e0353b7558a26252c82982de53002fda0a33f.jpeg

[…]

/var/www/discourse/public/uploads/default/original/1X/f7a6164ffa55af4ee2706d2386227183ef6c2d61.png
96 of 281 uploads are missing
/var/www/discourse/public/uploads/default/optimized/1X/997bc5536763d84a8d035ff7becd98277a158680_2_45x45.png

[…]

/var/www/discourse/public/uploads/default/optimized/1X/8944afba36549c9050ef074b391625ef93d4d0e3_2_1035x582.jpeg
/var/www/discourse/public/uploads/default/optimized/1X/8944afba36549c9050ef074b391625ef93d4d0e3_2_10x10.png
247 of 761 optimized_images are missing
  • Ejecutar rake uploads:recover_from_tombstone. Esto no produce ninguna salida.

Admito que no sé qué hacen esos comandos Rake.

También puedo ver dentro del archivo containers/app.yml que DISCOURSE_HOSTNAME es el subdominio y dominio correctos (nuevos).

Ejecutar ./launcher rebuild app parece no cambiar nada.

¿Puede alguien ayudar, por favor? Gracias.

¿Has probado a rehacer el renderizado?

cd /var/discourse
./launcher enter app
rake posts:rebake

Gracias por la sugerencia. Acabo de ingresar tus comandos y no veo ninguna diferencia. Las imágenes antiguas aún no se ven. Las imágenes nuevas siguen sin poder cargarse. Por cierto, la consola del navegador web muestra un error “GET 404” al finalizar el intento de carga.

Actualización:

No sé exactamente qué comando mejoró la situación, pero ha mejorado, aunque no se ha resuelto.

  • Puedo crear y subir nuevos archivos de tipo TXT, DOCX, XLSX, JPG y PNG.
  • La mayoría (pero no todos) los archivos antiguos de todos los tipos ahora se muestran y descargan correctamente.

Las subidas problemáticas se mostraban y descargaban correctamente antes, sin queja alguna. Y se niegan a mostrarse después de volver a subirlas en nuevas publicaciones de prueba. Como ejemplo:

Esta imagen: https://www.frontiersin.org/files/Articles/470644/fphys-10-00944-HTML-r1/image_m/fphys-10-00944-t001.jpg

Se muestra correctamente (en mi Discourse) cuando se introduce una URL en una línea propia, como se ve a continuación:

Pero desaparece de la publicación después de finalizarla y actualizar la página, dejando lo que parece ser solo una línea en blanco. Al inspeccionar el código fuente, se revela un elemento de imagen con un atributo SRC configurado en una ruta de mi dominio estructurada como https://discourse.mi_dominio.org/uploads/default/original/1X/61ae2bdeff3dfe334ad6803409560b667d7dc246.jpeg. Y al abrir esa ruta en una nueva pestaña, se carga una página de error 404 de NGINX.

Cuando descargo la imagen desde su fuente original a mi portátil y la subo a mi Discourse (como haré aquí en este Discourse a continuación), falla en mi Discourse.

En mi Discourse, se ve así:

Y si hago clic con el control en esa imagen fallida y selecciono “Abrir imagen en una nueva pestaña”, se carga una página de error 404 de NGINX.

Veo en este cuadro de diálogo de composición que Discourse cambia la extensión de la imagen de JPG a JPEG, pero no creo que eso sea relevante.

Si abro la imagen descargada en la aplicación Affinity Photo, la exporto sin compresión como un nuevo JPG y la vuelvo a subir a mi Discourse, se muestra correctamente en mi Discourse.

Esto me sugiere que el problema sigue estando en mi Discourse, y no en los archivos subidos.

Me encontré con este problema durante una transferencia reciente.

La forma más sencilla y no técnica de resolverlo fue iniciar sesión en tu sitio/host original con FileZilla, navegar a

VAR/Discourse/Uploads

Aquí encontrarás subcarpetas con imágenes. Simplemente las descargué del host original y las subí al nuevo.

Una alternativa más rápida es usar este método de copia de seguridad. Es un proceso manual, pero también funcionó bien.

Gracias por responder. Nunca he usado la aplicación FileZilla. Uso la aplicación Transmit para FTP. Pero no sé cómo conectarme a mi aplicación Discourse en mi droplet de DigitalOcean usando FTP.

Puedo acceder por SSH a mi droplet y navegar a /var/discourse/, pero no hay ningún directorio llamado uploads allí.

Incluso si moviera manualmente los archivos de imagen desde la ubicación antigua a la nueva, ¿cómo solucionaría eso el error al volver a subir las mismas imágenes?

Mi comprensión muy básica de Discourse (y soy muy novato) es que las imágenes cargadas se almacenan en tu sitio y también se guarda una versión optimizada del tamaño del archivo de la imagen. Inicialmente, se mostrará a los usuarios la imagen original y, en algún momento, el foro cambiará a una imagen optimizada (a mí me pareció que era después de 24 horas).

Experimenté un poco con la configuración porque me preocupaba quedarme sin almacenamiento.

En tu panel de administración, revísalos (en la sección Archivos). Hay varias opciones para controlar el tamaño y las dimensiones de las imágenes. Esto podría estar relacionado con tu problema de imagen errónea (si lo entendí correctamente). Por ejemplo, tu imagen reformateada aún queda fuera de los criterios.

Mi problema cuando transferí el hosting de Digital Ocean a Hetzner fue que algunas imágenes (y avatares) simplemente no aparecían (similar a tu primera captura de pantalla). Mi solución fue moverlas por FTP (crudo, pero funcionó). No estoy 100% seguro del por qué. Al principio moví solo las imágenes optimizadas y no solucionó el problema, pero cuando moví todas las imágenes, se resolvió mi problema.

Disculpas por el error con la carpeta, lo estaba haciendo de memoria. La estructura de carpetas es: VAR/Discours/Shared/Standalone/Upload

Es muy fácil iniciar sesión con un cliente FTP en Digital Ocean:

Host: dirección IP de Discourse
Puerto: 22
Usuario: root
Contraseña: tu contraseña SSH

Como dije, estoy lejos de ser un experto; más bien soy alguien que ha estado experimentando con esto en los últimos meses.

Hay personas aquí que pueden ofrecer mejores consejos (y conocimientos). Pero si todo lo demás falla, podría valer la pena probar mi enfoque.

Mi solución fue moverlos vía FTP (brutal pero funcionó). No estoy 100% seguro de por qué. Al principio solo moví las imágenes optimizadas y no solucionó el problema, pero cuando moví todas las imágenes, se resolvió mi problema.

Gracias por las instrucciones más detalladas sobre cómo conectarme vía FTP a mis dos Discourse. El archivo uploads tenía unos 125 MB en el Discourse antiguo y 60 MB en el nuevo. Así que copié el antiguo al escritorio de mi portátil. Luego copié su contenido, carpeta por carpeta, al nuevo Discourse, omitiendo cualquier duplicado.

Y para mi sorpresa, parece haber solucionado el problema. Todas las cargas de imágenes parecen estar arregladas, tanto en hilos anteriores a mi migración de Discourse como en hilos que creé hoy durante la resolución de problemas.

Podría teorizar que Discourse estaba reutilizando punteros preexistentes a contenido que de alguna manera se perdió durante el movimiento. Así que si volvía a cargar exactamente el mismo archivo de imagen, reutilizaba un puntero roto y fallaba repetidamente. Pero cuando lo guardaba de nuevo como un archivo nuevo, tenía éxito porque almacenaba una nueva copia con un nuevo puntero. Quizás.

Gracias de nuevo, muchas gracias.

De forma predeterminada, las copias de seguridad no incluyen imágenes optimizadas, ya que pueden volver a generarse. Incluirlas desperdiciaría ancho de banda y espacio en disco.

En tu caso, habría sido útil incluirlas activando la configuración del sitio include_thumbnails_in_backups antes de crear la copia de seguridad.

Como alternativa, ejecutar rake posts:rebake_uncooked_posts después de la restauración también habría funcionado. De lo contrario, las imágenes optimizadas se regeneran mediante un trabajo en segundo plano, pero eso lleva cierto tiempo… Al final de la restauración hay un mensaje de registro que te informa exactamente de ello.