# 清理旧主题

**URL:** https://meta.discourse.org/t/clean-up-old-topics/253862
**Category:** Support
**Created:** [2023年二月2日 17:08 UTC](https://meta.discourse.org/t/clean-up-old-topics/253862 "2023-02-02T17:08:36Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![gjsman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/gjsman/32/213853_2.png) [@gjsman](https://meta.discourse.org/u/gjsman)
#### Post date: [2023年二月2日 17:08 UTC](https://meta.discourse.org/t/clean-up-old-topics/253862/1 "2023-02-02T17:08:36Z")

</div>

您好，

我们面向高中生的 Discourse 站点非常成功。过于成功了。自 2021 年 1 月启动以来，我们在过去两年中已发布了 230 万个帖子和 290 万个点赞。

我们希望稍微清理一下场地，以节省成本，并降低被黑客攻击或类似风险的长期风险。重新开始会很痛苦，但发现将 `/print` 添加到主题 URL 的末尾即可生成用于 PDF 的 1000 条评论页面，这很有帮助。我们找不到（而且我非常怀疑）是否存在任何干净的方法可以删除，例如，最旧一年份的主题。

有什么想法吗？我们需要重新开始，还是有其他选择？

Gabriel Sieben

---

<div class="post-metadata">

### Author: ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)
#### Post date: [2023年二月2日 17:41 UTC](https://meta.discourse.org/t/clean-up-old-topics/253862/2 "2023-02-02T17:41:17Z")

</div>

您好！很高兴知道 Discourse 在您的项目中效果非常好 😃 👍

> [@gjsman](#):
>
> 我们找不到（而且我真的很怀疑）任何干净的方法来删除，比如说，最旧一年的帖子。

只是为了确保我理解正确；您删除帖子的标准仅仅是它的年龄吗？

界面中没有内置功能可以实现这一点，但您可以创建一个并手动触发一个 rails 脚本来删除早于特定日期的帖子。

> [@Bulk delete all topics in a category](https://meta.discourse.org/t/bulk-delete-all-topics-in-a-category/97904#common-questions-4):
>
> bookmark This guide provides instructions on how to bulk delete all topics within a category on a self-hosted Discourse instance. person_raising_hand Required user level: System Administrator warning SSH access to your server is required Removing all topics from a category can be necessary for various reasons, such as reorganizing content or clearing outdated discussions. This guide walks you through the steps to accomplish this task safely on a self-hosted Discourse server. …

```ruby
Topic.where("created_at.....").destroy_all

```

方括号内是一个 SQL 查询。

---

<div class="post-metadata">

### Author: ![gjsman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/gjsman/32/213853_2.png) [@gjsman](https://meta.discourse.org/u/gjsman)
#### Post date: [2023年二月2日 17:42 UTC](https://meta.discourse.org/t/clean-up-old-topics/253862/3 "2023-02-02T17:42:01Z")

</div>

> [@Canapin](#):
>
> 只是为了确保我理解正确；您将主题符合删除条件的唯一标准是其年龄？
> 
> 界面中没有内置功能可以实现这一点，但您可以创建一个并手动触发一个 Rails 脚本，该脚本将删除早于特定日期的主题。

正确，如果这不会导致到处出现断链和上下文混乱。我希望任何引用都不会受到影响。

> [@Canapin](#):
>
> 括号之间是一个 SQL 查询。

这会清理上传的文件吗？

---

<div class="post-metadata">

### Author: ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)
#### Post date: [2023年二月2日 18:00 UTC](https://meta.discourse.org/t/clean-up-old-topics/253862/4 "2023-02-02T18:00:41Z")

</div>

> [@gjsman](#):
>
> 我希望任何引用都不会受到影响。

引用的内容将保留。  
至于指向已删除主题的内部链接，它们将导致“未找到”页面。

> [@gjsman](#):
>
> 这会清理上传的文件吗？

是的，上传的文件默认将在 2 天后删除（除非它们在其他地方使用，例如在另一个主题的引用中），请参阅 **clean orphan uploads grace period hours** 设置。

但请注意，主题和帖子是软删除的。它们被隐藏，但仍存储在数据库中。

* * *

我补充一点，我说的可能不完全准确……最好等一个更有经验的用户来回复。 🙂

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2023年二月2日 20:48 UTC](https://meta.discourse.org/t/clean-up-old-topics/253862/5 "2023-02-02T20:48:19Z")

</div>

您以后可以做的一件事是开启聊天功能，我猜这占了大部分内容，特别是如果您想删除它的话。这样内容就会自动清理（我认为默认是 90 天，这可能足够了）。

而且，那些旧的内容都不重要吗？如果有些重要，您打算如何保留好的内容？按类别吗？

看起来 `Topic.destroy` 会调用 `PostDestroyer`，所以我想销毁这些主题应该能达到您想要的效果。

我建议您在生产服务器上执行此操作之前，先设置一个测试站点进行一些测试。

不过，我可能会考虑创建一组 Discourse 站点，也许每个毕业班一个，这样到时就可以直接关闭它们。您也可以为全校性的内容设置一个单独的站点，并让它们共享一个身份验证服务器（要么是全校性的 Discourse，要么是您学校/学区使用的身份验证服务器）。哦，或者这只是针对高中生，而不是一所高中。所以这个重组可能没有意义。
