未找到 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
1 个赞

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

4 个赞

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

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

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

3 个赞

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

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

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

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

2 个赞

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

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

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

4 个赞

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

4 个赞

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

3 个赞

我一直在忽略这些:

找不到 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 许可证密钥无关,而是与实际数据库文件是否存在有关。

1 个赞

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