إعادة البناء دائماً تفشل عندما يتم استنفاد حد MAXMIND اليومي

لقد جربت إعادة البناء الآن وفشلت عند هذه النقطة:

 - dist/javascripts/media-optimization-worker.js: 5.01 kB (1.74 kB gzipped)
 - dist/javascripts/pikaday/1.8.2/pikaday.js: 42.54 kB (9.67 kB gzipped)
 - dist/javascripts/squoosh/mozjpeg_enc.js: 39.03 kB (10.81 kB gzipped)
 - dist/javascripts/squoosh/squoosh_resize.js: 4.53 kB (1.28 kB gzipped)
Done in 355.08s.

I, [2024-07-08T07:59:42.015855 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'SKIP_EMBER_CLI_COMPILE=1 bundle exec rake themes:update assets:precompile'
Purging temp files
Bundling assets
I, [2024-07-08T07:59:57.247206 #1532]  INFO -- : Writing /var/www/discourse/public/assets/break_string-cc617154cd957804f2f6a1f3bc68258c9cdca3d4b9a322bf777d145fed04790e.js
I, [2024-07-08T07:59:57.264957 #1532]  INFO -- : Writing /var/www/discourse/public/assets/service-worker-9764e1cd771b38dbe65a0d1e42d89cb2cb5f72b266ab7316e55d3371cb0ac870.js
I, [2024-07-08T07:59:57.271269 #1532]  INFO -- : Writing /var/www/discourse/public/assets/locales/i18n-3b40e842fd72b9bcc74ea83e094c823cd9ca535e4ecc5e78722e6f99d3656137.js
I, [2024-07-08T07:59:57.277082 #1532]  INFO -- : Writing /var/www/discourse/public/assets/scripts/discourse-test-listen-boot-9b14a0fc65c689577e6a428dcfd680205516fe211700a71c7adb5cbcf4df2cc5.js
I, [2024-07-08T07:59:59.103776 #1532]  INFO -- : Writing /var/www/discourse/public/assets/locales/ar-dfed7a58f30378bc60d7a2cc8d6347524f68b272ae012f0232604f730e442f91.js
I, [2024-07-08T08:00:00.112555 #1532]  INFO -- : Writing /var/www/discourse/public/assets/locales/be-e12ac4c99df2289f422efd371dd3da766754aecb1189ea763fe003376aca9028.js
rake aborted!
Zlib::BufError: buffer error (Zlib::BufError)
إعجاب واحد (1)

لدي سؤال. هل تستخدم S3؟ أظن ذلك أيضاً.

لا :baymax_no: لا S3 بالنسبة لي.

إعجاب واحد (1)

لا أعرف ما إذا كان هذا يحدث فقط عند استنفاد الحد اليومي. لكنه يحدث طوال الوقت هنا لمدة 2-3 أشهر الآن. يبدو أن أشخاصًا آخرين يواجهون نفس المشكلة:

ربما ستكون فكرة جيدة توفير ملفات Maxmind من دليل محلي؟ أقوم بتنزيله على أي حال لاستخدامات أخرى، لذا فهو موجود بالفعل.

وربما سيكون من الأفضل توفير ملفات Maxmind في دليل مشترك داخل حاوية Discourse للحصول دائمًا على أحدث إصدار؟ كما ذكرت، أقوم بتنزيله على أي حال وأقوم بتحديث الملفات مرة واحدة يوميًا.

إعجاب واحد (1)

أعتقد أن المشكلة لا تتعلق بالحد. بمعنى آخر، يعطي خطأ أيضًا عند إدخال مفتاح خاطئ أو معرف حساب خاطئ. هذه هي الطريقة التي يمكننا بها حل المشكلة هنا: في حالة حدوث خطأ، اجعله يستخدم قاعدة البيانات القديمة ويستمر في إعادة بنائها. بالطبع، من المهم جدًا تحديد السبب الرئيسي لهذه المشكلة.

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

مثير للاهتمام :slight_smile:

حسنًا، مفاتيحي قديمة، لم أقم بتغييرها أبدًا بعد البدء في استخدامها. لماذا تعمل عندما تنشئ مفتاحًا جديدًا؟ لقد قلت إن الأمر يستغرق بعض الوقت حتى يصبح نشطًا. لذا يجب أن يرمي خطأ حينها؟

هذه فكرة جيدة. أو تقديم الملفات من دليل محلي، كما اقترحت. كل شيء اختياري. لكن هذا يزعجني حقًا أن إعادة البناء أشبه باليانصيب لعدة أسابيع الآن…

إعجاب واحد (1)

هذا يتعارض مع شروط استخدام Maxmind، ولهذا السبب نحتاج إلى جعل الجميع يقدمون مفاتيح API لتنزيل الملفات بشكل فردي.

سأقوم بتعيين نفسي للنظر في المشكلة عند الوصول إلى الحد اليومي.

إعجابَين (2)

لقد فشل إعادة البناء ثم قمت ببناء الصورة مع إيقاف تشغيل إعدادات maxmind. ثم داخل الحاوية، أضفت الإعدادات مرة أخرى وقمت بتشغيل مهمة rake بنجاح.

ربما يكون من الممكن إعادة البناء دون تنزيل قاعدة البيانات ثم تنزيل قاعدة البيانات عند بدء تشغيل الحاوية؟

أيضًا، أضفت طلب سحب (PR) من شأنه أن يسمح للتمهيد بالنجاح (والذي تم دمجه) حتى لو فشل التنزيل، ولكنه لا يزال يتسبب في فشل التمهيد.

إعجابَين (2)

نعم، أعتقد أنك على حق هنا. Maxmind ليست ميزة حرجة، لذا لا داعي لأن نجعل بدء التشغيل يفشل عندما لا نتمكن من تنزيل الأشياء.

6 إعجابات

أعتقد أنك لم تفهم ما حاولت قوله. دعني أحاول مرة أخرى:

لدي برنامج نصي يقوم بتنزيل ملفات Maxmind كل بضعة أيام. باستخدام مفاتيح API الخاصة بي بالطبع. تُستخدم الملفات على الخادم لعدة أشياء مثل إحصائيات الويب AWstats، وإضافات WordPress، وما إلى ذلك.

لذا، لدي الملفات على الجهاز على أي حال. لماذا أقوم بتنزيل الملفات (مرة أخرى) عند إعادة بناء حاوية Discourse؟

هذه فكرة رائعة. :slight_smile:

إعجاب واحد (1)

نعم. سيكون من الرائع أن تكون هذه الملفات في تخزين دائم، خاصة إذا كان يمكن مشاركتها عبر مثيلات متعددة. لدي عدد قليل من مواقع Discourse على نفس الجهاز خلف Traefik، لذلك إذا كان بإمكانهم جميعًا مشاركة نفس mmdb، فسيوفر ذلك الاحتفاظ وتنزيل مجموعة من النسخ المنفصلة. حتى في التثبيت القياسي، يمكن أن تستمر هذه الملفات بين عمليات البناء. ربما هذا ممكن بالفعل؟ ربما يكفي تحميل /var/www/discourse/vendor/data في مكان دائم؟
آها. أعتقد أن هذا هو الغرض من GlobalSetting.maxmind_backup_path. لذلك أعتقد أنه إذا كان لديك maxminddb لسبب ما، يمكنك تعيين DISCOURSE_MAXMIND_BACKUP_PATH إلى شيء متاح في الحاوية.
أيضًا، لماذا نحتاج إلى mmdb لتجميع الأصول مسبقًا؟

إعجابَين (2)

إذًا، هل هذا يعمل بالفعل؟ هل سيؤدي إعداد DISCOURSE_MAXMIND_BACKUP_PATH في app.yml (كرابط داخلي من داخل الحاوية أو رابط مطلق على مضيف Docker؟) إلى تعطيل التنزيل من Maxmind أثناء إعادة البناء؟

إنه في الكود. لم أستخدمه من قبل. يبدو أنه إذا قمت بتضمين مسار هناك، فسيجده. لا أتذكر، لكن أعتقد أنه مسار إلى الدليل.

حسنًا، يمكنني المحاولة. لدي عدة مثيلات وواحد منها مخصص للاختبار فقط.

هل يمكنني معرفة ما إذا تم أخذ الملفات محليًا أم تم تنزيلها؟

إذًا شيء مثل /var/discourse/maxmind على مضيف Docker؟

عذرًا. لست متأكدًا تمامًا. يبدو أنه يريد دليلًا، ويمكنك جعله أي شيء تريده، لذا ربما تضيف وحدة تخزين في ملف app.yml الخاص بك مثل

  - volume:
      host: /data/
      guest: /data

و DISCOURSE_maxmind_backup_path=/data/mmdb (تصحيح حالة متغير البيئة)

إليك الكود

شكراً لك مرة أخرى. لقد أنشأت /var/discourse/shared/discourse_test/data/mmdb وهنا ما فعلته لـ app.yml:

  ## مفتاح تحديد الموقع الجغرافي لعنوان IP للبحث عن عنوان IP
  ## انظر https://meta.discourse.org/t/-/137387/23 للتفاصيل
  DISCOURSE_MAXMIND_ACCOUNT_ID: 123456
  DISCOURSE_MAXMIND_LICENSE_KEY: abcdefg
  DISCOURSE_MAXMIND_BACKUP_PATH: /data/mmdb

## حاوية Docker عديمة الحالة؛ يتم تخزين جميع البيانات في /shared
volumes:
  - volume:
      host: /var/discourse/shared/discourse_test
      guest: /shared
  - volume:
      host: /var/discourse/shared/discourse_test/log/var-log
      guest: /var/log
  - volume:
      host: /var/discourse/shared/discourse_test/data
      guest: /data

لقد أضفت DISCOURSE_MAXMIND_BACKUP_PATH وأضفت مجلداً ثالثاً.

هل الدليل الخاص بـ DISCOURSE_MAXMIND_BACKUP_PATH صحيح؟ هل المسار هو المسار داخل الحاوية؟

هل أحتاج إلى إزالة DISCOURSE_MAXMIND_ACCOUNT_ID و DISCOURSE_MAXMIND_LICENSE_KEY الآن؟

عذراً، متحمس جداً وأيضاً غير واضح قليلاً. :wink:

حسناً :smiley:

تم اكتشاف نسخة احتياطية من MaxMindDB (تم تنزيلها: 2024-07-17 23:15:02 +0000) في /data/mmdb
جارٍ نسخ MaxMindDB من /data/mmdb إلى /var/www/discourse/vendor/data
تخطي تنزيل MaxMindDB حيث تم تنزيله آخر مرة في 2024-07-17 23:15:02 +0000

أعتقد أن هذا هو ما أردت (أو بالأحرى “أردنا”) رؤيته. :smiley:

3 إعجابات

أعتقد أنه كان بإمكانك تخطي وحدة التخزين الإضافية والقيام بـ

DISCOURSE_MAXMIND_BACKUP_PATH: /shared/data

ولكن إذا كانت لديك عملية أخرى تُبقي قاعدة البيانات هذه محدّثة في مكان آخر، فيمكنك تحميل هذا الدليل بحيث يكون لديك نسخة محلية واحدة فقط على محرك الأقراص الخاص بك وستحتاج إلى تحديث تلك النسخة الوحيدة.

إعجابَين (2)

أعتقد أنني سأترك الأمر على هذا النحو. في نظري، إنها تهيئة أوضح يمكن فهمها بعد بضعة أشهر. كما أنها قد تكون أكثر عمومية وتناسب حالات استخدام أكثر من حالتي فقط.

أقوم بنسخ ملفات mmdb الثلاثة من Maxmind إلى هذا الدليل عند تنزيلها. لقد قمت للتو بتعديل البرنامج النصي الذي أستخدمه (بالمناسبة، للتنزيل أستخدم geoipupdate، وهو متاح أيضًا كحزمة لـ Debian (وعلى الأرجح لتوزيعات Linux الأخرى)).

لقد انتهيت للتو من إعادة بناء أربعة حاويات Discourse مختلفة، وكلها بدون أي خطأ! هذا لم يحدث منذ شهور هنا. رائع جدًا! :slight_smile:

3 إعجابات

لا تزال هذه المشكلة قائمة. سأشرح الحادث بالتفصيل:
لقد قمت بتحديث من المسؤول، وتوقف في منتصف الطريق. لذلك بدأت إعادة تجميع من لوحة تحكم ssh. ظهر خطأ، مثال للخطأ أدناه.

ثم قمت بإنشاء مفتاح maxmind جديد وأعدت تجميعه، وظهر خطأ مرة أخرى، نفس الخطأ. (من المثير للاهتمام، ربما لم يتم تنشيط المفتاح).

ثم قمت بتعطيل إعداد maxmind في ملف app.yml. قمت بإعادة تجميعه ونجحت عملية التجميع.

الملحقات التي استخدمتها موضحة في الصورة، أشياء أخرى استخدمتها:

  • Cloudflare R2
  • خادم postgresql منفصل
  • cloudflare

لم أعد أستطيع تحديد سبب المشكلة.

إعجاب واحد (1)