Ассеты S3 повреждены после переноса форума

Привет,

Мне пришлось перенести заброшенный форум Discourse. К счастью, у нас было несколько администраторов, поэтому это удалось сделать и создать резервную копию. Для наших ресурсов мы использовали бакет S3, что создало определённые проблемы. Я хочу подать запрос на новую функцию:

Сделать возможным включение ресурсов S3 в резервные копии

Я обнаружил (не уверен, до или после пересборки сообщений), что URL-адреса ресурсов S3 были переписаны на внутренние. Поэтому я извлёк все original и optimized URL-адреса S3 из файла базы данных и загрузил их (почти) вручную. После перемещения их в нужное место все отсутствующие изображения отобразились. … Было бы здорово иметь автоматическую функцию для этого.

На данный момент я столкнулся с тремя ошибками:

  1. Сломанные миниатюры, но увеличенные изображения работают
  1. Миниатюры работают, но нет возможности увеличить изображение при наведении курсора
  • /t/microlongrange-openhd-edition/379 … Я могу добавить только две ссылки в своём первом сообщении
  1. Граватары не работают (возможно, это не связано):
    -

В новых сообщениях проблем не обнаружено.

Спасибо за этот замечательный проект,
Limitless Green

Звучит как ошибка конфигурации, а не баг. Вы настроили тот же бакет S3 на новом хосте перед восстановлением?

Я восстановил резервную копию, которая также содержит конфигурацию. После этого (и принудительного включения HTTPS) картинки из бакета S3 вообще не отображаются.

Теперь я полностью удалил конфигурацию S3.

Разве это не полная перезапись конфигурации?

За исключением конфигурации S3, если она ранее настраивалась через переменные окружения в app.yml

Существует скрытая настройка, которая делает именно это. Cdck включает её для клиентов, которые планируют перенос своего хостинга.

Конфигурацию S3 лучше всего выполнять через переменные окружения, как описано в Использование объектного хранилища для загрузки файлов (S3 и клоны).

После восстановления я настроил параметры в: s3 upload bucket и s3 cdn url.
У меня нет доступа к файлу app.yml (старого сервера).

О, здорово! :grinning: Где?
Единственный подходящий вариант в разделе backup, который я нашёл, это:
grafik
(который был отмечен)

Не уверен, что я ясно выразился: мне пока не нужен S3. И мне пришлось оттуда получить ассеты. Никто не знает, как долго этот сервер будет работать. :sweat_smile:

Если у вас нет доступа к серверу через SSH, вы не сможете изменить скрытый параметр.

Хорошо. И что теперь нужно сделать в моем случае?
Что может привести к такому некорректному предпросмотру изображения?

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

Но, думаю, дело обстоит иначе. И не совсем ясно, в чём именно могут быть проблемы, так как даже вы не помните точно, что и когда делали.

Если что-то отсутствует (и у вас есть учетные данные S3), я бы попробовал использовать какой-нибудь инструмент S3 для загрузки всех файлов загрузок, а затем вручную поправить базу данных, чтобы она указывала на них. Но я недостаточно хорошо разбираюсь в этом, чтобы подробно объяснить здесь, как это сделать.

Да, к сожалению, у меня нет учетных данных S3 :frowning:

Я могу воспроизвести шаги:

  1. Установил новый форум Discourse с использованием discourse_docker за Traefik
  2. Создал резервную копию старого форума (включая некоторые старые ресурсы)
  3. Восстановил резервную копию на новом форуме
  4. Принудительно включил HTTPS
  5. Извлек URL-адреса ресурсов из файла dump.sql (из резервной копии)
  • egrep -o 'discuss-openhdfpv.eu-central-1.linodeobjects.com\/original\/1X\/[0-9a-z_]{0,}\.[0-9a-zA-Z]{0,}' ./dump.sql >> original.txt
  • egrep -o 'discuss-openhdfpv.eu-central-1.linodeobjects.com\/optimized\/1X\/[0-9a-z_]{0,}\.[0-9a-zA-Z]{0,}' ./dump.sql >> optimized.txt
  1. Загрузил ресурсы: cat optimized.txt | parallel --gnu "wget -nc -P ./optimized/1X/ {}" (то же самое для original)
  2. Удалил конфигурации S3
  3. Выполнил rake posts:rebake

Я могу работать с SQL в базе данных, если знаю, что искать.