需要从一个 Discourse 实例迁移一些内容到另一个实例吗?
有一个命令行工具可以导出主题、一组主题或整个板块,还有一个工具可以在另一端导入它们。
主题导出/导入
- 一个或多个主题及其回复
- 在主题中发帖的用户
板块导出/导入
- 板块及其所有子板块
- 其安全设置
- 安全设置中提到的自定义组
如果任何组启用了“成员申请”,将会崩溃。请在导出之前关闭此功能
- 板块和子板块中的所有主题和帖子
- 所有发帖用户,并将他们分配到相应的组
开始:识别 ID
首先,识别你要导出的 =Export= 的 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
板块或主题 ID
多个主题
你可以通过用空格分隔 ID 来选择多个主题;这在上面的字段中有效(我认为这对板块无效):
53797 200943 124096
运行导出脚本
该工具可以在容器内以 root 用户身份运行:
cd /var/discourse
./launcher enter app
运行此命令:
discourse export_=Export= =ID=
输出应该类似如下:
开始导出 =Export=…
新用户都来自哪里?
导出已保存到 =Export=-export-2021-08-27-015437.json完成
移动导出的文件
导出的 .json 文件需要从执行导出的应用程序容器内部移动到接收实例的容器内部。这需要几个步骤。
复制到“外部”
如果你还没有退出容器,请退出
exit
你现在应该看到如下提示:
root@yourserver:/var/discourse
使用 docker 将文件从容器中复制出来(我认为不能移动它)
docker cp app:/var/www/discourse/=FileName= .
移动到另一个实例
这超出了本指南的范围,但这可能对你有帮助:
复制到接收实例的容器中
以 root 身份 SSH 到你的接收实例并进入 Discourse 目录:
cd /var/discourse
再次使用 docker 将文件复制到另一个容器中
docker cp =FileName= app:/var/www/discourse
导入内容
进入接收实例的容器:
./launcher enter app
运行导入脚本
discourse import_=Export= =FileName=
完成!
你可能需要清理一些遗留问题,但希望一切都能顺利完成。
高级技巧
缺少 Ruby Gem
在进行复杂的板块导入时,我的实例缺少 ‘Listen’ Ruby 库。
这可以通过以下方式解决:(使用容器内的 Discourse 用户)
./launcher enter app
su discourse
bundle config --delete without
bundle config --delete with
bundle install
exit
exit
这破坏了 rails 控制台,之后需要重建
./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 审核