После 4–5 лет использования я наконец решил вернуть свои загрузки из бакета AWS S3 на свой локальный сервер для очень небольшого локального сайта.
Как человек с ограниченными знаниями, я поручил эту задачу своему другу за весьма разумную сумму. Он настроил сайт для локальных загрузок, но каким-то образом почти половина из 3000 изображений (около 50%) потеряла связь с источником. Друг не взял с меня денег и попросил откатить сайт к резервной копии (которая была создана до передачи ему контроля 11/апр/2025).
В любом случае, я ленился около месяца и не откатывался. Пока наконец не решил исправить ситуацию с помощью бота-помощника Discourse/ChatGPT AI Bot. Я создал ещё одну версию своего старого сайта локально на своём ноутбуке под Ubuntu.
Мне удалось создать экземпляр моего оригинального сайта на ноутбуке, просто добавив «t.» перед именем оригинального домена. Теперь этот (называемый staging-сайтом) работает у меня полностью нормально, но содержит активность только до 11/апр/2025.
А мой продакшн-сайт, где все данные актуальны, имеет сотни постов без изображений.
Обратите внимание: я пробовал множество rake-задач для миграции или переподключения отсутствующих ссылок на изображения, но без успеха.
После того как я бился головой почти месяц, мой вывод таков: сырые посты в Ruby одинаковы и на staging, и на продакшн. Однако обработанные (cooked) посты различаются. То есть таблица базы данных моего продакшн-сайта, вероятно, потеряла связь с фактическими физическими изображениями на сервере.
Я также заметил, что без этой связи такие «осиротевшие» изображения автоматически удаляются с сервера. Но, к счастью, я снова копирую их через rsync со staging-сервера или из бакета S3 на продакшн-сервер.
Наконец, проблема, сформулированная, так сказать, ChatGPT: на staging-сервере, возможно, хранятся финальные обработанные версии, которые не имеют отношения к (коротким) сырым URL. А продакшн, у которого отсутствуют URL финальных обработанных версий изображений, не может получить правильные URL этих изображений и возвращается к использованию «прозрачных» заглушек.
И ChatGPT предлагает мне скопировать обработанные версии из постов staging-сайта в обработанные версии постов продакшн-сайта. Что, на мой взгляд, не кажется очень хорошей идеей.