Deja de usar Amazon S3 para subir archivos

La copia de seguridad contiene muchos directorios y subdirectorios. Creo que debes copiar los archivos de los directorios, desde ambos buckets de forma recursiva, a la ubicación correspondiente en el servidor local. Por ejemplo, todo el contenido de los directorios 1X y 2X de ambos buckets debe copiarse a los directorios 1X y 2X en el servidor local. No estoy seguro al respecto, pero creo que es así.

¿Puedes confirmar que has copiado correctamente todos los archivos?

2 Me gusta

Sí, lo entiendo perfectamente y he asegurado que sus rutas relativas permanezcan exactamente igual.

Por ejemplo, si un archivo existía anteriormente en:
//bucket1/uploads/original/2x/f/filename.jpg
Y el otro en:
//bucket2/uploads/original/1x/a/filename.png

Ahora ambos también existen en:
/var/discourse/shared/web_only/uploads/default/original/2x/filename.jpg y ../original/1x/a/filename.png

Problemas
Antes de copiar el contenido del bucket al servidor local, noté que algunas de mis imágenes solo se mostraban como iconos, y los visitantes del sitio podían ver la imagen completa haciendo clic en ese icono.

Después de copiar (no mover) todo el contenido del bucket a la ubicación mencionada anteriormente en mi servidor local (manteniendo las rutas relativas intactas), ejecuté el comando:
discourse remap:oldurl-or-path new-url-or-path

Sin embargo, nada cambió visualmente en el sitio. Luego ejecuté:
rake posts:rebake

Entonces, incluso los iconos de las imágenes desaparecieron y al pasar el puntero del ratón sobre el espacio vacío del marcador de posición de la imagen, no aparecía ninguna URL o ruta.

Espero haber proporcionado suficientes detalles.

1 me gusta

En ese caso, creo que lo siguiente solucionará tu problema.

    ./launcher enter app
    discourse remap //bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
    discourse remap //bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
    rake posts:rebake
1 me gusta

Gracias, ji.

Pero como ya expliqué, después de realizar las operaciones de ‘remap’ y ‘rebake’, incluso desaparecen los iconos de las imágenes (es decir, la situación empeora).

1 me gusta

Debes proporcionar la ruta correcta al realizar la remapeo; de lo contrario, podría romperse. He realizado manualmente el remapeo de un enlace S3 a partir de la salida de muestra que proporcionaste anteriormente y funciona.

Una imagen alojada en el bucket:

https://bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/9/9d8f29892278f164e8ce27a6b58cc8af0760802c.png

La misma imagen alojada en tu servidor local:

https://bathindahelper.com/uploads/default/original/2X/9/9d8f29892278f164e8ce27a6b58cc8af0760802c.png

Puedes abrir la imagen en una nueva pestaña para ver los enlaces de ambas imágenes anteriores. Por lo tanto, asumo que esto funcionará.

 ./launcher enter app
  discourse remap //bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
  discourse remap //bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
  rake posts:rebake

1 me gusta

Gracias de nuevo.

Hice clic derecho en la (primera) imagen y la ruta que mostró en la barra de URL no correspondía a mi bucket:

Lo mismo ocurrió con la segunda imagen.

Puedes verificar una publicación de ejemplo de mi sitio web aquí (aunque la publicación está en hindi, puedes encontrar fácilmente el pequeño icono de la imagen en medio del texto). La imagen completa solo se muestra si haces clic en el pequeño icono.

Sin embargo, si vuelvo a mapear y luego vuelvo a generar, este icono también desaparece por completo. Y no queda ninguna forma para que el visitante vea la imagen.

2 Me gusta

Parece que anteriormente has utilizado CloudFront para la caché. Limpia la caché de tu navegador e inténtalo de nuevo.
Si has realizado alguna configuración de CloudFront, creo que sería mejor deshacer todas esas configuraciones.

2 Me gusta

No hay Cloudflare {edit: CloudFront} (ni ningún otro CDN) involucrado de mi parte para mi sitio web en los últimos 2 años aproximadamente.

Las imágenes en Meta, en cambio, quizás sí estén almacenadas en Cloudflare.

1 me gusta

No es Cloudflare. Es CloudFront. ¿Has limpiado la caché del navegador?

2 Me gusta

Sí, CloudFront (lo siento).

Sí, lo hice. Además, abrí este tema en el modo incógnito de Firefox.

1 me gusta

Ahora, también estoy obteniendo los mismos enlaces de CloudFront. Parece que has habilitado AWS CloudFront para tu sitio. CloudFront está almacenando en caché las imágenes de tu bucket. Creo que debes eliminar la distribución de CloudFront. Debes iniciar sesión en tu cuenta de AWS para verificar si la distribución de CloudFront está activa.

