فشل التحديث: إصدار Docker غير مدعوم

أوبونتو 16
نقرت على ترقية الويب كما فعلنا مرارًا. فشلت الآن، التطبيق لن يعيد بناء إصدار Docker غير المدعوم.

هل لديك أفكار؟ يمكنني محاولة ترقية النظام أو ما إلى ذلك، لكن ذلك يتطلب وقتًا كثيرًا لم أكن أمتلكه اليوم.

هل هناك طريقة للعودة؟

حاولت تعيين النسخة إلى التجزئة القديمة لكني على الفور حصلت على رسالة أن إصدار Docker غير مدعوم عندما حاولت إعادة البناء.

لا يمكنك التحديث.

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

أوه. آسف. لم أقرأ بعناية كافية.

لا. لا يمكنك العودة.

قد تتمكن من ترقية دوكر إذا استخدمت تثبيت دوكر.

لقد قمت بترقية OS وما إلى ذلك وتمت الترقية عبر Postgres 15، لكن الآن عندما أقوم بإعادة بناء التطبيق أحصل على

2025-05-18 14:58:28.208 UTC [1455] discourse@discourse ERROR:  العمود "require_message" غير موجود عند الحرف 72
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse STATEMENT:  SELECT id, name, name_key, description, notify_type, auto_action_type, require_message, applies_to, position, enabled, score_type FROM "flags" ORDER BY "flags"."position" ASC
** فشل الإضافة **

لا يمكنك بدء Discourse بسبب هذا الخطأ أثناء تهيئة الإضافة:

PG::UndefinedColumn: ERROR:  العمود "require_message" غير موجود
LINE 1: ..._key, description, notify_type, auto_action_type, require_me...
                                                             ^

بعد أن قمت بإعادة البناء (بعد ترقية Postgres)

إجراء الترقيه
------------------
تحليل جميع الصفوف في المجموعة الجديدة                                موافق
تجميد جميع الصفوف في المجموعة الجديدة                                موافق
حذف الملفات من pg_xact الجديدة                                            موافق
نسخ pg_xact القديم إلى الخادم الجديد                                    موافق
تعيين أقدم XID للمجموعة الجديدة                                          موافق
تعيين رقم المعاملة التالي وEpoch للمجموعة الجديدة                           موافق
حذف الملفات من pg_multixact/offsets الجديدة                                موافق
نسخ pg_multixact/offsets القديم إلى الخادم الجديد                          موافق
حذف الملفات من pg_multixact/members الجديدة                                موافق
نسخ pg_multixact/members القديم إلى الخادم الجديد                          موافق
تعيين معرف متعدد المعاملات التالي والإزاحة للمجموعة الجديدة            موافق
إعادة ضبط سجلات WAL                                                         موافق
تعيين توقيت xids والألوان الدنيا للمجموعة الجديدة                        موافق
إعادة تعيين الكائنات العالمية في المجموعة الجديدة                        موافق
إعادة بناء مخططات قاعدة البيانات في المجموعة الجديدة                   موافق
نسخ ملفات العلاقات الخاصة بالمستخدم                                       موافق
تعيين رقم كائن جديد للمجموعة الجديدة                                        موافق
مزامنة بيانات الدليل إلى القرص                                                 موافق
إنشاء سكربت لحذف المجموعة القديمة                                          موافق
التحقق من تحديثات الامتدادات                                                ملاحظة

يحتوي تثبيتك على امتدادات يجب تحديثها
باستخدام أمر ALTER EXTENSION. ستقوم بملف
    update_extensions.sql
عند تنفيذه بواسطة psql بواسطة المستخدم الخارق للقاعدة، بتحديث هذه الامتدادات.


اكتمال التحديث
----------------
إحصائيات المحسن غير منقولة بواسطة pg_upgrade.
بمجرد بدء تشغيل الخادم الجديد، فكر في تشغيل:
    /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages

تشغيل هذا السكربت سيحذف ملفات بيانات المجموعة القديمة:
    ./delete_old_cluster.sh
