Уважаемые коллеги,
После того как я тщательно изучил форум, но не нашел решения, обращаюсь за помощью в связи с необычной ситуацией, возникшей после недавнего переноса дата-центра Digital Ocean.
Изначально все наши загруженные файлы хранились в бакете Digital Ocean Spaces в дата-центре ams3. После двух крупных аппаратных сбоев и последующего прерывания работы сервиса в течение чуть более месяца, в прошлые выходные мы решили перенести все файлы в дата-центр fra1.
Вот шаги, которые я предпринял:
- В рамках подготовки к переносу я загрузил все файлы из ams3 (три классических директории: originals, optimized и tombstone) в новый бакет в fra1 с помощью утилиты s3cmd.
- Зашел в настройки форума и указал новый эндпоинт для вложений, CDN-бакета и резервного копирования.
- Запустил полную пересборку постов (full post rebake), рассчитывая, что это исправит все проблемы за один раз.
К сожалению, это не сработало. Большинство вложений были перенесены корректно, но несколько сотен — нет. Мне не до конца ясно, что произошло, но эти отсутствующие вложения оказались перемещенными в директорию tombstone.
Я думал, что запуск задачи rake uploads:recover_from_tombstone решит проблему, но нет. Файлы обнаруживаются, однако по завершении задачи ни одно вложение не восстанавливается, изображения в постах по-прежнему не отображаются.
Я начал копать глубже и выяснил, что запуск команды UploadRecovery.new(dry_run: true).recover (найденной в процессе изучения метаданных) в консоли Rails дает ценную информацию, такую как URL поста, а также короткий или длинный URL проблемного изображения.
Для URL, возвращаемых в коротком формате, я написал небольшой скрипт на Python, чтобы «перевести» короткое имя загруженного файла в длинный формат, что позволило мне проверить наличие файла в бакете.
Я это сделал, и могу подтвердить: все отсутствующие файлы на месте, как в новом, так и в старом бакете. Часть отсутствующих загрузок, как и ожидалось, находится в директории tombstone, но некоторые другие странно остались в директории original. Файлы не повреждены. Если открыть их по ссылке, они корректно загружаются в обоих дата-центрах, а при локальном сохранении на мой Linux-компьютер открываются без ошибок.
Каким-то образом процесс восстановления загрузок не может их обработать и исправить проблемы в базе данных. ![]()
Итак, мои вопросы:
- Можно ли понять, почему задача rake не может восстановить вложения, даже если файлы находятся в
tombstone(или вoriginal)? - Какие правильные шаги необходимо выполнить, чтобы гарантировать, что при смене бакета или переходе с Digital Ocean на другую среду, совместимую с AWS, все вложения будут перенесены и корректно подготовлены к переключению? Более общо: что именно нужно делать шаг за шагом в таком случае? Очевидно, что простой пересборки (rebake) недостаточно.

- Что делает задача
posts:invalidate_broken_images? Что именно означает термин invalidate?
Заранее спасибо. Я уже неделю бьюсь над этой проблемой, и мне очень нужно наконец ее решить, иначе я сойду с ума
![]()
P.S. Предложение вручную перезагрузить все 800+ вложений не рассматривается как валидный ответ. Должна быть какая-то алгоритмическая причина… :laugh: