在某些类别创建后,创建这些类别的用户被删除了。查看日志,我可以看到 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 个赞
tshenry
(Taylor)
3
我刚才快速复现了同样的问题:
- 使用管理员用户创建一个分类
- 撤销其管理员权限并删除该用户
- 删除用户时,该分类的“关于”主题会被软删除
- 尝试恢复/取消删除该主题无效
- 更改所有权在技术上可行,但无论你在界面中进行什么操作,该主题始终处于一种奇怪的删除状态。
从控制台来看,当用户被删除时,与该主题关联的 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_all 和 update_all 的操作,然后在最后一次性执行 rake categories:create_definition 命令。你觉得呢?这或许能在某个时刻为某人节省几分钟时间。
4 个赞
这绝对是一个 bug @jrivettcsa——删除用户导致网站损坏,这很糟糕!我们会尽快修复。
4 个赞
感谢您提交该问题。我已在以下 PR 中进行了修复:
当用户被删除时,描述该分类的帖子将不再被删除。相反,帖子的作者将从原用户更改为系统用户。
4 个赞