# 500错误和更新失败

**URL:** <https://meta.discourse.org/t/500-errors-and-failing-update/235731>\
**Category:** Self-hosting\
**Created:** [2022年八月10日 13:16 UTC](https://meta.discourse.org/t/500-errors-and-failing-update/235731 "2022-08-10T13:16:43Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![befuddled](https://avatars.discourse-cdn.com/v4/letter/b/e274bd/32.png) [@befuddled](https://meta.discourse.org/u/befuddled)\
**Post date:** [2022年八月10日 13:16 UTC](https://meta.discourse.org/t/500-errors-and-failing-update/235731/1 "2022-08-10T13:16:43Z")

</div>

我们基于官方仓库的标准 Discourse 安装，使用 SSO 集成作为唯一的登录系统，已经运行了好几年，服务着庞大的用户群，运行在一个运行其他应用程序的基于 Ubuntu 的专用服务器上，我很乐意地说，一直没有出现重大问题。

不幸的是，它最近遭受了一点自发性故障，似乎完全无法正常工作了。

最初的报告称，该网站出现了大量看似随机的 500 错误，并且通知未能送达，但除此之外它仍然可以运行。当时的情况是，安装是在一两个月前更新的，并且没有对其或服务器环境进行任何更改，因此这是一个令人惊讶的发展。

我们确认了 500 错误的发生，并首先尝试重启服务器和容器，但无效。还运行了“apt-get update”以使所有软件包都保持最新。我们也尝试通过后端更新 Discourse，但使用管理员链接登录时，没有通过电子邮件发送任何登录链接，并且在容器重启后，管理员登录页面只生成了 500 错误。

我还检查了服务器环境是否存在硬件、操作系统或其他方面的异常，但似乎没有什么不对劲。

接下来，我们尝试通过 CLI 进行完全重建和“git pull”更新。这在升级的数据库迁移过程中失败了，并出现以下错误：

```plaintext
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 错误）。除了寻求外部支持外，我们真的不知道如何进行。任何指导都将不胜感激！

---

<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:** [2022年八月10日 13:59 UTC](https://meta.discourse.org/t/500-errors-and-failing-update/235731/2 "2022-08-10T13:59:38Z")

</div>

看起来索引已损坏或出现类似问题。您需要删除或更改这些记录，以便数据库能够迁移。

如果您熟悉 SQL，或许可以在这里获得一些帮助来找出问题所在。如果您实在无法解决并且有预算，可以联系我或在 #Marketplace 频道提问。
