Нужно перенести данные из одного экземпляра Discourse в другой?
Существует инструмент командной строки для экспорта темы, набора тем или целой категории, а также другой инструмент для их импорта на стороне получателя.
Экспорт/импорт тем
- одна или несколько тем и их ответы
- пользователи, публиковавшие сообщения в теме
Экспорт/импорт категорий
- категория и все её подкатегории
- настройки безопасности
- пользовательские группы, указанные в настройках безопасности
если у какой-либо группы включены «запросы на вступление», процесс завершится ошибкой. Отключите эту функцию перед экспортом
- все темы и сообщения в категории и подкатегориях
- все пользователи, публиковавшие сообщения, и они будут назначены в соответствующие группы
Начало: Определите идентификаторы
Сначала определите ID(ы) =Экспорта=, который вы хотите экспортировать. Его можно найти в конце URL-адреса, используемого для доступа к нему.
-
https://meta.discourse.org/t/how-to-contribute-to-discourse/53797 -
https://meta.discourse.org/t/how-to-contribute-to-discourse/53797/12
(в этом случае вы находитесь в середине темы — возьмите первое число) -
https://meta.discourse.org/c/howto/faq/4
Идентификатор(ы) категории или темы
Несколько тем
Вы можете выбрать более одной темы, добавив идентификаторы через пробел; это работает в поле выше (хотя, я думаю, это не работает для категорий):
53797 200943 124096
Запуск скрипта экспорта
Инструмент можно запускать от имени пользователя root внутри контейнера:
cd /var/discourse
./launcher enter app
Выполните эту команду:
discourse export_=Export= =ID=
Вывод должен выглядеть примерно так:
Starting export of =Export=…
Where are the new users all coming from?
Export saved to =Export=-export-2021-08-27-015437.jsonDone
Перемещение экспортированного файла
Экспортированный файл .json необходимо переместить изнутри контейнера приложения, где выполнялся экспорт, внутрь контейнера экземпляра-получателя. Это требует нескольких шагов.
Копирование его на «внешнюю» сторону
Выйдите из контейнера, если ещё не сделали этого
exit
Теперь у вас должен быть приглашение вида:
root@yourserver:/var/discourse
Используйте docker для копирования файла из контейнера (я думаю, переместить его нельзя)
docker cp app:/var/www/discourse/=FileName= .
Перемещение его на другой экземпляр
Это выходит за рамки данного руководства, но это может помочь вам в этом:
Копирование его в контейнер на экземпляре-получателе
Подключитесь по SSH к вашему экземпляру-получателю от имени root и перейдите в каталог Discourse:
cd /var/discourse
Ещё раз используйте docker для копирования файла в другой контейнер
docker cp =FileName= app:/var/www/discourse
Импорт контента
Войдите в контейнер на экземпляре-получателе:
./launcher enter app
Запустите скрипт импорта
discourse import_=Export= =FileName=
Готово!
Возможно, вам придётся подчистить некоторые мелкие детали, но, надеюсь, всё будет сделано.
Дополнительные советы
Отсутствующий Ruby Gem
При выполнении сложного импорта категории в моём экземпляре отсутствовал Ruby ‘Listen’.
Это было решено следующим образом: (используя пользователя discourse внутри контейнера)
./launcher enter app
su discourse
bundle config --delete without
bundle config --delete with
bundle install
exit
exit
Это привело к поломке rails console, что потребовало пересборки после этого
./launcher rebuild app
Мультисайт
В среде мультисайта используйте переменную окружения RAILS_DB.
RAILS_DB=xxxmoves discourse export_=Export= =ID=
RAILS_DB=dancerehab discourse import_=Export= =FileName=
Пожалуйста, сообщайте об ошибках в категории Contribute > Bug и запрашивайте улучшения в категории Contribute > Feature.
Связанные темы
Последний раз проверено @SaraDev 2022-07-13T00:00:00Z