未找到 MaxMindDB 错误

日志中有一些错误

红色:

ActiveRecord::StatementInvalid (PG::UndefinedTable: 错误:关系 "groups" 不存在 LINE 1: SELECT "groups"."id", "groups"."name" FROM "groups" WHERE

黄色

在异常应用中间件中处理异常失败:PG::UndefinedTable: 错误:关系 "groups" 不存在 LINE 1: 
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-City.mmdb) 未找到:没有那个文件或目录 @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-City.mmdb
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-ASN.mmdb) 未找到:没有那个文件或目录 @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-ASN.mmdb

您可能需要搜索 MaxMind 相关的问题。

我找不到关于搜索该问题的权威解答。有了解的人能在这里提供相关链接吗?

这些 MaxMindDB 警告可以忽略吗?重新构建似乎无法解决问题。我已经遇到这些问题好几个月了。

现在你可以了!Configure MAXMIND for reverse IP lookups

我们在反向代理后使用 Discourse,因此所有用户都共享同一个 IP,我们需要 GeoIP 查询功能。我找不到完全禁用 IP 查询的选项,难道必须经历注册流程并购买我们实际上不需要的许可证,仅仅为了消除日志中的错误吗?

我是否遗漏了禁用此功能的设置?

你应该修复这个问题。像如何在已有 Apache 站点的服务器上设置 Discourse 这样的主题可能包含相关操作指南。

我认为,如果你不设置 MaxMind 密钥,在重新构建时只会收到警告,但不会造成任何损害。

如果未配置许可证密钥,是否可以合理地在用户管理员设置中隐藏和跳过 GeoIP 查询?或者显示一个信息/占位符,说明通过设置许可证密钥可以进行 GeoIP 查询,网址为 https://meta.discourse.org/t/configure-maxmind-for-reverse-ip-lookups/173941?

循环检查错误日志以监控系统运行是良好的实践,并且调查错误会很烦人,仅仅是为了发现它们是预期发生的,因为尝试的操作默认会失败,而通过检查一个设置就可以轻松跳过 :wink:

如果你们基本同意,我可以尝试在 GitHub 上提交一个 PR。但可能我忽略了一些东西,它并不那么容易,或者有我没有看到的缺点。

听起来不错,我很乐意收到一个 PR。

PR 已提交,但我需要一些帮助来应用测试,包括代码中的测试以及如何在运行中的 Discourse 实例上进行测试:UX: Show if MaxMind key is missing on IP lookup by MichaIng · Pull Request #18993 · discourse/discourse · GitHub

我一直在忽略这些:

找不到 MaxMindDB(/var/www/discourse/vendor/data/GeoLite2-ASN.mmdb):No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-ASN.mmdb
找不到 MaxMindDB(/var/www/discourse/vendor/data/GeoLite2-City.mmdb):No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-City.mmdb

……但只是在寻找一种抑制它们的方法。

我本可以配置 MaxMind,但我并不真的需要它。

上面的PR 于 2023-11-23 合并——我不应该看到这些错误吗?

由于调整自动化测试过于复杂,它再次被撤销了。曾尝试过,但那些又重新添加了警告,这从根本上破坏了我 PR 的目的:

因此两者都被撤销了:

问题很可能是数据库读取依赖于 MaxMind 密钥的存在。但是,数据库可以通过其他方式添加。在我们自己的实例中,我们暂时添加了 免费的 DB-IP 数据库,它不需要账户。所以我的 PR 会破坏我们现在的方式。同样的原因导致了测试失败,而我在 PR 中修复了这些问题。但在主分支和/或某些插件中,这很可能导致了其他问题。

一个更好的解决方案,如果有人想再次尝试,将是在尝试加载数据库文件之前检查它们是否存在,而不是检查许可证密钥是否已定义。所以在这里:

  • 仅当 File.join(path, "GeoLite2-City.mmdb") 存在时,才 mmdb_load 它。

调整后的 GUI 输出也可能是一些测试的问题,但应该可以在不破坏测试的情况下添加它,仅在没有可用位置且相应标志为 true 时作为回退,该标志已通过 ret[:no_license] = true 设置。但应该重命名为 no_db 或类似名称,以表明它与是否定义了 MaxMind 许可证密钥无关,而是与实际数据库文件是否存在有关。

谢谢提供的信息!在尝试加载文件之前先检查文件似乎是明智的。我不是开发修复程序的人,所以我将尝试启用 MaxMind 来清理我的日志。