Avatares perdidos después de la restauración. ¿Cómo recuperarlos?

He realizado una instalación limpia de Discourse y restauré la copia de seguridad tomada esta misma noche (utilizando la interfaz de Discourse para realizar la copia de seguridad y la restauración).

La copia de seguridad incluía la base de datos y las subidas.

Después de la restauración y la reconstrucción de la aplicación de Discourse (asumo que fue necesaria debido a los cambios en la configuración tras la instalación limpia), hemos encontrado un problema.

Los avatares de todas las personas que habían personalizado su imagen de perfil se han perdido.

Supongo que tiene algo que ver con la optimización de imágenes; quizás sea necesario hacer algo más (además de reconstruir la aplicación con el launcher) para volver a generarlos.

Pero no he encontrado cuál es el paso que falta.

He encontrado hilos de personas que perdieron los avatares estándar (los que vienen distribuidos con Discourse), pero ese no es nuestro caso; las personas que no han cambiado su avatar (y no subieron una imagen) tienen su avatar con la inicial en su lugar.

ACTUALIZACIÓN:

He ejecutado:
./launcher enter app
rake posts:rebake

pero no ha servido.

¿Quizás no sea posts:rebake?

@arinaf,

Curiosamente, a mí me ocurrió lo mismo hoy en una configuración con un proxy inverso nginx hacia un socket de dominio Unix. Todo estaba perfecto, pero las imágenes de avatar personalizadas se mostraban como iconos (el icono de persona) y todos los avatares con letras estaban bien.

Mientras solucionaba el problema, volví a una configuración estándar de dos contenedores (sin front-end nginx, sin socket Unix) y el problema desapareció.

Luego, regresé a la configuración con proxy inverso nginx hacia un socket Unix, y el problema volvió.

No tengo idea… así que me tomaré un descanso por un momento :slight_smile:

Obviamente, los datos están bien porque funciona perfectamente sin un proxy inverso nginx, lo cual es extraño porque funciona bien sin él. Jaja. (Funcionaba impecablemente de ambas maneras y de repente apareció el extraño problema con los avatares…)

Esa es exactamente mi configuración, ya que estoy ejecutando otro software en un contenedor Docker (un blog Ghost).
Tengo nginx como proxy inverso.

Obviamente, restaurar las copias de seguridad no es tan sencillo como parece.

He estado haciendo rebaseos, ya que pensé que era un problema de no guardar las miniaturas, pero sin éxito.

Probaré lo que dices para confirmar si el problema está con el proxy inverso (no tengo idea de por qué podría interferir, pero no pierdo nada al intentarlo).

Sí… no creo que el problema esté relacionado con la base de datos del backend, la restauración de la BD (o el rake).

En cuanto desactivo el proxy inverso y ejecuto dos contenedores sin él, el problema desaparece y, como la BD es la misma en todos los casos, es poco probable que sea un problema de la BD.

Me desconecto de la red durante 12 horas, así que volveré más tarde para ver qué ha ocurrido en tu configuración @ariznaf

¿Estás usando HTTPS fuera del contenedor?

¿Has inspeccionado el código fuente de la página para ver qué URLs se están utilizando para los avatares?

Parece que force_https no está habilitado.

No puedo hacerlo ahora mismo, ya que tengo que empezar de cero de nuevo.

He estado intentando copiar todos los archivos (con Discourse apagado en el origen), pero tampoco funcionó (problemas con la base de datos).

Voy a intentar empezar de nuevo, instalar una versión limpia de Discourse y luego restaurar la copia de seguridad hecha con Discourse.

Lo revisaré, gracias.

Intentar restaurar bases de datos o migrar de un host a otro se está volviendo más difícil de lo esperado.

Gracias a ambos.

Si no estás utilizando un proxy inverso y la plataforma de destino es representativa y está configurada correctamente, por lo general es increíblemente sencillo.

Bueno, a menos que haya habido alguna actualización del propio Discourse o de los complementos que estás utilizando (yo solo uso unos pocos complementos oficiales + vistas previas de listas de temas y algunos componentes), cada vez que he intentado simular una restauración ha surgido algún tipo de problema.

Siento que el sistema de copias de seguridad es sencillo y directo, pero no lo suficientemente robusto cuando tienes que trasladar todo a otro servidor.
Y tampoco es lo suficientemente flexible.

Tarda demasiado en finalizar (para un sitio no tan grande, la copia de seguridad completa es de solo 3 GB).

Nuestro antiguo foro tenía más de 100 GB de datos; sería imposible hacer una copia de seguridad de un foro tan grande con el sistema actual.

Las diversas imágenes de avatar redimensionadas no se incluyen en una copia de seguridad, solo las originales. La tarea programada tardará algún tiempo en procesar y generar las versiones redimensionadas de cada avatar.

¡Ah, vale!
Muchas gracias.
No sabía que se reconstruían en segundo plano.
Así que es cuestión de esperar.

Me estaba volviendo loco usando rake posts:rebuild y cosas así.

Me has ahorrado muchos dolores de cabeza. Muchas gracias.

