No se pueden migrar las cargas a S3

Hola, hemos configurado el alojamiento de subidas (usando la configuración de S3) en Backblaze.
Las nuevas subidas funcionan (después de la corrección del encabezado x-amz-checksum-crc32), sin embargo, intentar migrar las subidas existentes con uploads:migrate_to_s3 falla inmediatamente.

Esto es en la última versión de Discourse (3.5.0.beta5-dev).
Aquí está la salida completa:

root@goactuary-app:/var/www/discourse# rake uploads:migrate_to_s3 --trace
** Invoke uploads:migrate_to_s3 (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute uploads:migrate_to_s3
¡Tenga en cuenta que la migración a S3 no se puede revertir actualmente!
[CTRL+c] para cancelar, [ENTER] para continuar

Migrando subidas a S3 para 'default'...
Algunas subidas no se migraron al nuevo esquema. Ejecutando la migración, esto puede llevar tiempo...
rake aborted!
FileStore::ToS3MigrationError: Algunas subidas no pudieron ser migradas al nuevo esquema. Necesitas arreglar esto manualmente. (FileStore::ToS3MigrationError)
/var/www/discourse/lib/file_store/to_s3_migration.rb:156:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:59:in `migrate'
/var/www/discourse/lib/tasks/uploads.rake:126:in `migrate_to_s3'
/var/www/discourse/lib/tasks/uploads.rake:106:in `block in migrate_to_s3_all_sites'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:36:in `each_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:104:in `migrate_to_s3_all_sites'
/var/www/discourse/lib/tasks/uploads.rake:100:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `block in execute'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `each'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `execute'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:199:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:199:in `invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:188:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:188:in `invoke_task'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `block (2 levels) in top_level'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `each'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `block in top_level'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:147:in `run_with_threads'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:132:in `top_level'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:83:in `block in run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:214:in `standard_exception_handling'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:80:in `run'
bin/rake:13:in `<top (required)>'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:59:in `load'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:59:in `kernel_load'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:23:in `run'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:452:in `exec'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor.rb:538:in `dispatch'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:35:in `dispatch'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:29:in `start'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/exe/bundle:28:in `block in <top (required)>'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/exe/bundle:20:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => uploads:migrate_to_s3

Necesitas ponerlos en tu app.yml como se describe en Configurar un proveedor de almacenamiento de objetos compatible con S3 para cargas

¿Quieres decir que añadiste código a tu app.yml para revertir la biblioteca de AWS a una versión que funcione con backblaze?

2 Me gusta

Sí, están en app.yml y he reconstruido la aplicación.
He confirmado que los archivos recién subidos van allí.

No exactamente. Estoy usando las siguientes variables de entorno:

  AWS_REQUEST_CHECKSUM_CALCULATION: WHEN_REQUIRED
  AWS_RESPONSE_CHECKSUM_VALIDATION: WHEN_REQUIRED

Esas solucionaron el no poder subir nuevos archivos después del cambio de configuración.

Probablemente necesitarás encontrarlas tú mismo.

En Rails puedes

 Upload.pluck(:url)

Y luego buscar qué cargas son el problema.

Creo que por mi experiencia eso no fue suficiente, pero dices que te está funcionando.

2 Me gusta

La degradación manual de los gems de aws en el contenedor hizo que el trabajo uploads:migrate_to_s3 subiera imágenes, así que aparentemente las variables de entorno no fueron suficientes, como señalaste.

Sin embargo, el proceso falló más tarde en un punto diferente:

FileStore::ToS3MigrationError: 2 posts no se reasignan a la nueva URL de carga de S3. La migración a S3 falló para la base de datos 'default'. (FileStore::ToS3MigrationError)

Esa será una aventura de solución de problemas separada.

1 me gusta

Es posible que se deba a que tienes una caja que hace referencia a publicaciones locales. Creé un tema al respecto pero no recuerdo bien los detalles.

Si son solo 2, podrías ignorarlo, pero en Rails puedes encontrar todas las cargas que no contienen tu nuevo bucket. ¿Creo que estará vacío?

Creo que el problema es que tienes dos publicaciones con una ruta inesperada en la publicación cocinada.

¡Lo encontré!
No se puede restaurar una copia de seguridad si incluye un enlace a Discourse onebox

Editar: así que creo que tienes dos publicaciones con cajas locales. Creo que solo necesitas encontrar y volver a hornear esas publicaciones.

1 me gusta

@stanski ¿esto resolvió tu problema?

1 me gusta

Lo siento, me quedé atrapado y olvidé actualizar esto.
Después de volver a hornear todas las publicaciones, recibí un mensaje de error diferente al intentar la migración nuevamente.
Desafortunadamente, ya no puedo encontrar el rastreo.

Me di cuenta de que, a pesar del error, parecía que las cargas se migraron a Backblaze y las publicaciones se actualizaron.
Archivé las cargas locales y las moví a otro lugar y no he recibido ninguna queja desde entonces.

Así que, en conclusión, sí, mi problema se solucionó.
Gracias a @pfaffman por las continuas sugerencias.

Ahora tengo una queja de que varios firewalls están bloqueando las cargas alojadas en backblaze, pero ese es otro asunto.

Realmente quieres usar una CDN, creo.

1 me gusta