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) が見つかりません: 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
「いいね!」 1

MaxMind の問題を検索することをお勧めします。

「いいね!」 4

検索に関する確実な回答が見つかりません。ご存知の方がいれば、ここにリンクしていただけませんか?

これらの MaxMindDB の警告は無視してよいのでしょうか?再構築しても問題が解決しないようです。数ヶ月間、この警告を受け続けています。

今なら可能です!Configure MAXMIND for reverse IP lookups

「いいね!」 3

リバースプロキシの背後で Discourse を使用しているため、すべてのユーザーが同じ IP アドレスを持っています。そのため、GeoIP 照会が必要になります。ライセンスを取得して登録プロセスを完了させることなく、ログからエラーを排除するために IP 照会を完全に無効にするオプションがないようですが、何か見落としている設定はあるでしょうか?

それを修正すべきです。既存の Apache サイトがあるサーバーに Discourse を設定する方法に関するトピック(https://meta.discourse.org/t/how-to-set-up-discourse-on-a-server-with-existing-apache-sites/30013)には、その手順が記載されているかもしれません。

MaxMind のキーを設定しないだけなら、再構築時に警告が表示されますが、問題にはならないと思います。

「いいね!」 2

ライセンスキーが設定されていない場合、ユーザー管理設定でGeoIP検索を非表示にしスキップするのは妥当ではありませんか?それとも、ライセンスキーを設定することでGeoIP検索が可能になるという情報/プレースホルダーを表示し、Configure MAXMIND for reverse IP lookups に従うべきでしょうか?

エラーログをループしてシステム操作を監視するのは良い習慣であり、デフォルトでは失敗することが予想され、単一の設定をチェックするだけで簡単にスキップできる操作であることが判明したためにエラーを調査するのに時間を費やすのは迷惑です :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で修正しました。しかし、メインブランチや特定のプラグインでは、他の問題を引き起こした可能性が高いです。

もし誰かがこの問題に再度取り組むのであれば、より良い解決策は、ライセンスキーが定義されているかどうかではなく、データベースファイルをロードしようとする前に、データベースファイルが存在するかどうかを確認することです。つまり、次の場所で:

mmdb_loadするのは、File.join(path, "GeoLite2-City.mmdb")が存在する場合のみです。
GUIの調整された出力も一部のテストで問題となった可能性がありますが、テストを壊すことなく追加することは可能であるはずです。これは、場所が利用できず、かつret[:no_license] = trueで設定された対応するフラグがtrueの場合のフォールバックとしてのみです。しかし、MaxMindライセンスキーが定義されているかどうかではなく、実際のデータベースファイルが存在するかどうかを示すために、no_dbなどに名前を変更すべきです。

「いいね!」 1

情報ありがとうございます!ロードしようとする前にファイルをチェックするのは理にかなっていますね。修正できるような人物ではないので、ログを整理するためにMaxMindを有効にしてみます。