Puedes acelerarlo yendo a /sidekiq/scheduled en tu foro y pulsando el botón “Ejecutar” junto al trabajo CreateMissingAvatars.

¡Vaya, hay un mundo entero oculto allí en /sidekiq :slight_smile:

He estado probando lo que sugeriste.

Pero el trabajo CreateMissingAvatars está programado y se ejecuta, aunque termina casi inmediatamente; solo tarda unos pocos ms en completarse. He intentado ejecutarlo manualmente (usando Trigger), pero de nuevo termina inmediatamente con un resultado OK.

Sin embargo, los avatares siguen incorrectos.
Estaba usando ahora mi configuración original, con Discourse escuchando en un socket y nginx como proxy inverso.

Ahora intentaré eliminar nginx y ejecutar Discourse en los puertos 80 y 443.

Hola @ariznaf

Me desperté esta mañana después de estar desconectado de la red durante 12 horas y volví a nuestra configuración socket-only.yml, y todo ha vuelto a la normalidad.

Así que, al menos en este extremo del vasto discourse-verse, todo está bien de nuevo en el mundo de dos contenedores con nginx como proxy inverso hacia un socket unix.

Habíamos cambiado a la configuración de frontend nginx unas seis horas antes de que se detectara la anomalía, y todo estaba bien.

Basado en este útil consejo de @riking (como siempre, muy apreciado, Kane):

Las diversas imágenes de avatares redimensionadas no se incluyen en una copia de seguridad, solo las originales. Tomará algún tiempo que el trabajo programado recorra todo y genere las versiones redimensionadas de cada avatar.

Screen Shot 2020-04-17 at 9.06.09 AM

Mi mejor suposición es que cuando hicimos el cambio a nginx no notamos ningún problema porque muchas imágenes de avatares ya estaban en caché y el proceso de regeneración aún no había terminado; así que con el tiempo, la caché de esas imágenes expiró y comenzó a aparecer la anomalía.

Así que me desconecto de la red (el contenedor socket-only.yml sigue ejecutándose en segundo plano, inactivo) durante 12 horas, me despierto por la mañana y sidekiq ha hecho su magia durante la noche (aquí), como @riking (gran apoyo, por cierto, Kane, en cada tema aquí en meta).

Este escenario parece confirmar lo que sugirió @riking.

Honestamente, cuanto más usamos Discourse, más nos gusta. Los tropiezos y anomalías son muy interesantes y la configuración de dos contenedores es realmente excelente.

Nuestros contenedores actualmente se ven así:

# ls -l containers
-rw-r--r-- 1 discourse root 1124 Apr 15 11:29 data.yml
-rw-r--r-- 1 discourse root 3939 Apr 16 07:45 socket-only.yml
-rw-r--r-- 1 discourse root 3784 Apr 16 07:28 socket.yml
-rw-r--r-- 1 discourse root 3921 Apr 15 11:50 web-only.yml

Lo que me gusta de esto es que, incluso cuando vemos un problema, por ejemplo esta anomalía de regeneración de avatares, podemos cambiar fácilmente de socket-only.yml a web-only.yml y viceversa.

En este caso, volvimos a web-only (durante esta regeneración) y volvimos después de que el proceso terminara (porque todos los contenedores siguen ejecutándose). Cuando realicemos una reconstrucción de contenedor, podemos cambiar fácilmente entre estos contenedores y configuraciones.

Después de dos décadas ejecutando un foro LAMP, estamos cada vez más impresionados con Discourse, desde el lado del administrador del sistema.

Barra lateral (editorial):

Por supuesto, está muy por encima de mi nivel aquí en meta, pero creo que la configuración básica de dos contenedores (sin el proxy inverso) debería ser la predeterminada, ya que es muy fácil de configurar y obtenemos mucho más de esta configuración que cualquier “penalización” percibida por tener dos archivos yml.

Por mi parte, he intentado realizar la restauración utilizando únicamente la copia de seguridad creada desde la interfaz.

Como comentamos, perdimos las imágenes de avatar y algunos otros detalles menores.

He intentado seguir las indicaciones proporcionadas por @riking, pero sin éxito.

También he intentado refrescar las imágenes de avatar forzando la ejecución del proceso, pero terminó con estado “OK” en unos pocos milisegundos y los avatares no se generaron.

Como teníamos prisa por migrar el contenido, detuve el foro en el servidor antiguo, copié todo el contenido de los contenedores y directorios compartidos usando tar, instalé Discourse en el nuevo servidor (sin realizar la configuración inicial), copié allí los directorios compartidos y de contenedores, y reconstruí la aplicación.

Ahora todo funciona correctamente en el nuevo servidor.

La restauración desde una copia de seguridad está resultando más problemática de lo esperado (parece algo sencillo, dado que las instrucciones indican simplemente reinstalar y restaurar desde la interfaz).

Tengo que investigar qué falla al restaurar y cómo asegurarme de que el sistema se inicie correctamente incluso si restauramos desde una copia de seguridad antigua cuando Discourse tiene varias versiones más recientes que la versión con la que se realizó la copia.

