Les pièces jointes ou fichiers téléchargés anciens et défectueux s’affichent sous la forme [{nom du fichier}|attachment](/uploads/default/original/2X/6/{hash SHA1 + extension}) dans le texte brut du message. Cela est interprété comme href="/uploads/default/original/2X/6/{hash SHA1 + extension}", ce qui brise les pièces jointes aux fichiers, mais pas les images.
Les pièces jointes fonctionnelles ultérieures apparaissent sous la forme [{nom du fichier}|attachment](upload://{hash SHA1 converti en base62 + extension}) et sont interprétées comme href="/uploads/short-url/{hash SHA1 converti en base62 + extension}".
J’ai écrit un petit code Ruby pour parcourir tous les messages de la période problématique connue et remplacer toutes les anciennes URL de téléchargement par la nouvelle version. J’ai utilisé la fonction base62_sha1 du modèle Upload pour convertir le hash SHA1 en nom de fichier attendu par les URL courtes de Discourse.
Cela a permis de faire fonctionner les pièces jointes. Ensuite, j’ai exécuté un nouveau rebake simplement pour confirmer la correction, et il semble que cela fonctionne toujours. Il semble que le problème résidait uniquement dans Post.raw et n’avait rien à voir avec Upload.