Estoy ejecutando la última versión beta y he habilitado S3 para gestionar los archivos subidos.
Las subidas en los posts funcionan correctamente (el archivo se sube a S3 y se muestra en el post), pero ahora descubro que al intentar subir fotos de perfil aparecen errores de “Acceso denegado” en la interfaz. No hay nada en el registro de errores del administrador.
Algunos de mis primeros usuarios parecen haber logrado subir imágenes de avatar, pero estas se almacenan localmente; por ejemplo, al ver el código fuente:
<img alt="" width="45" height="45" src="/user_avatar/example.com/jackie/90/29_2.png" class="avatar" title="título de la imagen" aria-label="Imagery/FIT">
¿Existe alguna forma de migrar las imágenes de perfil a S3 y garantizar que las nuevas imágenes se puedan subir allí?
EDITO: debería haber mencionado que tengo habilitadas las subidas de medios seguras.
¿Acaso estás usando Cloudflare? Creo que las imágenes de perfil sí están almacenadas en S3, pero se redirigen a través de tu servidor. Resolví un problema similar a este (todos los avatares subidos aparecían en blanco); tuve que añadir la dirección IP del servidor a la lista de permitidos en Cloudflare para solucionarlo.
Gracias, pero no, no estoy usando un CDN; solo estoy utilizando S3 estándar pero con medios seguros. No estoy seguro de cómo verificar si las solicitudes están siendo proxy, pero vean la salida del encabezado de curl a continuación:
Eso me sugiere que no está siendo proxy, pero no sé lo suficiente para estar seguro…
Esa estructura de URL es consistente con un avatar proxy, lo cual es confuso (la implementación de las URLs de avatares aquí en Meta es diferente a la de las instancias estándar de Discourse). No estoy seguro, a partir de la salida de curl, si hay alguna información que descarte que Discourse esté haciendo proxy de los avatares (no soy un experto).
Por mi experiencia previa con esto, si las imágenes de las publicaciones se están subiendo a S3, los avatares también lo estarán, a menos que se esté haciendo algo muy personalizado. No he probado antes la subida de medios seguros ni el uso de S3 sin una CDN, por lo que eso podría marcar una diferencia significativa.
Sería bueno probar a subir un nuevo avatar y confirmar si puedes encontrar el archivo en tu almacenamiento local o en el bucket de S3.
Mi suposición sería algo relacionado con la necesidad de poner la IP del servidor en la lista blanca de S3. No soy un experto, así que espero que alguien más pueda aportar su opinión.
El problema es que las cargas a S3 funcionan para las publicaciones, pero no para las imágenes de avatar. Mi intuición es que los únicos usuarios que tienen avatares son los que subieron imágenes antes de configurar S3, pero no puedo confirmarlo.
Tuve un problema similar: las imágenes de las publicaciones funcionaban, pero las imágenes de perfil no se mostraban. Las subidas se realizaban correctamente a S3 en ambos casos, pero hubo un problema al mostrarlas (la IP del servidor fue limitada/bloqueada por exceso de solicitudes).
Puedo confirmar que al intentar subir un avatar, la barra de progreso se actualiza y llega al 100%, pero solo entonces muestra el mensaje “Error: Acceso denegado”.
Al revisar la consola de JS, obtengo el siguiente error:
https://discourse.psy.plymouth.ac.uk/uploads.json?client_id=0a2569993a6b43d6b5f8c60fdd2c913e
No se pudo cargar el recurso: el servidor respondió con un estado 422 ()
Y si sigo esa URL:
{"errors":["No se pudo encontrar la URL o el recurso solicitado."],"error_type":"not_found"}
Al revisar el bucket de S3, nada ha llegado a la carpeta ‘Originals’.
Esto contrasta con la situación al subir una imagen a una publicación: en ese caso, todo funciona correctamente, la imagen aparece en el bucket de S3 y también se genera su miniatura y se optimiza.
El estado HTTP 422 es aparentemente “unprocessable entity” (entidad no procesable). Esto me sugiere que Discourse no acepta la subida por alguna razón, aunque podría ser otra cosa: creo que el 422 básicamente significa “la solicitud se formuló correctamente, pero algo en ella es incorrecto”.
¿La imagen que intentas subir es de un tipo inusual o quizás es una imagen gigantesca?
¿Has probado a incluir ese archivo de imagen exacto en una publicación?
El avatar (por defecto) se redimensiona a varios tamaños diferentes, por lo que podría ser ahí donde falla por alguna razón, por ejemplo, alcanzando un límite de memoria si la imagen es enorme. Eso es solo especulación, sin embargo.
No creo que esperar ver un 422 desde S3, y no aparece listado en las respuestas de error de su referencia de API, así que creo que el problema ocurre en Discourse antes de llegar a intentar subir a S3.
Sin duda tiene que ver con el manejo de imágenes de avatar. Acabo de probar de nuevo con la misma imagen (usando esta vez el cliente móvil de iOS) y se sube sin problemas dentro de una publicación, pero da el mismo error de acceso denegado al usar la misma imagen como avatar.
¿Alguien más que use S3 con medios seguros puede replicar el error? ¿Podría tratarse de algo relacionado con los permisos del bucket, dado que la subida para una publicación sí funciona?