Me gusta mucho Discourse.
Al venir de otros foros tradicionales, a veces resulta difícil encontrar lo que buscas.
La interfaz limpia no ayuda en estos casos.

Pero cuando finalmente lo encuentras, está donde debería estar y funciona de manera inteligente.

Solo tenemos problemas al restaurar desde una copia de seguridad.
Y en ocasiones, debido al uso intensivo de caché.

Discourse tarda un poco en cargar la primera vez en tu navegador web, pero después vuela, ya que la mayor parte del procesamiento se realiza en tu propia máquina y utiliza mucha caché (avatares, imágenes, CSS, etc.).
La aplicación no vuelve a recuperar la información que ya tiene guardada en tu equipo, lo que ahorra mucho trabajo al servidor (al menos eso es lo que parece, según mi experiencia).

Cuando intento migrar de un servidor a otro, o reinstalar Discourse desde cero, sigues viendo el contenido antiguo incluso si refrescas la vista.

No pude eliminar ese problema hasta que limpié el historial de navegación del navegador web.
Eso me mantuvo ocupado y confundido durante bastante tiempo.

POR CIERTO: ¿se guardan esas imágenes de avatar si seleccionas las imágenes de miniatura guardadas en la copia de seguridad?
¿Crees que es mejor guardarlas?
Nuestro foro no es muy grande, pero descargar 36.000 imágenes llevó bastante tiempo.

Hola @ariznaf,

Nuestra copia de seguridad completa tiene el mismo tamaño, alrededor de 3 GB completamente comprimidos con gzip.

Hasta ahora, no he experimentado ninguno de los problemas que mencionaste en tu publicación (justo arriba, #13).

¿Restauras desde la línea de comandos o desde la interfaz de usuario?

Solo restauramos desde la línea de comandos en el contenedor. Supongo que para ti es lo mismo, ¿verdad?

Esa es una buena noticia. ¡Felicidades!

Gracias por su interés.

He seguido las instrucciones de los tutoriales utilizando la interfaz. No sé cómo restaurar desde la línea de comandos (respaldos realizados mediante la interfaz de Discourse).

Permítame explicar:

Tuve que migrar el servidor de a.domain.com a b.domain.com.
El foro de Discourse se accede mediante HTTPS con un SSL personalizado (tenemos certificados SSL a nivel de dominio).
Discourse está instalado utilizando un socket y con el HOSTNAME a.domain.com.
Hemos configurado nginx como proxy inverso para redirigir permanentemente el tráfico http (puerto 80) a https (puerto 443), y https (puerto 443) actúa como proxy inverso con tráfico HTTPS, redirigiéndolo al socket donde Discourse está escuchando.

Tenía una copia de seguridad (mediante la interfaz) de a.domain.com en un bucket de S3, con la base de datos y las cargas, pero sin miniaturas (aproximadamente 3 GB).

Instalé nginx y copié el archivo de configuración de a.domain.com, cambiando el nombre del host de a.domain.com a b.domain.com.

He instalado Discourse clonando desde GitHub (como se indica en el tutorial de instalación de 30 minutos).
Luego ejecuté discourse setup (con nginx detenido) y lo configuré con el HOSTNAME b.domain.com.

Accedí a la nueva instalación en b.domain.com iniciando sesión como administrador.
Mediante la interfaz, configuré las copias de seguridad para acceder al bucket de S3, activé las capacidades de restauración de administrador y restauré la última copia de seguridad.

Después, se cierra la sesión en Discourse, ya que hay nuevos usuarios, configuración, etc.

De vuelta en la línea de comandos, edité el archivo app.yml y copié la configuración del servidor original (a.domain.com), cambiando únicamente el nombre del host a b.domain.com.

Luego ejecuté ./launcher rebuild all y, una vez finalizado, inicié nginx.

Accedo al foro de Discourse, pero los avatares se han perdido y hay otros problemas con las miniaturas de las imágenes.

Gracias por tantos detalles @ariznaf

Honestamente, no soy fanático de los servicios de almacenamiento en la nube como S3 y, por lo tanto, creo que es mejor que deje de lado cualquier otra idea, ya que no somos “usuarios de S3”…

Dices que los avatares están perdidos, pero ¿inspeccionaste el código fuente de la página para ver desde dónde se están solicitando?

¿Siguen estando en S3?

¿Por qué fue necesario cambiar los subdominios?

Para aclarar, ¿has cambiado tanto el servidor físico como la dirección DNS?

Riking dice que el sistema debe volver a generar las miniaturas. Pero la tarea parecía haber finalizado.

Lo intentaré de nuevo. Ahora lo he resuelto de otra manera.

En S3 solo se guardan las copias de seguridad; las imágenes y las subidas se almacenan localmente.

Sin embargo, debo realizar pruebas de restauración para ver cuál es el problema.
Voy a comprobar desde dónde intenta recuperar la imagen.

Pero mostró una imagen con una silueta blanca, así que no es un enlace roto; probablemente el sistema la haya cambiado porque no tiene la miniatura.