无法恢复已删除用户创建的类别描述帖子

在某些类别创建后,创建这些类别的用户被删除了。查看日志,我可以看到 Discourse 在删除该用户的同时自动删除了这些帖子。

我们直到过了一段时间才意识到这引发了问题,当时发现虽然管理员仍然可以查看(并编辑)受影响的类别描述帖子,但普通用户尝试查看这些帖子时,却会看到如下错误信息:“错误;加载过程中发生问题;出了些差错。”

这些类别描述帖子的背景显示为红色。我可以看到它们已被删除以及删除的时间。我能看到“恢复删除”按钮,但点击它没有任何反应。

如果我进入受影响的类别之一(点击其“编辑”按钮)的设置,然后点击“编辑描述”按钮,会被带到对应的已删除帖子页面。我可以进行修改并保存,刷新页面后,新描述就会显示出来。但非管理员用户仍然无法看到帖子内容(只能看到那个错误提示)。

我曾尝试将其中一个帖子的所有权更改为我自己的管理员账户,但“恢复删除”按钮依然没有任何作用。

我在 Discourse 元论坛(meta Discourse)上找到了类似的报告,但到目前为止,没有任何建议能解决问题。

我发现有一处提到有人曾通过 Discourse API 成功恢复了类似受影响的帖子,于是我着手研究,但在 API 文档中未能找到关于恢复已删除帖子的相关信息。参见:Can't recover a topic by a deleted user

我希望存在一种解决方案,无需从头重建所有受影响的类别。

更新:当我点击其中一个帖子的“恢复删除”按钮时,错误日志中生成了一条记录:

错误:禁止访问
URL: mysite/assets/ember_jquery-189e46ebcb33594b835e782fd1ce916ec750bc0cf980ebc4fb7796649161a18d.js
行号:1
列号:266460
窗口位置:mysite/t/about-the-showcases-and-use-cases-category/28
3 个赞

是不是有人对创建分类的用户执行了销毁命令?是否有特定原因导致该用户被销毁而非匿名化?

确实,分类描述主题将由创建该分类的用户拥有,因此销毁该用户(及其所有帖子)可能会导致这种情况。@tshenry,我们下周能否测试这一场景?

3 个赞

我刚才快速复现了同样的问题:

  1. 使用管理员用户创建一个分类
  2. 撤销其管理员权限并删除该用户
  3. 删除用户时,该分类的“关于”主题会被软删除
  4. 尝试恢复/取消删除该主题无效
  5. 更改所有权在技术上可行,但无论你在界面中进行什么操作,该主题始终处于一种奇怪的删除状态。

从控制台来看,当用户被删除时,与该主题关联的 posts 记录也被删除了。查看各种与帖子相关的属性时,主题记录中包含大量 0 值。

或许值得让工程师看看能否在此处处理得更优雅一些,但我怀疑这说起来容易做起来难。


我找到了一个变通方法,可以将系统恢复到正常状态,但必须使用命令行。@jrivettcsa,建议你在尝试之前先进行备份:

所需值

请务必先将“关于”主题中你希望保留的内容复制到记事本或其他地方,然后继续执行以下操作:

进入 Rails 控制台

cd /var/discourse
./launcher enter app
rails c

将下方命令中的 <ABOUT_TOPIC_ID> 替换为分类的“关于”主题 ID,然后运行以硬删除损坏的主题。

Topic.where(id: <ABOUT_TOPIC_ID>).destroy_all

如有需要,按 q 键返回控制台。

该分类仍与损坏的主题关联,因此我们需要清除该关联。将下方命令中的 <CATEGORY_ID> 替换为分类 ID,然后运行。

Category.where(id: <CATEGORY_ID>).update_all(topic_id: nil)

如有需要,按 q 键返回控制台。

退出 Rails 控制台,并运行以下 rake 任务为该分类创建新的“关于”主题:

exit
rake categories:create_definition

现在该分类应该已修复!如有需要,你可以重复上述步骤。

6 个赞

是的,一些不幸的变更是由本应更谨慎的人做出的。我无法多说。幸运的是,Discourse 对这些操作都有日志记录。

1 个赞

感谢您确认问题并提供解决方案。我将尝试执行,并将结果发布在此处。

1 个赞

这个解决方案完美地解决了问题。谢谢!

我逐个修复了它们,但我想我本可以在一个 Rails 控制台会话中完成所有 destroy_allupdate_all 的操作,然后在最后一次性执行 rake categories:create_definition 命令。你觉得呢?这或许能在某个时刻为某人节省几分钟时间。

4 个赞

这绝对是一个 bug @jrivettcsa——删除用户导致网站损坏,这很糟糕!我们会尽快修复。

4 个赞

感谢您提交该问题。我已在以下 PR 中进行了修复:

当用户被删除时,描述该分类的帖子将不再被删除。相反,帖子的作者将从原用户更改为系统用户。

4 个赞