مرحبًا جميعًا،
أواجه مشكلة غريبة مع تثبيت Discourse جديد، وسأكون ممتنًا لأي إرشادات.
البيئة
- Discourse Docker (أحدث إصدار مستقر)
- Ubuntu 24.04
- تثبيت جديد باستخدام
discourse_docker - لا توجد إضافات سوى OpenID Connect
- مستودع Git نظيف
- وكيل عكسي مع nginx
- HTTP فقط (بدون HTTPS بعد)
- مستودع Git محلي موجود وهو على الفرع
latest
السلوك الغريب
المستخدمون المجهولون:
تُحمّل الصفحة الرئيسية بشكل طبيعي
المستخدمون المصادق عليهم بشكل عادي:
يعملون بشكل طبيعي
المستخدمون المصادق عليهم عبر OpenID Connect:
يعملون بشكل طبيعي
ولكن كل مستخدم مسؤول محلي في Discourse يواجه توقيتًا زمنيًا (timeout) ثم في النهاية:
عذرًا
واجه البرنامج الذي يشغل هذا المنتدى مشكلة غير متوقعة.
أو في بعض الأحيان
الخادم يواجه حملًا عاليًا حاليًا.
ما اختبرناه
أنشأنا مسؤولًا محليًا جديدًا تمامًا باستخدام
rake admin:create
النتيجة:
- المستخدم كمسؤول →
توقيت زمني 500 - نفس المستخدم بعد تغيير
u.admin = false
u.save!
→
يعمل فورًا
لذا، يمكن إعادة إنتاج المشكلة فقط عندما يكون 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 في توقيت زمني خاص بالمسؤولين فقط؟
سيكون أي أفكار حول مكان التحقيق التالي موضع تقدير كبير.
شكرًا!