Échec de la restauration des données lors de la migration de Discourse

\n[2026-05-11 02:05:14] Reconnexion à la base de données...\n[2026-05-11 02:05:14] Rechargement des paramètres du site...\n[2026-05-11 02:05:14] Désactivation des e-mails sortants pour les utilisateurs non membres du personnel...\n[2026-05-11 02:05:14] Exécution de seed fu...\n[2026-05-11 02:05:31] Désactivation du mode lecture seule...\n[2026-05-11 02:05:31] Vidage du cache des catégories...\n[2026-05-11 02:05:31] Rechargement des traductions...\n[2026-05-11 02:05:31] Réaffectation des fichiers uploadés...\n[2026-05-11 02:05:31] Restauration des fichiers uploadés, cela peut prendre un certain temps...\n[2026-05-11 02:05:33] EXCEPTION : Vous ne pouvez spécifier qu'une seule somme de contrôle non par défaut à la fois.\n[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'\n/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'\n/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'\n/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'\n/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'\n/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'\n/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'\n/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'\n/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'\n/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'\n/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'\n/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'\n/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'\n/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'\n/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'\n/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'\n/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'\n/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'\n/var/www/discourse/lib/file_store/to_s3_migration.rb:216:in 'block (2 levels) in FileStore::ToS3Migration#migrate_to_s3'\n[2026-05-11 02:05:33] Tentative de retour en arrière...\n[2026-05-11 02:05:33] Retour en arrière en cours...\n[2026-05-11 02:05:34] Nettoyage...\n[2026-05-11 02:05:34] Suppression des fonctions du schéma discourse_functions...\n[2026-05-11 02:05:34] Suppression du répertoire temporaire '/var/www/discourse/tmp/restores/default/2026-05-11-020447'...\n[2026-05-11 02:05:34] Réactivation de sidekiq...\n[2026-05-11 02:05:34] Marquage de la restauration comme terminée...\n[2026-05-11 02:05:34] Notification à 'niege' de la fin de la restauration...\n\nComment résoudre ce problème ?

Je pense qu’il y a peut-être un problème avec la compatibilité S3 ?

L’instance vers laquelle vous effectuez la restauration est-elle à jour avec la dernière version de Discourse ?

Je pense qu’il y a un problème ici :
/var/www/discourse/lib/file_store/to_s3_migration.rb
peut-être avec la charge utile envoyée à put_object à la ligne 216.

Je ne suis pas sûr de la solution complète, mais pour que cela fonctionne, vous devrez peut-être désactiver S3 (enable_s3_uploads: false) et effectuer la restauration et l’extraction localement. Ensuite, réactivez S3 en utilisant la commande rake uploads:migrate_to_s3 ?

@Lilly
Le serveur arrivant à expiration, nous devons le migrer vers un nouveau serveur. J’ai d’abord sauvegardé les données de Discourse.
Synchronisez le fichier app.yml vers le nouveau serveur, puis sur ce dernier exécutez :

./launcher rebuild app

Ensuite, téléversez la sauvegarde des données dans le répertoire /var/discourse/shared/standalone/backups/default du nouveau serveur.
Utilisez les commandes suivantes :

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

La restauration a échoué. Après avoir recréé une nouvelle instance de Discourse, j’ai tenté une restauration depuis l’interface d’administration, mais cela a de nouveau échoué. Vous trouverez ci-joint le journal de la restauration.
log.txt (124.0 KB)

Parlez-nous de votre environnement, par exemple quel magasin d’objets utilisez-vous ?

Ubuntu 24.04.4 LTS (x86_64)

Cloudflare R2