帮助将类别从一个实例迁移到另一个实例,而无需源实例上的管理员

我们的团队一直在另一个 Discourse 实例上以访客身份运行。我们正在搭建自己的 Discourse 实例,并希望将现有实例中的分类迁移到新实例。我们无法访问现有服务器的管理员权限,但管理员愿意为我们进行一次分类导出。但是,此导出不包含任何附件或图片。我们确实拥有对现有实例的 API 访问权限,但仅限于我们的分类。我们拥有新实例的管理员权限。

是否可以使用现有实例的 API 来迁移附件和图片?

我查看了导出的 JSON,附件文件名与浏览器中提供的文件名不同,是随机生成的字符串,这使得通过 API 下载附件和图片并不那么直接。即使我们能够从现有实例下载所有附件,我也不知道如何将它们添加到新实例。这篇帖子让我相信,这就像将它们放入该位置一样简单,并且要求文件名与导出 JSON 中的文件名相同,但这似乎行不通。

有什么想法吗?

1 个赞

您能解释一下这是什么意思吗?

如果您查看 JSON 帖子流的已处理数据,您将获得常规附件 URL。

4 个赞

抱歉,我无法回复,因为我是新用户,我的账户被冻结了。

在导出 JSON 的类别中(使用上面链接的方法),特定帖子中的附件看起来像这样

![image|505x473](upload://yyWAy3WPpjetoctRNL9hmPvNNwm.jpeg

从 API 导出的已处理 JSON 中,同一个图像具有以下 URL

https://my.server.com/uploads/default/original/2X/f/f23d29caba9a31b2b63b93f4104d746623703ca2.jpeg

文件名之间似乎没有关联。鉴于这些信息,我可以使用 API 来获取不包含在导出中的附件。但我不知道该给它起什么文件名,以及将其放在新服务器的哪个位置。

一旦解决了这个问题,在迁移后渲染的主题页面加载时,附件是否有可能像以前一样显示。

1 个赞

如果我通过 API 查看已发布的(例如 ),我会看到图片的完整 URL。

但我认为您可能在寻找这个:

2 个赞

我将提供一个适用于我尚未在生产环境中测试过的测试实例的解决方案。

这供将来的我转交给实际进行迁移的团队或任何需要类似内容的人。

附件应使用长名称,该长名称可以通过 Converting short upload URLs to full URLs 中的 Python 脚本从 JSON 中的短名称转换而来。

附件应放置在 discourse/public/uploads/tombstone/default/original/

然后在 /var/discourse/ 中运行 uploads:recover_from_tombstone

3 个赞