Изображения после восстановления не содержат URL S3-бакета

Мы занимаемся разработкой, тестированием и намеренным поиском уязвимостей в нашем форуме на Discourse, прежде чем перенести всё в продакшн. Я только что мигрировал свой тестовый форум с включённой загрузкой в S3 с одного сервера на другой, и после восстановления все URL-адреса для любых вложений были переписаны на URL форума, а не на S3…

К счастью, это тестовый форум, поэтому нам не так важно сохранение данных, однако я хотел бы:
A. Всё же исправить это.

B. Найти способ смягчить или предотвратить подобное в продакшене.

Пострадали не только посты, но и все изображения, медиафайлы, контент и аватары (что довольно серьёзно)…

Есть какие-то идеи?

Перед восстановлением вы можете настроить S3 на целевом сайте в файле app.yml (не через панель администратора). После подтверждения, что настройка выполнена и соединение с нужным бакетом установлено, можно приступать к восстановлению — медиафайлы должны быть корректно связаны.

Инструкция по настройке S3 таким способом доступна здесь: Configure an S3 compatible object storage provider for uploads

Привет, Крис

Мы фактически сделали именно это, и именно так мы попали в эту ситуацию.

Я скопировал app.yml в точности как был в место назначения, а затем сделал резервную копию из оригинала. Проблема возникла при восстановлении: именно в этот момент URL-адреса были переписаны, несмотря на то, что ничего не изменилось, и загрузка в S3 по-прежнему была включена.

В конце концов мы решили эту проблему с помощью ребейка (мы так считаем, кэширование в Discourse очень агрессивное, поэтому среди множества опробованных решений мы точно не знаем, что именно помогло). Однако остаются без ответа вопросы о том, как проводить миграции с минимальными проблемами или даже восстанавливаться из резервной копии, если это потребуется на продакшене.

Похоже, вы настроили S3 через настройки сайта, а не через переменные окружения, как предлагал Крис. Процесс восстановления должен иметь информацию о S3. Сделать это через настройки сайта невозможно.

Вы также можете создать резервную копию без файлов загрузок через консоль, если хотите: discourse backup --sql_only
Восстановление такой резервной копии не изменит URL-адреса загрузок. Поэтому, если ваш новый сервер имеет доступ к тому же бакету S3, этот способ сработает.

Конфигурация S3 находится в файле app.yml, а не в настройках сайта.

Редактирование:

Я понимаю, что объясняю недостаточно подробно, и не хочу скрывать детали.

Мы используем OVH S3, и он настроен в файле app.yml.

Я сделал резервную копию нашего тестового форума без загрузок, но на тот момент S3 всё ещё был включён.

Затем я восстановил его на новом сайте с тем же самым файлом app.yml, и именно тогда возникла проблема. Чтобы прояснить: сейчас всё исправлено, но я не уверен, было ли это из-за того, что я несколько раз пересоздавал образ, или из-за агрессивного кэширования Discourse. Вот почему мне нужно знать, как правильно это делать, чтобы всё работало с первого раза. Я боюсь, что если когда-нибудь понадобится восстановить резервную копию на производственный экземпляр и мы столкнёмся с этой проблемой, мне нужно будет знать, как быстро её исправить, прежде чем пользователи это заметят.