Cambiando el bucket s3 para subidas

¡Hola @Jite!

Prueba si esto te funciona. Si es así, procederé a crear un howto adecuado.

Buckets antiguos

Esto asume que puedes instalar y configurar una herramienta para mover tus datos desde tu bucket antiguo a una máquina local y luego hacer lo mismo desde lo local hacia el nuevo bucket. Consulta aws cli sync (que puede configurarse para buckets que no sean de AWS) y gsutil rsync para obtener más información. Si tienes grandes cantidades de datos o estás moviendo entre buckets del mismo proveedor, podrías investigar métodos que muevan los datos directamente entre buckets.

Accede a un directorio adecuado como espacio temporal (por ejemplo, mkdir temp-bucket; cd temp-bucket) antes de realizar algo como lo siguiente. Estos ejemplos incluyen los interruptores -n y --dry-run para mostrarte qué ocurrirá. Si eso parece lo que deseas, ejecuta el comando nuevamente sin ese interruptor.

Mover datos antiguos desde el bucket antiguo a lo local

    gsutil  rsync -r -n  gs://=OLD= .

o

    aws s3 sync s3://=OLD= .

Mover datos desde lo local al nuevo bucket

    gsutil rsync -r -n . gs://=NEW=

o

    aws s3 sync . s3://=NEW=

Actualizar la base de datos para usar el nuevo bucket

Ejecutarás estos comandos en la consola de Rails. Para acceder a ella, realiza lo siguiente:

cd /var/discourse
./launcher enter app
rails c

Para el nuevo bucket, sube una imagen con la nueva configuración y haz esto:

Upload.last.url

Deberías ver algo como:

=> "//discourse-bucket.s3.dualstack.us-east-2.amazonaws.com/original/2X/7/12345fbea574afc4e02db80107e6682430aede2c.png"

Luego obtendrás discourse-bucket.s3.dualstack.us-east-2.amazonaws.com para el nuevo bucket. Obtén el nombre de host del bucket antiguo de manera similar a partir de lo anterior.

Usa esto para verificar que tus subidas estén donde crees que están:

Upload.order(Arel.sql('RANDOM()')).limit(10).pluck(:id, :url)

Ahora, actualizarás la base de datos para usar el nuevo bucket en lugar del antiguo. DbHelper.remap reemplazará las ocurrencias en todas las tablas.

DbHelper.remap("//=OLDHOST=/","//=NEWHOST=/")

Moverse a AWS podría requerir limpiar tu s3_endpoint.

NOTA: Si tienes un s3_endpoint definido en tus SiteSettings en la base de datos y cambias a AWS (donde no se necesita ningún endpoint), entonces deberás limpiar esa configuración del sitio después de construir el nuevo contenedor con la configuración actualizada (o después de restaurar una base de datos que lo tenga configurado).

Recocinar publicaciones que hacen referencia al bucket en lugar del CDN de S3

Si tienes publicaciones que enlazan directamente al nuevo bucket de s3 (quizás no tenías definido un s3_cdn_url antes), aquí te mostramos cómo recocinar solo las publicaciones que lo necesiten.

Obtén las publicaciones:

  posts=Post.where("cooked like '%=NEWHOST=%'")

Consulta cuántas hay:

  posts.count

Recocina esas publicaciones:

  posts.each do |p| p.rebake! end

O simplemente reemplaza el bucket con el CDN:

posts.each do |p|
  p.cooked.gsub!(/=NEWHOST=/,"=CDN=")
  p.save!
end

8 Me gusta