I, [2020-12-05T10:59:38.848743 #1] INFO -- : > cd /var/www/discourse && git remote set-branches origin v2.6.0
I, [2020-12-05T10:59:38.852600 #1] INFO -- :
I, [2020-12-05T10:59:38.852639 #1] INFO -- : > cd /var/www/discourse && git fetch --depth 1 origin v2.6.0
From https://github.com/discourse/discourse
* tag v2.6.0 -> FETCH_HEAD
I, [2020-12-05T10:59:41.405163 #1] INFO -- :
I, [2020-12-05T10:59:41.405307 #1] INFO -- : > cd /var/www/discourse && git checkout v2.6.0
error: pathspec 'v2.6.0' did not match any file(s) known to git
I, [2020-12-05T10:59:41.411796 #1] INFO -- :
بدلاً من المخرجات المتوقعة عند استخدام التغيير السابق مباشرةً:
I, [2020-12-05T11:22:14.717910 #1] INFO -- : > cd /var/www/discourse && git fetch origin v2.6.0
From https://github.com/discourse/discourse
* tag v2.6.0 -> FETCH_HEAD
I, [2020-12-05T11:22:15.672616 #1] INFO -- :
I, [2020-12-05T11:22:15.672683 #1] INFO -- : > cd /var/www/discourse && git checkout v2.6.0
Note: checking out 'v2.6.0'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
HEAD is now at d6121249d3 Version bump to v2.6.0
لا أعتبر هذا خطأً بحد ذاته، لكننا نود تقديم بعض الإرشادات حول كيفية تثبيت الإصدارات القديمة من Discourse، حتى لو تطلب ذلك استخدام قالب أكثر تعقيدًا أو ما شابه.
أعتقد أن المشكلة هنا هي أن الوسوم غير معروفة محليًا عند إجراء عملية الاسترجاع، مثل ما ورد في المسألة التالية (غير مرتبطة بـ Discourse):
يجب أن يؤدي تشغيل git fetch --all إلى حل المشكلة، لكنني لا أعرف إلى أي مدى قد يزيد ذلك من حجم الصورة (ما لم يتم مسح المراجع غير المستخدمة لاحقًا بواسطة تعليمات أخرى).
مع ذلك، أعتقد أن الأمر git clone --depth 1 https://github.com/discourse/discourse.git --branch=$version سيحل المشكلة، لأن الوسيطة branch تقبل كلاً من الفروع والوسوم، لكنني لم أجربها بعد ولا أعرف ما إذا كان هناك سبب لاستخدام الفرع الرئيسي (master) حاليًا في عملية الاستنساخ.
عند تنفيذ الأمر git clone --depth 1 https://github.com/discourse/discourse.git --branch=v2.6.0، يكون حجم المجلد بالكامل 212 ميجابايت، بينما يبلغ حجم مجلد .git بداخله 46 ميجابايت، لذا أعتقد أن هذا مقبول.
المشكلة هي أنه وقت بناء الصورة لا أعرف الفرع الذي ستريده في المستقبل.
تم تغيير الإعداد الحالي لتقليل حجم الصورة، مما أدى إلى تقليل حجم الصورة المضغوطة بمقدار 250 ميجابايت (25%)، وهو فوز كبير. يعمل هذا بشكل جيد عند استخدام الفروع العادية مثل stable و beta أو tests-passed.
كحل بديل، إذا كنت ترغب في التبديل إلى وسم معين، يمكنك تطبيق ما يلي على ملف app.yml:
حل بديل آخر هو إضافة مفتاح base_image إلى المستوى الأعلى في ملف app.yml مع قيمة صورة أساسية أقدم. نظرًا لأننا لا نحاول حتى الحفاظ على توافق الصور الجديدة مع إمكانية تشغيل إصدارات أقدم من Discourse، فقد يكون هذا ضروريًا إذا كنت تعود إلى إصدارات قديمة جدًا.
أنت محق، في ذلك الوقت لا نعرف الإصدار. يبدو أن الصورة الأساسية تستخدم الإصدار الحالي + فرع tests-passed، على الرغم من أن الفرع سيحتوي على commit في الوقت الذي تم فيه بناء الصورة.
أليس من الممكن أن تكون الطريقة الحالية تؤدي إلى إعادة بناء أبطأ، حتى عند استخدام فرع tests-passed؟
عند استدعاء `git pull`، **يتم سحب المستودع بالكامل**، وقد يستغرق عدة دقائق، لأنه تم إجراء استنساخ ضحل (shallow clone) فقط من قبل. يمكنك تجربة تشغيل التعليمات أعلاه محليًا ورؤية النتيجة.
لا أقول إن وجود المستودع بالكامل في الصورة الأساسية أفضل، لكن الكود في `web.template.yml` سيعمل في كل إعادة بناء، حتى لو تمت إضافة إضافة (plugin) واحدة فقط أو تغيير إعداد في `app.yml`. ما أفعله عادةً في مشاريعي (غير discourse) هو إنشاء صورة جديدة لكل إصدار جديد، لكن قد لا يكون ذلك ممكنًا بالنسبة لك (بالنظر إلى الطريقة التي تتبعها حاليًا).
ألم تلاحظ أي زيادة في وقت إعادة البناء؟ (أو ربما أن هذه الزيادة ليست كبيرة مقارنة بإجمالي وقت إعادة البناء في معظم الحالات)
تحديث
اختبرت الخطوات المذكورة أعلاه مرة أخرى وكانت سريعة. أعتقد أنني نفذت أمرًا آخر في المحاولة الأولى غيّر شجرة git، مما أدى في النهاية إلى محاولة سحب كل شيء عند تشغيل git pull.
نعم، أرى أنه يقوم بجلب البيانات ثم يتحقق من الفرع الصحيح بعد السحب، لذا أعتقد أن أمر git pull غير ضروري (لم أجرب ذلك بعد).
بالنسبة للعلامات، يبدو أنني ما زلت بحاجة إلى جلب كل علامة بشكل منفصل، لكن يبدو ذلك ممكنًا. علاوة على ذلك، تُستخدم الفروع بشكل أكثر شيوعًا، لذا فإن العلامات ستكون مجرد حالة هامشية.
I, [2020-12-31T11:50:24.701475 #1] INFO -- : > cd /var/www/discourse && find /var/www/discourse ! -user discourse -exec chown discourse {} \+
chown: cannot dereference '/var/www/discourse/public/plugins/styleguide': No such file or directory
شكرًا لتوضيح ذلك: هذا هو الجزء الذي كنت أفتقده بالضبط. لأولئك الذين يشعرون بالحيرة بنفس الطريقة التي كنت أشعر بها، يمكن الحصول على إصدار مُعلَن من Discourse عن طريق:
التأكد من أن معلمة versionغير مضبوطة في app.yml، على سبيل المثال: