خطأ "MaxMindDB غير موجود"

لدي بعض الأخطاء في السجلات

أحمر:

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): لا يوجد ملف أو دليل @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-City.mmdb
لم يتم العثور على MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-ASN.mmdb): لا يوجد ملف أو دليل @ 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 عن طريق تعيين مفتاح ترخيص باتباع https://meta.discourse.org/t/configure-maxmind-for-reverse-ip-lookups/173941؟

التكرار عبر سجلات الأخطاء لمراقبة تشغيل النظام هو ممارسة جيدة، ومن المزعج قضاء الوقت في التحقيق في الأخطاء، فقط لمعرفة أنها متوقعة لأن عملية ما يتم محاولة تنفيذها ومن المتوقع أن تفشل افتراضيًا ويمكن تخطيها بسهولة عن طريق التحقق من إعداد واحد :wink:.

يمكنني محاولة فتح طلب سحب على GitHub، إذا كنت توافق بشكل أساسي. ولكن ربما أغفل شيئًا وأنه ليس بهذه السهولة أو له عيوب لا أراها.

يبدو جيدًا، سأكون سعيدًا بطلب سحب (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): لا يوجد مثل هذا الملف أو الدليل @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-ASN.mmdb
لم يتم العثور على MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-City.mmdb): لا يوجد مثل هذا الملف أو الدليل @ 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.
  • قد يكون خرج واجهة المستخدم المعدل مشكلة أيضًا لبعض الاختبارات، ولكن يجب أن يكون من الممكن إضافته دون كسر الاختبارات، كحل بديل فقط إذا لم يكن هناك موقع متاح ثم كان العلم المقابل صحيحًا، والذي تم تعيينه باستخدام ret[:no_license] = true. ولكن يجب إعادة تسميته إلى no_db أو شيء من هذا القبيل للإشارة إلى أنه لا يتعلق بما إذا كان مفتاح ترخيص MaxMind قد تم تحديده، ولكن ما إذا كانت ملفات قاعدة البيانات الفعلية موجودة أم لا.

شكرا على المعلومات! يبدو من المنطقي التحقق من الملفات قبل محاولة تحميلها. لست الشخص المناسب لتطوير حل، لذا سأحاول تمكين MaxMind لتقليل سجلاتي.