2 Me gusta

¡Hola! Nos equivocamos con CloudFront. En realidad, es meta discourse el que está almacenando en caché la imagen. Eso fue culpa mía.

1 me gusta

Nunca he usado CloudFront (ni ningún otro CDN) en AWS ni en el frontend. Aunque hace unos dos años usé CloudFlare durante un mes o más, luego lo desactivé definitivamente.
Tampoco elegí CloudFront en AWS. Así que tampoco surge ninguna duda al respecto.

Además, en mi PC, cuando abro las imágenes, se muestran las direcciones del bucket de AWS, no las de ningún otro CDN.

1 me gusta

Malinterpreté CloudFront aquí. En realidad, meta discourse ha almacenado en caché la imagen. He editado mi publicación anterior. Echale un vistazo.

2 Me gusta

Solo estás sugiriendo que vuelva a mapear las rutas de las imágenes (desde la URL del bucket de S3 hasta la ruta del servidor local) y luego volver a generar.

Pero como ya mencioné, ya lo hice y descubrí que esto agrava el problema. (Además, después de volver a generar, la opción ‘Restaurar’ tampoco funciona y es difícil revertir los cambios).

¿Tienes alguna otra idea útil, por favor?

1 me gusta

Cuando realizaste el remapeo, ¿estás seguro de que las rutas eran las mismas que se muestran a continuación?

discourse remap //bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
discourse remap //bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/

¿Qué ruta especificaste al realizar el remapeo?

Ya te proporcioné un ejemplo en una publicación anterior. Funcionó. No conozco ningún otro método.

2 Me gusta

Lo intentaré de nuevo, con todo el cuidado posible.
Pero estaba buscando algún método con el que pudiera averiguar qué hay detrás de escena. Al menos con una publicación de muestra, quería ver qué publicaciones tienen qué bucket mapeado y en qué lío estoy.

De todos modos, lo intentaré de nuevo y te lo haré saber aquí. Gracias una vez más.

1 me gusta

La ruta que especificaste en tu remapeo anterior se reflejará en la salida del siguiente comando. Dado que ambos buckets aún están presentes, creo que tu remapeo anterior pudo haber fallado. En cualquier caso, ahora depende de ti. Espero que encuentres tu solución pronto. ¡Mucha suerte!

./launcher enter app
rails c
Upload.all.sample(2000).pluck(:url)

Gracias

2 Me gusta

No sé más que tú, pero acabo de pasar por el proceso y logré salir adelante con la ayuda de @Pravi.

Pasos necesarios para volver desde la subida a S3 al estado original

No es algo súper sencillo; ten mucho cuidado con el texto y los enlaces, ya que si algo sale mal, será un caos ordenarlo. Pero es totalmente factible.

Paso 1: Copia los archivos desde tu bucket de S3 a la carpeta public/uploads/default

Primero, instala la AWS CLI dentro del contenedor de la aplicación:

cd /var/discourse
./launcher enter app
sudo apt install awscli

Configura AWS con tu ID y contraseña de S3 (por lo general es sencillo):

aws configure

Luego usa aws para copiar todo el contenido del bucket a public/uploads/default/:

aws s3 sync s3://my-bucket-name/ public/uploads/default/

Paso 2: Remapea la URL de S3

Esto es más fácil si encuentras una imagen en tu foro e inspeccionas su URL. Quieres cada parte hasta el nombre del archivo real (incluyendo la última /):

discourse remap //la-larga-url-en-tus-imagenes-hasta-el-nombre-del-archivo /uploads/default/

Paso 3: Recocina los posts y reconstruye la aplicación:

rake posts:rebake
exit
./launcher rebuild app

Paso 4: Desactiva S3

  1. Desactiva las subidas a S3 en la configuración (o en tu app.yml si lo configuraste así). Si has estado usando una CDN, también elimina el enlace a ella de la configuración (de lo contrario, no se desactiva realmente).
  2. Apaga tu contenedor. Yo lo hice moviendo el contenido a un nuevo contenedor como copia de seguridad en un paso inicial.

¡Uf! Listo. Hasta ahora no he encontrado ningún problema. ¡Ve y pruébalo!

10 Me gusta

¡Buen trabajo! Creo que esos son los pasos que finalmente me ayudaron a tener éxito, ¡aunque había hecho muchos remapeos diferentes que no funcionaron tan bien! Es genial tener instrucciones formalizadas.

4 Me gusta