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
Мы используем Discourse за обратным прокси, поэтому у всех пользователей одинаковый IP-адрес, и нам требуется поиск по базе GeoIP. Я не вижу возможности полностью отключить проверку IP-адреса. Не хочется проходить процесс регистрации и получать лицензию на функцию, которая нам не нужна, только для того, чтобы устранить ошибки в логах…
Не упустил ли я какую-то настройку для отключения этого?
Не было бы разумным скрыть и пропустить проверку GeoIP в настройках администратора пользователя, если ключ лицензии не настроен? Или вместо этого показывать информационное сообщение/заглушку о том, что проверка GeoIP станет возможной после настройки ключа лицензии по ссылке Configure MAXMIND for reverse IP lookups?
Обход логов ошибок для мониторинга работы системы — это хорошая практика, и раздражает тратить время на расследование ошибок, лишь чтобы обнаружить, что они ожидаемы, так как выполняется операция, которая по умолчанию должна завершаться неудачей и которую можно легко пропустить, проверив одно единственное настройки .
Я могу попробовать открыть PR на 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, чтобы разгрузить свой лог.