-------------------------------------------------------------------------------------
اكتمل ترقية PostgreSQL

قاعدة البيانات القديمة 13 مخزنة في /shared/postgres_data_old

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

./launcher rebuild app

هل توجد أي خطوات أخرى يمكنني اتخاذها؟ لست متأكدًا من كيفية فقدان العمود.

نعم. هناك بعض المواضيع حول مشاكل مماثلة. تم التراجع عن عملية ترحيل، أعتقد، لذلك تُركت في حالة عدم يقين.

ربما أضف العمود يدويًا.

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

شكرًا لك!

لا أستطيع حتى تركيب قاعدة البيانات بما يكفي لإضافة العمود. سأحاول تعطيل جميع الإضافات ومعرفة ما إذا كان بإمكاني على الأقل بدء الحاوية.

حسنًا، إليك كيف تمكنا من إصلاحه (ليس لمن هم ضعفاء القلوب)

  1. ترقية Ubuntu إلى إصدار يدعم Docker 20+
    كنا نستخدم Ubuntu 16 وكان عليّ الترقية إلى Ubuntu 20 على الأقل، لذلك قمنا بهذه الترقية مرتين
RELEASE_UPGRADER_ALLOW_THIRD_PARTY=1 do-release-upgrade
  1. بمجرد وصولنا إلى Ubuntu 20، كان علينا تحديث Docker الذي رفض Ubuntu القيام به من تلقاء نفسه.
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# إضافة المستودع إلى مصادر Apt:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release & echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
  1. هذا أوصلنا إلى Docker 28
  2. ثم قم بتشغيل
./launcher rebuild app
  1. سيؤدي هذا إلى ترقية PostgreSQL الخاص بك من 13 إلى 15، انظر:
    PostgreSQL 15 update
  2. بمجرد ترقية قاعدة البيانات بنجاح، قمت بتشغيل
./launcher rebuild app
  1. أدى هذا إلى ظهور خطأ بشأن عمود مفقود
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse ERROR:  column "require_message" does not exist at character 72
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse STATEMENT:  SELECT id, name, name_key, description, notify_type, auto_action_type, require_message, applies_to, position, enabled, score_type FROM "flags" ORDER BY "flags"."position" ASC
** PLUGIN FAILURE **

You are unable to start Discourse due to this error during plugin
initialization:

PG::UndefinedColumn: ERROR:  column "require_message" does not exist
LINE 1: ..._key, description, notify_type, auto_action_type, require_me...
                                                             ^
  1. في هذه المرحلة، لا توجد طريقة لبدء تشغيل الحاوية، لذا ذهبت إلى app.yml وقمت بتعطيل جميع الإضافات ثم قمت بإعادة البناء مرة أخرى
  2. تم إعادة بناء التطبيق أخيرًا، ثم تمكنت من الدخول إلى وحدة تحكم Rails لإضافة العمود المذكور أعلاه يدويًا.
./launcher enter app
rails db
ActiveRecord::Base.connection.execute("ALTER TABLE flags ADD COLUMN require_message BOOLEAN DEFAULT FALSE;")
exit
exit
  1. بمجرد وجود العمود، عدت إلى app.yml وقمت بتمكين جميع الإضافات وقمت بإعادة البناء مرة أخرى
  2. نجحت إعادة البناء … ونحن الآن جاهزون!

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

كان هذا خطأنا بالكامل لقولنا إننا نستخدم إصدارًا قديمًا جدًا من Ubuntu 16، أحد الأشياء الجيدة والسيئة في نظام مستقر هو أنه يميل إلى البقاء.

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

يسرني أنك تمكنت من إصلاحه! هذا مثير للإعجاب حقًا!

لا يمكنك إجراء تحديثات سريعة عندما يكون نظام التشغيل الخاص بك متجاوزًا لدعم نهاية العمر الافتراضي بأربع سنوات. :wink:

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

نعم، در اسمعت، شكراً مرة أخرى على الدرس المستفاد!

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.