مساعدة في نشر إصدارات أقدم من Discourse

يجب أن يكون هناك خطأ هنا، لقد حاولت السحب عن طريق الوسم v3.6.0.beta2 وواجهت الخطأ التالي:

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && sudo -H -E -u discourse bash -c '
  set -o errexit
  git fetch --tags --prune-tags --prune --force origin
  if [[ $(git symbolic-ref --short HEAD) == v3.6.0.beta2 ]] ; then
      git pull
  else
      git -c advice.detachedHead=false checkout v3.6.0.beta2
  fi
' failed with return #<Process::Status: pid 146 exit 128>
Location of failure: /usr/local/lib/ruby/gems/3.4.0/gems/pups-1.4.0/lib/pups/exec_command.rb:138:in `Pups::ExecCommand#spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"code", "cmd"=>["sudo -H -E -u discourse git clean -f", "sudo -H -E -u discourse bash -c '\n  set -o errexit\n  git fetch --tags --prune-tags --prune --force origin\n  if [[ $(git symbolic-ref --short HEAD) == $version ]] ; then\n      git pull\n  else\n      git -c advice.detachedHead=false checkout $version\n  fi\n'", "sudo -H -E -u discourse git config user.discourse-version $version", "mkdir -p tmp", "chown discourse:www-data tmp", "mkdir -p tmp/pids", "mkdir -p tmp/sockets", "touch tmp/.gitkeep", "mkdir -p                    /shared/log/rails", "bash -c \"touch -a           /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log\"", "bash -c \"ln    -s           /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log $home/log\"", "bash -c \"mkdir -p           /shared/{uploads,backups}\"", "bash -c \"ln    -s           /shared/{uploads,backups} $home/public\"", "bash -c \"mkdir -p           /shared/tmp/{backups,restores}\"", "bash -c \"ln    -s           /shared/tmp/{backups,restores} $home/tmp\"", "chown -R discourse:www-data /shared/log/rails /shared/uploads /shared/backups /shared/tmp", "[ ! -d public/plugins ] || find public/plugins/ -maxdepth 1 -xtype l -delete"]}
bootstrap failed with exit code 128
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
adc8ef45e9ae880827c9294dbbf73dfe9ab413a050c83fe3f4722c2911876ce2

المتغير version يدعم الفروع فقط، وليس الوسوم!

الصحيح هو:

params:
  version: release/2025.11

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

آسف على كل هذا الهراء. لحسن الحظ، وجدت حلاً مقبولاً الآن. شكرًا لكم جميعًا.

أواصل تحديث التأثيرات الأخرى التي أحدثها هذا التعديل:

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

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

# إذا قمت بتعديل مستودع الكود المحلي سابقًا، قم أولاً بحفظ التغييرات مؤقتًا
# git stash

# التحديث إلى أحدث إصدار
git pull

# إعادة تطبيق التغييرات المحفوظة مؤقتًا، أو إعادة تحرير ملفات التكوين المقابلة
# git stash pop

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

المقصود هنا بمستودع الكود المحلي هو: https://github.com/discourse/discourse_docker.git

أي مستودع الكود بعد التثبيت القياسي.

أخيرًا، لنختم بملخص.

متطلباتنا هي: تثبيت إصدار محدد

  1. تحديث مستودع الكود المحلي https://github.com/discourse/discourse_docker.git
# الدخول إلى جذر المشروع
cd /var/discourse
# التحديث إلى أحدث إصدار
git pull
  1. تعديل الإصدار المطلوب تحديده

عدل ملف containers/app.yml، وأضف الإعداد التالي في النهاية:

params:
  version: release/2026.1 # أفضل ممارسة هي كتابة: esr
  1. إعادة البناء
./launcher rebuild app

إذا كان version: esr، فلا داعي لقراءة ما يلي.

أولاً، قم بتشغيل git pull للتأكد من أن مستودع الكود المحلي محدث. ثم حدد الفرع المراد نشره، وأخيرًا أعد البناء. ينطبق هذا التوضيح على السيناريو الذي ترغب فيه بالترقية من release/2026.1 إلى release/2026.7.

إذا كنت ترغب فقط في ترقية release/2026.1 المثبت بالفعل، فيجب عليك ببساطة النقر على زر الترقية في لوحة الإدارة. ينطبق هذا على السيناريوهات التي يكون فيها release/2026.1 قد تلقى تحديثات (خاصة إصلاحات الثغرات الأمنية).

أعتقد أنه سيكون من غير المعتاد جدًا تكوين إصدار محدد، بدلاً من نوع/تيار/وسم، مثل latest أو stable. في الواقع، لم أعد متأكدًا من الأوسمة التي تعتبر عادية ومتاحة ومفيدة مع هذا النظام.

هل قمت بمراجعة https://meta.discourse.org/t/configure-a-supported-tracking-branch-to-get-discourse-software-updates/17014/1؟ ربما يساعد ذلك في فهم العلامات المفيدة.

نعم، يكفي للمستخدم العادي استخدام latest الافتراضي. لكن في سياق حالتي، لا بد من دراسة كيفية استخدام إصدار معين. فلا يمكنني أن أقول لـ boss: “آسف، لا يدعم Discourse حاليًا استرجاع إصدار معين، ولا يمكننا التحديث سوى إلى أحدث إصدار.”

هذا المنشور مفيد جدًا، سأقوم بقراءته بعناية. شكرًا لك.

لم أكن قد رأيت ذلك - شكرًا لك. يبدو أننا يجب أن نستخدم الآن latest/release/esr. أرى أن ملف app.yml الخاص بي (القديم) يلتقط الإعداد الافتراضي لأنه تم تعليقه:

  ## أي إصدار من Git يجب أن يستخدم هذا الحاوية؟ (الافتراضي: tests-passed)
  #version: tests-passed

version لا يدعم الوسوم حاليًا، ولإضافة هذه الميزة، يجب تعديل سكريبت البناء. الممارسة المثلى كانت:

params:
  version: esr

لكن حاليًا، يجب تعديله إلى:

params:
  version: release/2026.1

مثير للاهتمام. حتى قبل استراتيجية إصدار الإصدارات الجديدة، كانت beta وسمًا وليس فرعًا منذ فترة طويلة: Upcoming changes to the beta branch of Discourse

أنا أيضًا، وأنا في حيرة من أمري، لكن كود البناء الحالي لا يمكنه بالفعل استخدام الوسوم. لم يكن ينبغي أن يكون الأمر كذلك.

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

version: esr يجب أن تعمل أيضًا. النظام مصمم لدعم الوسوم. يتم تنفيذه كـ git checkout $version.

لا يجب عليك إجراء هذا التغيير في web.template.yml. يجب عليك إجراؤه في containers/app.yml المحدد لموقعك.

يبدو أن هناك خطأً ما هنا. كنت أعمل على الإصدار v3.5.0 beta3 مع ضبط ملف yml على version: tests-passed.

ثم لاحظت هذا التغيير في الترقيم، لذا قبل إعادة البناء، قمت بتغيير ملف yml إلى version: esr وقمت بعد ذلك بإعادة البناء من سطر الأوامر.

الآن في Discourse أرى:

تم التثبيت
2026.3.0-latest.1

يبدو أن هذا يستخدم وسم tests-passed بدلاً من وسم esr. لقد تحققت من أن ملف app.yml يعرض الإصدار على أنه esr، فلماذا يستخرج أحدث بناء؟

إذن، عمليًا، لم يعد هناك طريقة للحصول على أحدث إصدار مستقر / ESR؟

هل يمكنك مشاركة الأسطر ذات الصلة من ملف app.yml؟ هل version: محدد بالفعل تحت قسم params:؟ وهل قمت بإزالة حرف التعليق # الخاص بـ YAML من بداية السطر بالتأكيد؟

فقط للمعلومية، إذا كنت ترغب في العودة إلى ESR، فستحتاج إما إلى استعادة نسخة احتياطية سابقة، أو الانتظار حتى إصدار ESR التالي في يوليو. لا يتم دعم التراجع عن تثبيت discourse :cry:

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

هل تلاحظ أي شيء خاطئ هنا؟

أعتقد أن version يجب أن تكون مُزاحة لأنها جزء من params.

نعم، كنت أقوم بالتكوين مباشرة في containers/app.yml في البداية، لكنني لا أعرف السبب في عدم فعالية ذلك، لذا اضطررت لتعديل templates/web.template.yml مباشرة. سأحاول مرة أخرى التعديل في containers/app.yml.

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

التكوين كالتالي:

params:
  version: v3.6.0.beta2

الخطأ كالتالي:

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && sudo -H -E -u discourse bash -c '
  set -o errexit
  git fetch --tags --prune-tags --prune --force origin
  if [[ $(git symbolic-ref --short HEAD) == v3.6.0.beta2 ]] ; then
      git pull
  else
      git -c advice.detachedHead=false checkout v3.6.0.beta2
  fi
' failed with return #<Process::Status: pid 146 exit 128>
Location of failure: /usr/local/lib/ruby/gems/3.4.0/gems/pups-1.4.0/lib/pups/exec_command.rb:138:in 'Pups::ExecCommand#spawn'
exec failed with the params {"cd" => "$home", "hook" => "code", "cmd" => ["sudo -H -E -u discourse git clean -f", "sudo -H -E -u discourse bash -c '\n  set -o errexit\n  git fetch --tags --prune-tags --prune --force origin\n  if [[ $(git symbolic-ref --short HEAD) == $version ]] ; then\n      git pull\n  else\n      git -c advice.detachedHead=false checkout $version\n  fi\n'", "sudo -H -E -u discourse git config user.discourse-version $version", "mkdir -p tmp", "chown discourse:www-data tmp", "mkdir -p tmp/pids", "mkdir -p tmp/sockets", "touch tmp/.gitkeep", "mkdir -p                    /shared/log/rails", "bash -c \"touch -a           /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log\"", "bash -c \"ln    -s           /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log $home/log\"", "bash -c \"mkdir -p           /shared/{uploads,backups}\"", "bash -c \"ln    -s           /shared/{uploads,backups} $home/public\"", "bash -c \"mkdir -p           /shared/tmp/{backups,restores}\"", "bash -c \"ln    -s           /shared/tmp/{backups,restores} $home/tmp\"", "chown -R discourse:www-data /shared/log/rails /shared/uploads /shared/backups /shared/tmp", "[ ! -d public/plugins ] || find public/plugins/ -maxdepth 1 -xtype l -delete"]}
bootstrap failed with exit code 128
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
adc8ef45e9ae880827c9294dbbf73dfe9ab413a050c83fe3f4722c2911876ce2

السبب الجذري هو أن أمر git symbolic-ref --short HEAD يمكنه فقط إرجاع اسم الفرع.