Fallo al restaurar datos tras la migración de Discourse

[2026-05-11 02:05:14] Volviendo a cargar la configuración del sitio...
[2026-05-11 02:05:14] Desactivando correos salientes para usuarios que no son personal...
[2026-05-11 02:05:14] Ejecutando semilla fu...
[2026-05-11 02:05:31] Desactivando el modo de solo lectura...
[2026-05-11 02:05:31] Limpiando la caché de categorías...
[2026-05-11 02:05:31] Volviendo a cargar las traducciones...
[2026-05-11 02:05:31] Reasignando las subidas...
[2026-05-11 02:05:31] Restaurando las subidas, esto puede tardar un rato...
[2026-05-11 02:05:33] EXCEPCIÓN: Solo puedes especificar un checksum no predeterminado a la vez.
[2026-05-11 02:05:33] /var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/seahorse/client/plugins/raise_response_errors.rb:17:in 'Seahorse::Client::Plugins::RaiseResponseErrors::Handler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/plugins/sse_cpk.rb:24:in 'Aws::S3::Plugins::SseCpk::Handler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/plugins/dualstack.rb:21:in 'Aws::S3::Plugins::Dualstack::OptionHandler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/plugins/accelerate.rb:43:in 'Aws::S3::Plugins::Accelerate::OptionHandler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/aws-sdk-core/plugins/checksum_algorithm.rb:167:in 'Aws::Plugins::ChecksumAlgorithm::OptionHandler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/aws-sdk-core/plugins/jsonvalue_converter.rb:16:in 'Aws::Plugins::JsonvalueConverter::Handler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/aws-sdk-core/plugins/invocation_id.rb:16:in 'Aws::Plugins::InvocationId::Handler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/aws-sdk-core/plugins/idempotency_token.rb:19:in 'Aws::Plugins::IdempotencyToken::Handler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/aws-sdk-core/plugins/param_converter.rb:26:in 'Aws::Plugins::ParamConverter::Handler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/seahorse/client/plugins/request_callback.rb:89:in 'Seahorse::Client::Plugins::RequestCallback::OptionHandler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/aws-sdk-core/plugins/response_paging.rb:12:in 'Aws::Plugins::ResponsePaging::Handler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/seahorse/client/plugins/response_target.rb:24:in 'Seahorse::Client::Plugins::ResponseTarget::Handler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/aws-sdk-core/plugins/telemetry.rb:39:in 'block in Aws::Plugins::Telemetry::Handler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/aws-sdk-core/telemetry/no_op.rb:29:in 'Aws::Telemetry::NoOpTracer#in_span'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/aws-sdk-core/plugins/telemetry.rb:53:in 'Aws::Plugins::Telemetry::Handler#span_wrapper'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/aws-sdk-core/plugins/telemetry.rb:39:in 'Aws::Plugins::Telemetry::Handler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/seahorse/client/request.rb:72:in 'Seahorse::Client::Request#send_request'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/client.rb:17315:in 'Aws::S3::Client#put_object'
/var/www/discourse/lib/file_store/to_s3_migration.rb:216:in 'block (2 levels) in FileStore::ToS3Migration#migrate_to_s3'
[2026-05-11 02:05:33] Intentando revertir...
[2026-05-11 02:05:33] Revertiendo...
[2026-05-11 02:05:34] Limpiando cosas...
[2026-05-11 02:05:34] Eliminando funciones del esquema discourse_functions...
[2026-05-11 02:05:34] Eliminando el directorio temporal '/var/www/discourse/tmp/restores/default/2026-05-11-020447'...
[2026-05-11 02:05:34] Reanudando sidekiq...
[2026-05-11 02:05:34] Marcando la restauración como finalizada...
[2026-05-11 02:05:34] Notificando a 'niege' del final de la restauración...

¿Cómo se soluciona este problema?

Creo que puede haber un problema con la compatibilidad de S3.

¿La instancia a la que estás restaurando está actualizada con la última versión de Discourse?

Creo que hay un problema aquí en
/var/www/discourse/lib/file_store/to_s3_migration.rb
quizás con el payload que se envía a put_object en la línea 216.

No estoy seguro de cuál es la solución completa, pero creo que para que funcione podrías necesitar desactivar S3 (enable_s3_uploads: false) y realizar la restauración y extracción localmente. Luego, vuelve a habilitar S3 y usa el comando rake uploads:migrate_to_s3.

@Lilly
Debido a que el servidor ha expirado, es necesario migrar a un nuevo servidor. Primero, he realizado una copia de seguridad de los datos de Discourse.
Sincroniza el archivo app.yml con el nuevo servidor y, en el nuevo servidor, ejecuta:

./launcher rebuild app

Luego, sube la copia de seguridad de los datos a /var/discourse/shared/standalone/backups/default en el nuevo servidor.
Usa los siguientes comandos:

./launcher enter app
discourse enable_restore
discourse restore xxxxxxxxxxxxxxxxxxxxx.tar.gz

La restauración falló. Después de reconstruir Discourse nuevamente, intenté restaurar desde el panel de administración, pero también falló. El archivo adjunto es el registro de restauración.
log.txt (124.0 KB)

Cuéntanos sobre tu entorno, por ejemplo, ¿qué almacén de objetos estás utilizando?

Ubuntu 24.04.4 LTS (x86_64)

Cloudflare R2

@supermathie ¿No es compatible el uso de Cloudflare R2?

Sí, parece haber una incompatibilidad con R2.

Sin probar, pero podrías intentarlo así:

Las variables de entorno se establecen en el archivo app.yml de tu contenedor, dentro del bloque env — el mismo lugar donde ya tienes cosas como DISCOURSE_S3_ACCESS_KEY_ID. Simplemente agrega las dos variables allí:

env:
  LANG: en_US.UTF-8
  # ... tus variables existentes ...
  DISCOURSE_S3_BUCKET: tu-bucket-r2
  DISCOURSE_S3_ACCESS_KEY_ID: ...
  DISCOURSE_S3_SECRET_ACCESS_KEY: ...
  DISCOURSE_S3_ENDPOINT: https://<cuenta>.r2.cloudflarestorage.com

  # Solución para la incompatibilidad de checksum de Cloudflare R2 con aws-sdk-s3
  AWS_REQUEST_CHECKSUM_CALCULATION: when_required
  AWS_RESPONSE_CHECKSUM_VALIDATION: when_required

Luego, reconstruye el contenedor:

./launcher rebuild app

@gerhard
Intenté este método y aún no funciona.
El problema ahora es que mi servidor ya está fuera de servicio; solo tengo los datos de respaldo y el archivo app.yml.

Estos valores se indican en nuestra guía.

¿Podrías publicar aquí el bloque de variables de entorno (ENV) con los datos sensibles ocultos para que podamos ver si hay algún otro problema?

Ahora intenta recuperar los datos, pero rake uploads:migrate_to_s3 sigue dando error