Ошибка MaxMindDB not found

В логах есть ошибки

красный:

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

желтый

Не удалось обработать исключение в промежуточном ПО обработки исключений: PG::UndefinedTable: ERROR: relation "groups" does not exist LINE 1: 
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-City.mmdb) не найден: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-City.mmdb
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-ASN.mmdb) не найден: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-ASN.mmdb

Возможно, стоит поискать проблему MaxMind.

Я не могу найти авторитетного ответа по поиску этой проблемы. Может, кто-то, кто в курсе, даст ссылку здесь?

Можно ли игнорировать эти предупреждения MaxMindDB? Пересборка, похоже, не решает проблему. Я сталкиваюсь с ними уже несколько месяцев.

Теперь это возможно! Configure MAXMIND for reverse IP lookups

Мы используем Discourse за обратным прокси, поэтому у всех пользователей одинаковый IP-адрес, и нам требуется поиск по базе GeoIP. Я не вижу возможности полностью отключить проверку IP-адреса. Не хочется проходить процесс регистрации и получать лицензию на функцию, которая нам не нужна, только для того, чтобы устранить ошибки в логах…

Не упустил ли я какую-то настройку для отключения этого?

Вам стоит это исправить. Я думаю, что в темах вроде Как настроить Discourse на сервере с существующими сайтами Apache могут быть инструкции по этому поводу.

Кажется, что если вы просто не укажете ключ MaxMind, при перестроении появится предупреждение, но это ни на что не повлияет.

Не было бы разумным скрыть и пропустить проверку GeoIP в настройках администратора пользователя, если ключ лицензии не настроен? Или вместо этого показывать информационное сообщение/заглушку о том, что проверка GeoIP станет возможной после настройки ключа лицензии по ссылке Configure MAXMIND for reverse IP lookups?

Обход логов ошибок для мониторинга работы системы — это хорошая практика, и раздражает тратить время на расследование ошибок, лишь чтобы обнаружить, что они ожидаемы, так как выполняется операция, которая по умолчанию должна завершаться неудачей и которую можно легко пропустить, проверив одно единственное настройки :wink:.

Я могу попробовать открыть PR на GitHub, если вы в принципе согласны. Но, возможно, я упускаю что-то, и это не так просто или имеет недостатки, которые я не вижу.

Звучит хорошо, буду рад 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. Но в главной ветке и/или в некоторых плагинах это, вероятно, привело к другим проблемам.

Более подходящим решением, если кто-то захочет вернуться к этой задаче, будет проверка наличия файлов базы данных перед попыткой их загрузки, вместо проверки определения ключа лицензии. То есть здесь:

  • Загружать mmdb_load только если File.join(path, "GeoLite2-City.mmdb") существует.

Также проблема для некоторых тестов могла быть связана с изменённым выводом в GUI, но, вероятно, его можно добавить, не ломая тесты, как запасной вариант, только если местоположение недоступно и при этом установлен соответствующий флаг (тот, который я установил с помощью ret[:no_license] = true в своём PR). Однако его следует переименовать в no_db или что-то подобное, чтобы указать, что речь идёт не о наличии ключа лицензии MaxMind, а о существовании самих файлов базы данных. Таким образом, модульные тесты смогут внедрять местоположение для проверки вывода без необходимости наличия реальной базы данных или ключа лицензии.

Спасибо за информацию! Логично проверять наличие файлов перед попыткой их загрузки. Я не тот человек, кто может разработать исправление, поэтому попробую включить MaxMind, чтобы разгрузить свой лог.