Este problema es como un virus y se está extendiendo a más avatares. Una observación extraña fue esta:
En Firefox se muestran algunos avatares, mientras que faltan en Chrome. Esto no significa que en Firefox no falten avatares; ¡también hay avatares faltantes en Firefox!
He encontrado el mismo problema y actualmente lo estoy investigando. En el caso que estoy investigando, está relacionado con el almacenamiento externo.
@Pad_Pors ¿Sigues experimentando este problema? Además, ¿tienes o tenías archivos subidos almacenados en S3?
En el caso que estoy revisando, las imágenes de avatar faltantes se movieron a la carpeta tombstone en S3 después de una actualización por línea de comandos y una actualización manual de PostgreSQL de la versión 10 a la 12. Todavía no estoy seguro de la razón exacta.
Localización de las subidas
@Jeremie_Leroy@Pad_Pors Si quieren verificar si ocurre lo mismo en su caso, la forma en que busqué los avatares faltantes en mi carpeta tombstone de S3 es la siguiente:
Obtuve el SHA1 (la cadena de 16 caracteres en la URL de la subida) de una subida de avatar que sabía que estaba rota después de la migración. Lo hice tomando el ID de la subida del avatar roto en la URL (es la primera parte del nombre del archivo; por ejemplo, para 6254_2.png el ID es 6254) y luego usando ese ID para buscar el SHA1 de la subida en un volcado reciente de la base de datos. Si no se sienten cómodos con la línea de comandos, pueden visualizar sus datos en un volcado usando una interfaz gráfica de PostgreSQL como Postico 2.
Realicé una búsqueda del SHA1 en la carpeta tombstone del bucket de S3 correspondiente usando la CLI de AWS.
Si funciona, obtendrán una lista de resultados que se ve así:
{
"Key": "tombstone/original/2X/d/d7b553ff276fca054c7090e859ef5339fd1f936e.jpg",
"LastModified": "2020-05-16T11:45:03+00:00",
"ETag": ## cadena de letras y números,
"Size": 64580,
"StorageClass": "STANDARD",
"Owner": {
"ID": ## cadena de letras y números
}
}
Nota: el 16 de mayo fue cuando realicé la actualización. Todos los avatares marcados incorrectamente como tombstone tienen marcas de tiempo de alrededor de esa fecha. Sospecho que el problema tardó un tiempo en manifestarse en producción y lo hizo de forma intermitente debido a la caché.
Recuperación
Por lo que entiendo, UploadRecovery (y su tarea rake asociada) es específica para subidas de publicaciones y no maneja avatares marcados como tombstone.
Actualmente estoy considerando agregar (patchear) un nuevo método a UploadRecovery que utilice recover_from_s3 para recuperar las subidas de avatares.
Si alguien conoce una forma más sencilla de recuperar avatares marcados incorrectamente como tombstone en S3, estoy abierto a sugerencias.
Gracias @angus por compartir la ruta de verificación, pero ya no estamos usando AWS ni S3. De hecho, si no recuerdo mal, el problema comenzó después de que migráramos desde AWS.
Me encantaría que el problema se resolviera, pero por el momento me resulta mucho más sencillo pedirle a esos pocos usuarios que vuelvan a subir sus avatares, y esperar que el problema no se extienda a nuevos usuarios.
@Jeremie_Leroy Una de las razones por las que publiqué esos pasos anteriormente es que hay varias causas posibles para los avatares faltantes. Para saber si esto funcionará para ti, primero debes confirmar que hay avatares marcados incorrectamente como eliminados, es decir, cuál es la causa del problema en tu caso.
También entiendo que realizar ese análisis es muy difícil si no estás familiarizado con los aspectos técnicos de Discourse. He convertido la solución que utilicé en un plugin que puedes probar en tu propio sitio. Consulta las instrucciones a continuación.
@Pad_Pors Si te parece bien pedirle a las personas que vuelvan a subir sus avatares, simplemente hazlo y no intentes esta solución.
Instrucciones
Ten en cuenta que esta es una solución para avatares faltantes cuando:
Las subidas se almacenan en S3
Los avatares faltan porque están marcados incorrectamente como eliminados
El registro de la subida del avatar aún existe
Realiza esto en un momento de baja actividad en tu foro y realiza una copia de seguridad completa primero.
Instala este plugin
El plugin agrega recover_avatars a UploadRecovery y utiliza una versión adaptada del mismo método de restauración que usa el método principal recover para recuperar subidas faltantes en las publicaciones.
Esto mantendrá una copia de los avatares “recuperados” en la carpeta de marcados como eliminados para redundancia. Estas copias serán eliminadas por el trabajo en segundo plano purge_deleted_uploads, que se ejecuta según el período establecido por la configuración del sitio purge_deleted_uploads_grace_period_days.
Abre la consola de Rails
Para usar el método, primero debes conectarte mediante SSH a tu servidor, entrar a la instancia de Docker y abrir una consola de Rails:
./launcher enter app
rails c
Realiza una prueba
Para ver qué subidas intentará recuperar el método de la carpeta de marcados como eliminados, primero realiza una prueba:
Esto te dará una lista de nombres de usuario y enlaces de archivos en S3. Estos son los archivos de avatar que el método intentará mover fuera de la carpeta de marcados como eliminados en una ejecución real:
Una vez que el trabajo se complete, revisa tu sitio en vivo en una ventana de incógnito nueva (para evitar problemas de caché). Una vez que termines, asegúrate de cerrar la conexión SSH activa a tu servidor. No quieres ingresar accidentalmente algo incorrecto en la consola de Rails abierta.