Наша команда работала как гость на другом экземпляре Discourse. Мы разворачиваем собственный экземпляр Discourse и хотим перенести категории с существующего экземпляра на новый. У нас нет доступа администратора к существующему серверу, но администраторы готовы сделать экспорт категорий для нас. Однако этот экспорт не содержит никаких вложений или изображений. У нас есть доступ к API существующего экземпляра, но только к нашим категориям. На новом экземпляре у нас есть доступ администратора.
Возможно ли перенести вложения и изображения, используя только API существующего экземпляра?
Я изучил экспортированный JSON, и имена файлов вложений представляют собой различные случайные строки, отличные от тех, что отображаются в браузере, что делает обратную разработку API для загрузки вложений и изображений не такой простой. Даже если мы сможем загрузить все вложения с существующего экземпляра, я не уверен, как добавить их на новый экземпляр. Этот пост заставляет меня поверить, что это так же просто, как поместить их в это место при условии, что имена файлов идентичны тем, что указаны в экспортированном JSON, но это, похоже, не работает.
Между именами файлов, по-видимому, нет никакой связи. С учётом этой информации я могу использовать API для получения вложений, которые не включены в экспорт. Однако я не уверен, какое имя файла указать и куда разместить файл на новом сервере.
После того как этот вопрос будет решён, возможно ли будет отображать вложения на отрисованных страницах тем при их загрузке, как это было до миграции?
Сообщаю о решении, которое работает на тестовом экземпляре, но я ещё не пробовал его на продакшене.
Это запись для меня на будущее, чтобы передать команде, которая будет заниматься миграцией, или любому другому, кому понадобится что-то подобное.
К вложениям следует применять полное имя, которое можно преобразовать из краткой формы в JSON с помощью Python-скрипта по ссылке: Converting short upload URLs to full URLs
Вложения следует разместить в discourse/public/uploads/tombstone/default/original/.
Затем выполните команду uploads:recover_from_tombstone, находясь в каталоге /var/discourse/.