永久删除错误

我认为永久删除存在一个错误。

我删除了几篇帖子。现在我无法打开已删除帖子的列表。

你可以在这里看到我仍然有 342 篇已删除的帖子。但当我点击它时。它会导向一个 404 页面。

我仍然可以打开其他用户的删除列表,但无法打开我自己的。

有什么我们可以做的来解决这个问题吗?

3 个赞

好的,我想我已经弄清楚重现此 bug 的步骤了。

我不确定您是否需要两个账户,但这是我的情况:

  1. 账户 A 创建一个主题,然后将其置顶并关闭。
  2. 账户 A 软删除该主题。
  3. 等待 5 分钟,登录账户 B,然后打开账户 A 的删除列表(例如:www.example.com/u/username/deleted-posts)。
  4. 找到账户 A 刚刚软删除的帖子,打开它。
  5. 如果您尝试永久删除该帖子,它将显示一条错误消息:帖子无法删除,因为还有其他帖子。
  6. 您需要删除帖子下方的置顶和关闭主题消息,然后再次尝试永久删除。
  7. 您将成功,但现在您无法再打开账户 A 的删除列表了。
3 个赞

请有人帮忙看一下这个,谢谢。

我正在清理一些包含敏感信息的内容,现在我们卡住了……

3 个赞

你是否仍然可以从主题/私信中访问已删除的帖子并从中永久删除它们,或者你根本无法再看到你已删除的帖子了?

2 个赞

我可以在帖子中访问它们。

但由于我不知道是哪些帖子,所以删除帖子的列表至关重要。

没有它,我必须手动浏览所有私人消息和公共主题才能找到它们。

2 个赞

我也尝试了 deleted-posts.json。但该信息不包含已删除的帖子。

它只显示“user_badges”和其他用户信息等内容。

2 个赞

如果我能以某种方式获得已删除帖子的 ID 列表,那也会有帮助。

2 个赞

我正在尝试重现:

  • 管理员 A 创建新主题,将其全局置顶(永久),然后关闭它
  • 管理员 A 然后软删除主题

* 管理员 B 通过访问其个人资料中的管理员 A 的 `/deleted-posts` 列表找到此主题 * 管理员 B 尝试永久删除主题 - 收到“您无法永久删除此主题,因为还有其他帖子。”错误 * 管理员 B 删除“置顶”和“关闭”的简短操作帖子 * 管理员 B 重试永久删除 - 删除成功
* 但是,管理员 B 现在无法访问管理员 A 的 `/deleted-posts`,出现错误 `GET https://greedy.jammydodger.monster/posts/jammydodger/deleted?offset=0`

尽管管理员 A 和管理员 C 仍然可以访问管理员 A 的 /deleted-posts 列表。短期内,@VincentAlse,您能否使用第二个管理员帐户访问 /deleted-posts 列表以查找您希望删除的其他帖子?或者您可以使用 data-explorer 查询来识别它们?

3 个赞

您好 @JammyDodger

感谢您的确认。我刚尝试了管理员 C(使用旧账户和新创建的账户)。对我来说不起作用。我认为原因是我删除了许多不同账户的帖子,导致其中大部分的删除列表出现错误。

我来看一下 data-explorer。我能用它查询已删除的帖子吗?

2 个赞

啊,那真不幸。如果你能访问数据浏览器插件,我认为类似下面的内容应该可以复制特定用户的 /deleted/posts 列表(为了方便起见,还加入了 post_id):

-- [params]
-- user_id :user_id

SELECT p.created_at AS reltime$time,
       id AS post_id,
       id
FROM posts p
WHERE p.user_id = :user_id
AND p.deleted_at IS NOT NULL
ORDER BY p.created_at DESC
4 个赞

让我试试。

3 个赞

@VincentAlse,那对你有用吗?如果你没有找到要删除的帖子列表,我认为应该还有其他方法可以找到它们?

3 个赞

一个愚蠢的问题。什么是 user_id?根据 .json 页面,我认为我的 user_id 是 1。

我收到了这个消息:ActiveRecord::PreparedStatementInvalid: missing value for :user_id in /*

@JammyDodger

1 个赞

从截图来看,您似乎修改了顶部的参数,这实际上会阻止它工作。如果将其保留为 :user_id,在运行它时会弹出一个选择框,您可以在其中输入用户名。:+1:

或者,您可以删除该参数,并将从 json 中获取的用户 ID 添加到 WHERE p.user_id = 行。

这是否说得通?

3 个赞

您似乎已经得到了帮助,但点击它会带我到 /u/deleted-posts,这是可以正常工作的。

1 个赞

现在可以了!

我以为我需要在代码中放入 user_id。

非常感谢 @JammyDodger

4 个赞

我昨天通过此 PR 修复了您报告的错误,该 PR 已合并,如果您更新 Discourse 实例,即可进行部署:

但是,我们发现硬删除主题可能会在数据库中留下孤立的小型操作帖子。第二个错误已通过以下方式修复:

我认为现在一切应该都正常工作了。如果您遇到更多问题,请告知我们。

6 个赞

此主题已自动关闭,超过 3 天。不允许回复。