将主题从一个 Discourse 实例移动到另一个

我一直想解决上传文件迁移的问题,已经惦记很久了,现在借助 LLM 的帮助终于搞定了。分享我的笔记给关注这个话题的朋友们!Jay 在上面的帖子中包含了启动这项任务所需的关键诀窍,非常感谢他。

我最初尝试的方法完全符合 Jay 的预测。如果你创建一个包含源站点图片 URL 的列表,并将其粘贴到新站点的帖子中,这些图片就会被下载。要实现这一点,必须启用 Download remote images to local 选项。

我的 LLM 为此生成了一个脚本,我在这里分享出来,供后来者参考。

摘要

在 Rails 控制台中运行以下代码:

topic = Topic.find(=TOPIC_ID=)
posts = Post.where(topic_id: topic.id)
urls = []

posts.each do |p|
  UploadReference.where(target: p).each do |ref|
    urls << "=SOURCE_URL=#{ref.upload.url}"
  end
end

puts urls.uniq.join("\n")
puts "\nTotal: #{urls.uniq.count} upload(s)"

:bulb: 想迁移整个分类吗? 将前两行替换为:

topic_ids = Topic.where(category_id: =TOPIC_ID=).pluck(:id)
posts = Post.where(topic_id: topic_ids)

在这种情况下,=TOPIC_ID= 是你的分类 ID,可以在 Admin → Categories 中该分类 URL 的末尾找到。

然而,对我来说这还不够,因为我还有 PDF 文件,而 PDF 文件不会自动下载到本地。

所以我让 LLM 为我编写了一个用于迁移上传文件的 Python 脚本。它运行得相当不错,所以我愿意分享它。如果你想尝试或提供反馈,这里是仓库地址:tobias/discourse-upload-migrator - Digitally Sovereign Forgejo: Digitally Sovereign, for the win!

我还让 LLM 为我编写了一份关于迁移主题或分类的更完整的操作手册,它已经发布在我的 discourse 上:https://digitallysovereign.org/t/move-topics-or-categories-between-discourse-instances/742?u=tobias

2 个赞