Старые битые вложения/файлы отображаются в исходном тексте поста как [{file name}|attachment](/uploads/default/original/2X/6/{sha1 hash + extension}). Это преобразуется в href="/uploads/default/original/2X/6/{sha1 hash + extension}", что ломает вложения файлов, но не изображения.
Позже рабочие вложения отображаются как [{file name}|attachment](upload://{sha1 to base62 + extension}) и преобразуются в href="/uploads/short-url/{sha1 to base62 + extension}.
Я написал небольшой код на Ruby, чтобы пройти по всем постам за проблемный период и заменить все старые URL загрузки на новую версию. Я использовал функцию base62_sha1 модели Upload, чтобы преобразовать хеш SHA1 в ожидаемое имя файла, которое ожидают короткие URL в Discourse.
Это заставило вложения работать. Затем я запустил ещё одну перепечку, чтобы подтвердить исправление, и кажется, что всё по-прежнему работает. Похоже, проблема заключалась только в Post.raw и не имела ничего общего с Upload.