La restauration échoue en raison d'un échec de migration S3

Nous hébergeons notre propre base de données Discourse et nous essayons de migrer vers un nouveau serveur.

Les deux côtés (ancien et nouveau) sont mis à jour vers la dernière version de Discourse (une reconstruction de l’application a été effectuée des deux côtés avec quelques minutes d’écart) et la migration vers le nouveau PostgreSQL a été effectuée avec succès sur l’ancien serveur il y a quelques jours. Je pense pouvoir exclure ces éléments comme source de nos problèmes.

Tous nos fichiers téléchargés sont stockés sur un stockage d’objets compatible S3 (Digitalocean Spaces), donc sur le papier, la migration devrait être simple. Je pensais que si la partie “messages et catégories” de la restauration fonctionnait bien, alors les liens vers les téléchargements S3 devraient simplement fonctionner, n’est-ce pas ?

Faux. Chaque fois que j’effectue la restauration de notre sauvegarde sur le nouveau serveur, la partie messages se déroule à 100 % sans problème, mais ensuite elle échoue sur la partie S3.

Voici l’erreur que nous voyons.

Reconnexion à la base de données...
Chargement des paramètres du site...
Désactivation des e-mails sortants pour les utilisateurs non membres du personnel...
Exécution de seed fu...
Désactivation du mode lecture seule...\nEffacement du cache des catégories...
Chargement des traductions...
Remappage des téléchargements...
Restauration des téléchargements, cela peut prendre un certain temps...
Migration des téléchargements vers S3 pour 'default'...
Téléchargement des fichiers vers S3...
 - Liste des fichiers locaux
 => 3 fichiers
 - Liste des fichiers S3
..................................................................................................................................................... => 148892 fichiers
 - Synchronisation des fichiers vers S3
...
Mise à jour des URL dans la base de données...
Suppression des anciennes images optimisées...
Marquage de tous les messages contenant des lightboxes pour rebake...
29368 messages ont été marqués pour un rebake
EXCEPTION : rake posts:missing_uploads a identifié 2274 problèmes. La migration S3 a échoué pour la base de données 'default'.
/var/www/discourse/lib/file_store/to_s3_migration.rb:132:in 'FileStore::ToS3Migration#raise_or_log'
/var/www/discourse/lib/file_store/to_s3_migration.rb:104:in 'FileStore::ToS3Migration#migration_successful?'
/var/www/discourse/lib/file_store/to_s3_migration.rb:384:in 'FileStore::ToS3Migration#migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:59:in 'FileStore::ToS3Migration#migrate'
/var/www/discourse/lib/file_store/s3_store.rb:372:in 'FileStore::S3Store#copy_from'
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:69:in 'BackupRestore::UploadsRestorer#restore_uploads'
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:49:in 'BackupRestore::UploadsRestorer#restore'
/var/www/discourse/lib/backup_restore/restorer.rb:179:in 'BackupRestore::Restorer#restore_uploads'
/var/www/discourse/lib/backup_restore/restorer.rb:72:in 'BackupRestore::Restorer#run'
script/discourse:242:in 'DiscourseCLI#restore'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/thor-1.5.0/lib/thor/command.rb:28:in 'Thor::Command#run'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/thor-1.5.0/lib/thor/invocation.rb:127:in 'Thor::Invocation#invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/thor-1.5.0/lib/thor.rb:538:in 'Thor.dispatch'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/thor-1.5.0/lib/thor/base.rb:585:in 'Thor::Base::ClassMethods#start'
script/discourse:396:in '<top (required)>'
/usr/local/lib/ruby/gems/3.4.0/gems/bundler-4.0.11/lib/bundler/cli/exec.rb:61:in 'Kernel.load'
/usr/local/lib/ruby/gems/3.4.0/gems/bundler-4.0.11/lib/bundler/cli/exec.rb:61:in 'Bundler::CLI::Exec#kernel_load'
/usr/local/lib/ruby/gems/3.4.0/gems/bundler-4.0.11/lib/bundler/cli/exec.rb:24:in 'Bundler::CLI::Exec#run'
/usr/local/lib/ruby/gems/3.4.0/gems/bundler-4.0.11/lib/bundler/cli.rb:504:in 'Bundler::CLI#exec'
/usr/local/lib/ruby/gems/3.4.0/gems/bundler-4.0.11/lib/bundler/vendor/thor/lib/thor/command.rb:28:in 'Bundler::Thor::Command#run'
/usr/local/lib/ruby/gems/3.4.0/gems/bundler-4.0.11/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in 'Bundler::Thor::Invocation#invoke_command'
/usr/local/lib/ruby/gems/3.4.0/gems/bundler-4.0.11/lib/bundler/vendor/thor/lib/thor.rb:538:in 'Bundler::Thor.dispatch'
/usr/local/lib/ruby/gems/3.4.0/gems/bundler-4.0.11/lib/bundler/cli.rb:35:in 'Bundler::CLI.dispatch'
/usr/local/lib/ruby/gems/3.4.0/gems/bundler-4.0.11/lib/bundler/vendor/thor/lib/thor/base.rb:584:in 'Bundler::Thor::Base::ClassMethods#start'
/usr/local/lib/ruby/gems/3.4.0/gems/bundler-4.0.11/lib/bundler/cli.rb:29:in 'Bundler::CLI.start'
/usr/local/lib/ruby/gems/3.4.0/gems/bundler-4.0.11/exe/bundle:28:in 'block in <top (required)>'
/usr/local/lib/ruby/gems/3.4.0/gems/bundler-4.0.11/lib/bundler/friendly_errors.rb:118:in 'Bundler.with_friendly_errors'
/usr/local/lib/ruby/gems/3.4.0/gems/bundler-4.0.11/exe/bundle:20:in '<top (required)>'
/usr/local/bin/bundle:25:in 'Kernel#load'
/usr/local/bin/bundle:25:in '<main>'
Tentative de rollback...
Rollback en cours...
Nettoyage...
Suppression des fonctions du schéma discourse_functions...
Suppression du répertoire tmp '/var/www/discourse/tmp/restores/default/2026-08-11-075958'...
Reprise de sidekiq...
Marquage de la restauration comme terminée...\nNotification à 'system' de la fin de la restauration...
Terminé !
[ÉCHEC]
Restauration terminée.

J’ai quelques questions :

  • pourquoi cela échoue-t-il alors que, en principe, la configuration de l’environnement S3 que nous avons enregistrée dans la base de données n’a pas changé ?
  • pourquoi cela plante-t-il au lieu de créer une liste des 2274 problèmes qu’il a trouvés avec les téléchargements, que je pourrais gérer d’une manière ou d’une autre ?
  • pourquoi fait-il automatiquement un rollback vers une base de données vide, me laissant au milieu de nulle part ?
  • Y a-t-il un moyen pour moi de reprendre le contrôle, de lui permettre de terminer la restauration avec succès ou au moins de ne pas faire de rollback et de me laisser gérer les problèmes qu’il a trouvés avec les téléchargements ?

Merci beaucoup d’avance pour toute aide !