git تالف عند إعادة بناء تطبيق المشغل

بعد ترقية docker_manager عبر الـ API (والتي بدت تسير على ما يرام)، عرضت لوحة تحكم المسؤول (_Admin_) صفحة فارغة، حتى لو بدا أن بقية المنتدى تعمل.

لحل هذه المشكلة، لجأت إلى تشغيل:

./launcher rebuild app

ولكن، أثناء تلك العملية، واجهت أخطاء:

I, [2025-07-14T08:54:06.062789 #1]  INFO -- : 
  set -o errexit
  if [ $(git rev-parse --is-shallow-repository) == "true" ]; then
      git remote set-branches --add origin main
      git remote set-branches origin tests-passed
      git fetch --depth 1 origin tests-passed
  else
      git fetch --tags --prune-tags --prune --force origin
  fi
'
error: packfile .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack لا يتطابق مع الفهرس
error: packfile .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack لا يتطابق مع الفهرس
error: packfile .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack لا يتطابق مع الفهرس
error: packfile .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack لا يتطابق مع الفهرس

… ويستمر الخطأ error: packfile في الظهور بشكل متكرر حتى يتم مقاطعتها.

مما يبدو، أصبح مستودع git تالفًا. ولكن أي مستودع git؟
ليس لدي حتى مجلد /var/www/discourse، لذا أفترض أن هذا داخل وحدة تخزين حاوية (container volume)؟

أنا في حيرة من أمري بعض الشيء. شكرًا للمساعدة!

ماذا تقصد بذلك؟

عادةً ما تقوم بتحديث docker_manager عبر واجهة المستخدم.

آه! خطأي. كنت أقصد واجهة المستخدم (UI)، وليس API. سأقوم بتعديلها الآن.

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

حاولت حل المشكلة عن طريق بدء تشغيل حاوية التطبيق والدخول إليها:

./launcher start app
./launcher enter app

ثم تأكدت من حدوث الخطأ عند استدعاء أمر git كمستخدم discourse:

cd /var/www/discourse
sudo -H -E -u discourse bash -c 'git fetch --tags --prune-tags --prune --force origin'

مما أدى إلى:

error: packfile .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack does not match index
error: packfile .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack does not match index
error: packfile .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack does not match index
etc..

حاولت حل المشكلة عن طريق إعادة تسمية discourse واستنساخ نسخة جديدة:

cd /var/www
mv discourse discourse-old
git clone https://github.com/discourse/discourse.git
chown -R discourse:discourse discourse

بمجرد الاستنساخ، حاولت تشغيل git fetch مرة أخرى دون أخطاء!

cd /var/www/discourse
sudo -H -E -u discourse bash -c 'git fetch --tags --prune-tags --prune --force origin'

ولكن عند خروجي من shell الحاوية وحاولت إعادة البناء مرة أخرى باستخدام ./launcher rebuild app، حصلت على نفس الخطأ.

هل يستخدم ./launcher rebuild app حاوية مختلفة عن تلك التي يدخل إليها ./launcher enter app؟

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

نعم، هناك مستويان لـ git، أحدهما في الخارج.

يبدو أن خطأك يحدث بالفعل داخل الحاوية … غريب جدًا!

أخيرًا تمكنت من جعله يعمل!
أعتقد أنه كان مزيجًا بين git تالف ونتيجة ترقية docker سابقة. قمت بحلها عن طريق تقليم جميع حاويات وصور docker:

cd /opt/discourse
./launcher stop app
docker container prune
docker image prune -a
./launcher rebuild app

أدى هذا / انتهى بـ:

Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade.
Once you start the new server, consider running:
    /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages

Running this script will delete the old cluster's data files:
    ./delete_old_cluster.sh
-------------------------------------------------------------------------------------
UPGRADE OF POSTGRES COMPLETE

Old 13 database is stored at /shared/postgres_data_old

To complete the upgrade, rebuild again using:

./launcher rebuild app
-------------------------------------------------------------------------------------

من خلال تشغيل إعادة البناء مرة أخرى، بدأ العمل بالكامل:

./launcher rebuild app
إعجاب واحد (1)