Erro "MaxMindDB not found"

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 curtida

You may wish to search for the maxmind issue.

4 curtidas

Não encontrei uma resposta definitiva sobre a busca pelo problema. Alguém que saiba pode linká-la aqui?

Esses avisos do MaxMindDB devem ser ignorados? Recriar não parece resolver o problema. Tenho recebido esses avisos há meses.

Agora você pode! Configure MAXMIND for reverse IP lookups

3 curtidas

Estamos usando o Discourse atrás de um proxy reverso, então todos os usuários têm o mesmo IP, e precisaríamos da consulta GeoIP. Não vejo a opção de desativar completamente a consulta de IP, em vez de passar pelo processo de registro e obter uma licença para algo que não precisamos, apenas para eliminar os erros dos logs…

Estou perdendo alguma configuração sobre como desativar isso?

Você deve corrigir isso. Acho que tópicos como Como configurar o Discourse em um servidor com sites Apache existentes podem ter as instruções para isso.

Acho que se você simplesmente não definir a chave maxmind, receberá um aviso ao reconstruir, mas isso não causará nenhum problema.

2 curtidas

Não seria razoável ocultar e ignorar a consulta GeoIP nas configurações de administração do usuário, se nenhuma chave de licença tivesse sido configurada? Ou, em vez disso, mostrar uma informação/placeholder de que a consulta GeoIP seria possível configurando uma chave de licença seguindo Configure MAXMIND for reverse IP lookups?

Percorrer os logs de erro para monitorar a operação do sistema é uma boa prática, e é irritante gastar tempo investigando erros, apenas para descobrir que eles são esperados porque uma operação está sendo tentada que se espera que falhe por padrão e que poderia ser facilmente ignorada verificando uma única configuração :wink:.

Posso tentar abrir um PR no GitHub, se você basicamente concordar. Mas provavelmente estou ignorando algo e não é tão fácil ou tem desvantagens que não estou vendo.

4 curtidas

Parece bom, ficaria feliz com um PR

4 curtidas

PR aberto, mas preciso de ajuda para aplicar testes, no código e como testar em uma instância Discourse em execução: UX: Show if MaxMind key is missing on IP lookup by MichaIng · Pull Request #18993 · discourse/discourse · GitHub

3 curtidas

Tenho ignorado estes:

MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-ASN.mmdb) não pôde ser encontrado: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-ASN.mmdb
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-City.mmdb) não pôde ser encontrado: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-City.mmdb

…mas acabei de procurar uma forma de suprimi-los.

Eu poderia apenas configurar o MaxMind, mas eu realmente não preciso dele.

O PR acima foi mesclado em 23/11/2023 – eu não deveria estar vendo esses erros?

Ele foi revertido novamente, pois era muito complicado ajustar os testes automatizados para eles. Uma tentativa foi feita, mas eles reintroduziram os avisos, quebrando o propósito do meu PR em primeiro lugar:

Portanto, ambos foram revertidos:

O problema provavelmente foi tornar a leitura do banco de dados dependente da existência de uma chave MaxMind. No entanto, o banco de dados pode ser adicionado de outras maneiras. Em nossa própria instância, enquanto isso, adicionamos bancos de dados gratuitos DB-IP, que não exigem conta. Portanto, meu próprio PR teria quebrado a maneira como fazemos isso agora. O mesmo causou falhas nos testes que corrigi em meu PR. Mas no branch principal e/ou em alguns plugins, isso provavelmente causou outros problemas.

Uma solução melhor, se alguém quiser abordar isso novamente, seria verificar se os arquivos do banco de dados existem antes de tentar carregá-los, em vez de verificar se a chave de licença está definida. Então, aqui:

  • Somente se File.join(path, "GeoLite2-City.mmdb") existir, carregue-o com mmdb_load.

A saída ajustada da GUI também pode ter sido um problema para alguns testes, mas deve ser possível adicioná-la sem quebrar os testes, como um fallback apenas se nenhum local estiver disponível e então a respectiva flag for verdadeira, que foi definida com ret[:no_license] = true. Mas deveria ser renomeada para no_db ou algo assim para indicar que não se trata de saber se uma chave de licença MaxMind foi definida, mas se os arquivos reais do banco de dados existem ou não.

1 curtida

Obrigado pelas informações! Parece sensato verificar os arquivos antes de tentar carregá-los. Eu não sou o cara para desenvolver uma correção, então tentarei habilitar o MaxMind para despoluir meu log.