500内部服务器错误出现在多个路由上

你好,

我正在尝试调试反复出现的 500 内部服务器错误。
首先是环境配置(我知道这并不是理想的部署方式,也不是推荐使用 Docker 的方案):

  • Discourse 2.3.8
  • Ruby 2.7.2(使用 snap 安装)
  • Redis Server 5:4.0.9-1ubuntu0.2(Ubuntu 官方包)
  • PostgreSQL 10.15(运行在另一台主机上)

我编辑了 config/environments/production.rb 文件,设置了:

config.log_level = :debug

我们看到的错误示例(夹杂在 200 状态码之间)可以在这里找到(由于帖子中最多只能放两个链接,其余内容也在此处):Ubuntu Pastebin

我曾尝试判断是否某种特定类型的请求导致了 500 错误,确实发现了一些模式(参见之前的 Pastebin 链接)。

目前我尚未找到进一步调试的方法。
我不太确定这是否是一个 bug,而且遗憾的是我无法复现该问题。这些错误在一天中随机发生,穿插在 200 响应之间。这可能是某种锁或资源争用问题,但在没有更多日志的情况下,我实在无法确定问题所在。

以下是当前进程使用的限制信息,以防这是问题所在:Ubuntu Pastebin

如果有任何关于如何进一步调试的建议,我将不胜感激。

祝好,

Discourse 2.3.8 版本非常老旧,无法与 Ruby 2.7.2 等较新版本的 Ruby 配合使用。

我们知道 Discourse 2.5.6、2.6 和 2.7 版本可以与 Ruby 2.7.2 配合使用。

你好,Rafael,

感谢你的回复。我们计划尽快升级,并采用官方支持的部署方式。

我主要想了解除了修改 config/environments/production.rb 文件之外,还有哪些方法可以增加调试信息的输出。

我注意到 Logster(https://meta.discourse.org/t/discourse-logging-improvements/16783)可能有用,但在我们的场景中它提供的信息不够实用(我缺少秒级时间戳,无法判断是否与我的 500 错误相关),而且错误日志太多,很可能与 Ruby 和 Discourse 版本不匹配有关。

我会再进一步排查,不过我肯定会推动比“尽快”更早的升级 :)。

谢谢!