如何删除论坛上的所有内容,只保留用户?

这是迄今为止最快、最简单的方法。
根据 @JammyDodger 的建议,从 /admin/users/list/active 下载你的用户列表,下载 CSV 文件,清理它只保留电子邮件地址,然后从新的 Discourse 安装中通过你的管理界面进行批量邀请。你的用户将不得不重新创建账户。

如果你想删除除某些用户之外的所有数据,没有简单的方法可以做到,我只能想到尝试可能会导致论坛损坏。

如果你想导出大部分用户的数据(他们自己的设置等),那也会很困难,并且需要创建一个 ruby on rails 脚本。此外,你可能会遇到我没有想到的问题。如果你不确定如何操作,我建议你坚持第一个解决方案,或者如果你有预算,可以在 Marketplace 中发帖。

1 个赞

这是真的。但如果你想冒险,可以试试这个:

./launcher enter app
discourse backup
rails c
Topic.where("user_id > 1").destroy_all
Upload.where("user_id > 1").destroy_all
exit
exit

我认为删除帖子应该会删除帖子,但你也可以添加一个

 Post.where("user_id > 0").destroy_all

> 1 将会保留由第一个用户创建的主题。如果你也想删除它们,请将其更改为 > 0,这将保留由 @system 创建的主题。我认为如果你删除了那些,你会非常后悔。

这会在销毁一切之前创建一个备份。

这几乎肯定是个坏主意,但这就是你要求的。

1 个赞

确实如此!为此有 PostDestroyer 类,它执行了许多必要的额外清理工作。

@xebiyen 你可以使用这个 rake 任务来销毁所有类别中的所有主题,但保留类别和用户不变:

$ ./bin/rake destroy:topics_all_categories
4 个赞

太棒了,我不知道这个 rake 任务。它会删除“关于”主题吗,那将是一个不希望产生的副作用?

不,它使用的方法默认情况下会忽略那些,而 rake 任务不会改变该默认设置:

:rainbow:

1 个赞

感谢您确认。我想确保一下,因为我上次使用时,Administrative Bulk Operations 上列出的其他一些推荐方法会产生不希望的副作用。

我曾用一种方法将帖子从一个类别移动到另一个类别,但它将“关于”帖子与常规帖子一起移动了。不过,我可能使用了 rails 脚本而不是 rake 任务。我不确定。:thinking:

我还使用了“将带有特定标签的所有帖子移动到单个类别” rake 方法,该方法未正确填充数据库中与标签相关的某些表。


编辑:哦,今天是我的生日!但愿蛋糕是真的… 但也许是真的呢?

2 个赞

谢谢!我忘了这个类,也不知道有这个 rake 任务(或者不记得忘了它!)

2 个赞

在此命令之前,我应该使用什么命令?

@pfaffman @Canapin @leonardo 他的命令是最好的解决方案吗?

您可以自己尝试,但请先进行备份。
在命令行中转到您的 discourse 文件夹。
使用 ./launcher enter app 进入容器。
然后输入 rake destroy:topics_all_categories

观看实际操作 (我的测试实例非常慢)

4 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.