Наконец-то мне удалось заставить это работать на третьей или четвёртой рабочей сессии. Проблема, похоже, заключалась в отсутствующих изображениях в папке «uploads». Решение состояло в том, чтобы создать новую установку, использовать тот же файл «app.yml» и восстановить из резервной копии, добавив фиктивные файлы для отсутствующих изображений.
Параллельно с основной проблемой я заметил, что после предыдущего обновления различные значки и изображения исчезли. Когда я попытался пересобрать систему, в логах было указано, что процесс завершается после «оптимизации изображений сайта». Мне кажется, он застрял на каком-то пропущенном изображении и завершился без записи конкретной ошибки. (Не было никаких указаний на то, что проблема в отсутствующих изображениях, или на то, какие именно файлы изображений отсутствовали).
В итоге я создал новую установку Discourse с последней версией. Я восстановился из резервной копии следуя инструкциям здесь. Это заняло у меня три попытки.
Сначала скрипт резервного копирования выдал ошибку, так как не нашёл загруженные файлы, поэтому я скопировал папку uploads/default из своих предыдущих резервных копий.
Затем я снова запустил скрипт восстановления. На этот раз появилась ошибка о том, что не найден конкретный файл изображения. Я создал фиктивный файл изображения, дал ему то же имя и поместил в указанное место.
Запустил скрипт восстановления в третий раз. И вот оно! Мой сайт был восстановлен из резервной копии и обновлён до последней версии.