我们基于官方仓库的标准 Discourse 安装,使用 SSO 集成作为唯一的登录系统,已经运行了好几年,服务着庞大的用户群,运行在一个运行其他应用程序的基于 Ubuntu 的专用服务器上,我很乐意地说,一直没有出现重大问题。
不幸的是,它最近遭受了一点自发性故障,似乎完全无法正常工作了。
最初的报告称,该网站出现了大量看似随机的 500 错误,并且通知未能送达,但除此之外它仍然可以运行。当时的情况是,安装是在一两个月前更新的,并且没有对其或服务器环境进行任何更改,因此这是一个令人惊讶的发展。
我们确认了 500 错误的发生,并首先尝试重启服务器和容器,但无效。还运行了“apt-get update”以使所有软件包都保持最新。我们也尝试通过后端更新 Discourse,但使用管理员链接登录时,没有通过电子邮件发送任何登录链接,并且在容器重启后,管理员登录页面只生成了 500 错误。
我还检查了服务器环境是否存在硬件、操作系统或其他方面的异常,但似乎没有什么不对劲。
接下来,我们尝试通过 CLI 进行完全重建和“git pull”更新。这在升级的数据库迁移过程中失败了,并出现以下错误:
I, [2022-08-09T23:15:21.229857 #1] INFO -- : cd /var/www/discourse & su discourse -c 'LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all'
I, [2022-08-09T23:15:23.938876 #1] INFO -- : docker_manager is already at latest compatible version
I, [2022-08-09T23:15:23.939220 #1] INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
2022-08-09 23:15:28.956 UTC [835] discourse@discourse ERROR: duplicate key value violates unique constraint "idx_bookmarks_user_polymorphic_unique"
2022-08-09 23:15:28.956 UTC [835] discourse@discourse DETAIL: Key (user_id, bookmarkable_type, bookmarkable_id)=(4115, Post, 103355) already exists.
2022-08-09 23:15:28.956 UTC [835] discourse@discourse STATEMENT: UPDATE bookmarks
SET bookmarkable_id = post_id, bookmarkable_type = 'Post'
WHERE NOT bookmarks.for_topic AND bookmarkable_id IS NULL
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:
ERROR: duplicate key value violates unique constraint "idx_bookmarks_user_polymorphic_unique"
DETAIL: Key (user_id, bookmarkable_type, bookmarkable_id)=(4115, Post, 103355) already exists.
如果存在数据库不一致,我不知道它是如何发生的……如果需要,我可以提供其余的控制台历史记录。
运行“./discourse-doctor”完成了,似乎没有问题,除了关于邮件服务器配置的一个警告——“证书验证失败(自签名证书)”——这可能解释了为什么电子邮件没有被发送出去。以前它们是按原样配置发送的,而且邮件服务器似乎运行正常,所以我对此不太确定。
目前该网站已完全瘫痪(在更新失败后只返回 500 错误)。除了寻求外部支持外,我们真的不知道如何进行。任何指导都将不胜感激!