J’étais en train de migrer notre instance Discourse d’un serveur à un autre, et je suis tombé sur un problème intéressant…
Nous utilisons S3 pour stocker les téléchargements du forum. Nous les avons activés il y a plusieurs années, ce n’est donc pas quelque chose que nous avons introduit dans cette migration.
Après avoir résolu quelques autres problèmes, j’ai pu importer la sauvegarde. Mais cela a échoué à une étape liée à S3 avec le message suivant :
Mise à jour des URL dans la base de données...
Suppression des anciennes images optimisées...
Marquage de tous les posts contenant des lightboxes pour un nouveau rendu...
72038 posts ont été marqués pour un nouveau rendu
EXCEPTION : 257 posts ne sont pas remappés vers la nouvelle URL de téléchargement S3. La migration S3 a échoué pour la base de données 'default'.
Après avoir creusé un peu, j’ai pu remonter le problème jusqu’à cette ligne :
Ensuite, je suis allé dans la console Rails et j’ai pu reproduire les requêtes avec ce qui suit :
discourse(prod)> SiteSetting.cdn_path("/uploads/#{@current_db}/original").sub(/https?:/, "")
=> "/uploads//original"
discourse(prod)> RailsMultisite::ConnectionManagement.current_db
=> "default"
discourse(prod)> cdn_path = SiteSetting.cdn_path("/uploads/default/original").sub(/https?:/, "")
=> "/uploads/default/original"
discourse(prod)> Post.where("cooked LIKE '%#{cdn_path}%'")
=> ...
Ensuite, je suis allé voir ces posts particuliers, et ils faisaient partie des rapports de performance (la capture d’écran est après que j’aie exécuté un script de recherche et remplacement) :
Apparemment, cette vérification récupère tout post contenant /uploads/default/original dans le champ cooked, même si ce n’est pas un actif légitime. Dans ce cas, /uploads/default/original a été utilisé comme “texte brut”, il n’a donc pas été manqué pendant le travail de migration.
Je ne sais pas si c’est attendu ?
Merci !
