Перенесите темы с одного экземпляра Discourse на другой

Нужно перенести данные из одного экземпляра Discourse в другой?

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

Экспорт/импорт тем

  • одна или несколько тем и их ответы
  • пользователи, публиковавшие сообщения в теме

Экспорт/импорт категорий

  • категория и все её подкатегории
  • настройки безопасности
  • пользовательские группы, указанные в настройках безопасности
    • :warning: если у какой-либо группы включены «запросы на вступление», процесс завершится ошибкой. Отключите эту функцию перед экспортом
  • все темы и сообщения в категории и подкатегориях
  • все пользователи, публиковавшие сообщения, и они будут назначены в соответствующие группы

Начало: Определите идентификаторы

Сначала определите 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.json

Done

Перемещение экспортированного файла

Экспортированный файл .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=

:cake: Готово!

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

Дополнительные советы

Отсутствующий 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

45 лайков
UI: Topic and Category Export/Import
CLI command to migrate a single category
Moving topics between sites?
Category/Topic export fails with error "database "discourse_development" does not exist"
Easiest way to export a single topic?
Saving a Conversation
Migrate user custom fields to another instance
Error Importing Categories from a Discourse Instance to Another
How to export user data from a category on a hosted site
Import CSV User Activity from one Discourse to Another
How use API to convert topic in discourse1.com to discourse2.com
Can sub-forums of the same instance split up and move to new independent servers (or discourse instances)?
Help migrating category from one instance to another without admin on the source instance
I wonder how to add hundreds of users into a group? Is there any api?
Adding default sets of topics, categories and users to a new Discourse
Downloading Content
Can we combine 2 separate discourse sites?
Tracking and resolving a schema drift cause
Merge two Discourse forums into one
Moving topics from a forum on one website to a forum on another website
Transfer topics between forums?
Forum Aquisition
Transfering inbox group messages to another instance?
Transfering inbox group messages to another instance?
Imported categories are not in parent category
Copy categories / topics
How to download Comments and Topics
Selective backups skipping settings and config
Test driving admin/moderation features
Add backup to existing Discourse instance
Merging two Discourse forums
Migrating vBulletin onto existing and live Discourse instance
Migrate topics from one discourse instance to another?
A system where people have to start at lesson 1, and cannot see the other lessons?
How to divide my community into 2 parts