المستخدمون الإداريون يواجهون دائمًا خطأ 500 (انتهاء المهلة) في GitUtils.has_commit؟، بينما يعمل المستخدمون العاديون بشكل صحيح

مرحبًا جميعًا،

أواجه مشكلة غريبة مع تثبيت Discourse جديد، وسأكون ممتنًا لأي إرشادات.

البيئة

  • Discourse Docker (أحدث إصدار مستقر)
  • Ubuntu 24.04
  • تثبيت جديد باستخدام discourse_docker
  • لا توجد إضافات سوى OpenID Connect
  • مستودع Git نظيف
  • وكيل عكسي مع nginx
  • HTTP فقط (بدون HTTPS بعد)
  • مستودع Git محلي موجود وهو على الفرع latest

السلوك الغريب

المستخدمون المجهولون:

  • :white_check_mark: تُحمّل الصفحة الرئيسية بشكل طبيعي

المستخدمون المصادق عليهم بشكل عادي:

  • :white_check_mark: يعملون بشكل طبيعي

المستخدمون المصادق عليهم عبر OpenID Connect:

  • :white_check_mark: يعملون بشكل طبيعي

ولكن كل مستخدم مسؤول محلي في Discourse يواجه توقيتًا زمنيًا (timeout) ثم في النهاية:


عذرًا

واجه البرنامج الذي يشغل هذا المنتدى مشكلة غير متوقعة.

أو في بعض الأحيان


الخادم يواجه حملًا عاليًا حاليًا.

ما اختبرناه

أنشأنا مسؤولًا محليًا جديدًا تمامًا باستخدام


rake admin:create

النتيجة:

  • المستخدم كمسؤول → :cross_mark: توقيت زمني 500
  • نفس المستخدم بعد تغيير

u.admin = false
u.save!

:white_check_mark: يعمل فورًا

لذا، يمكن إعادة إنتاج المشكلة فقط عندما يكون admin == true.

السجل

ينتهي وقت العملية دائمًا بعد حوالي 30 ثانية.

تتبع المكدس:


GitUtils.try_git
GitUtils.has_commit?
DiscourseUpdates.new_features
DiscourseUpdates.has_unseen_features?
CurrentUserSerializer
ApplicationLayoutPreloader

ينتهي الوقت دائمًا هنا:


/var/www/discourse/lib/git_utils.rb:33
Kernel#`

ملاحظة مهمة

تشغيل Git يدويًا داخل الحاوية يكون فوريًا.

على سبيل المثال:


git rev-parse HEAD

يعود في حوالي 7 مللي ثانية.

أيضًا:


git merge-base --is-ancestor <current_commit> HEAD

يعود فورًا.

لذا، Git نفسه ليس بطيئًا.

Redis

يبدو أن new_features غير موجود:


redis-cli exists new_features latest_new_feature_created_at

(integer) 0

السؤال

لماذا تقوم GitUtils.has_commit? بإغلاق العملية فقط للمستخدمين المسؤولين بينما تنفذ كل أوامر Git فورًا من سطر الأوامر؟

هل هناك مشكلة معروفة في الإصدارات الأخيرة من Discourse حيث يتسبب DiscourseUpdates أو new_features في توقيت زمني خاص بالمسؤولين فقط؟

سيكون أي أفكار حول مكان التحقيق التالي موضع تقدير كبير.

شكرًا!