MaxMindDB not found error

I have some errors in logs

red:

ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: relation "groups" does not exist LINE 1: SELECT "groups"."id", "groups"."name" FROM "groups" WHERE

yellow

Failed to handle exception in exception app middleware : PG::UndefinedTable: ERROR: relation "groups" does not exist LINE 1: 
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-City.mmdb) could not be found: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-City.mmdb
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-ASN.mmdb) could not be found: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-ASN.mmdb
1 个赞

You may wish to search for the maxmind issue.

4 个赞

I do not find an authoritative answer on searching for the issue. Can someone who knows link it here?

Are these MaxMindDB warnings to be ignored? Rebuilding doesn’t seem to fix the issue. I have been getting them for months.

Now you can! Configure MAXMIND for reverse IP lookups

3 个赞

We are using Discourse behind a reverse proxy, so all users have the same IP, and we would need the GeoIP lookup - I do not see the option to disable the IP lookup altogether, instead of going through the registration process and obtaining a license for something that we are not needed, only in order to eliminate the errors from the logs…

Do I miss a setting, on how to disable this?

You should fix that. I think topics like How to set up Discourse on a server with existing Apache sites might have the instructions for that.

I think that if you just don’t set the maxmind key you’ll get a warning when you rebuild but it won’t hurt anything.

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 来清理我的日志。