فشل الترقية: إصدار PostgreSQL 13 ... غير متوافق مع ... الإصدار 10.12

لدي منتدى صغير، thmooster.net، مبني على Discourse ولم قمت بترقيته منذ بضعة أشهر.

نقرت على “تحديث” في توصية “المسؤول” للترقية، وأُخبرت بأن عليّ إجراء الترقية من موجه الأوامر (shell prompt) بدلاً من ذلك، مع إعطائي ثلاثة أسطر للتنفيذ:

    cd /var/discourse
    git pull
    ./launcher rebuild app

نفّذت هذه الأوامر الثلاثة. فشل أمر “rebuild app” في البداية لأنني لم أكن أملك 5 جيجابايت من المساحة الحرة على خادم Linode الصغير الخاص بي، لذا أضفت مساحة قرص إضافية، وبدا أن أمر “rebuild app” اكتمل بنجاح.

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

تفحصت الأمور وأعدت تشغيل الخادم، لكن الموقع لا يزال لا يعمل، ثم قمت بمزيد من الاستكشاف.

يبدو أن واجهة nginx الأمامية تعمل بشكل صحيح، لكن عندما أحاول الوصول إلى المنتدى عبر الويب، مثل أي مستخدم عادي، أحصل على خطأ “502 Bad Gateway” من واجهة nginx.

الملف “/var/discourse/shared/standalone/log/var-log/postgres/current” مليء بأخطاء مثل:

2021-04-17 13:54:37.785 UTC [7095] FATAL: database files are incompatible with server
2021-04-17 13:54:37.785 UTC [7095] DETAIL: The data directory was initialized by PostgreSQL version 13, which is not compatible with this version 10.12 (Debian 10.12-2.pgdg100+1).

لدي نسخ احتياطية جيدة للمنتدى في الدليل:
/var/discourse/shared/standalone/backups/default

الآن، ماذا يجب أن أفعل؟

شاهد تحديث PostgreSQL 13

سأفحص رابط PostgreSQL 13 الخاص بك الآن - شكرًا لك.

هل هناك طريقة كان ينبغي لي أن أعرف بها هذا التعقيد، أو كان بإمكاني معرفته، دون أن أكون مدير نظام بدوام كامل أتابع باستمرار نشاط التقنيات الأساسية (PostgreSQL و Ruby و Linux و …) وراء Discourse؟

إذا كان الأمر كذلك، فهل يمكن إضافة سطر آخر إلى سطور التعليمات الثلاثة (cd /var/discouse; …) يقول: “تحذير: راجع أولاً هذا الرابط للحصول على معلومات أخرى قد تنطبق”؟

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

سأحاول قراءة صفحة تحديث PostgreSQL 13 التي شاركتها معي بلطف عدة مرات أخرى.

ولكن، في أول قراءتين… أشعر أنني ضائع تمامًا تقريبًا. ليس لدي أي فكرة عن الأقسام في تلك الصفحة التي قد تنطبق على وضعي (إن وجدت).

على سبيل المثال، تركز صفحة تحديث PostgreSQL 13 (وهو أمر معقول، كما أعتقد) على الترقية من PostgreSQL 12 إلى 13. أما رسالة الخطأ الخاصة بي:

تم تهيئة دليل البيانات بواسطة إصدار PostgreSQL 13، وهو غير متوافق مع هذا الإصدار 10.12 (Debian 10.12-2.pgdg100+1).

فهي تتحدث عن الإصدار 10.12… هل هذا يعني PostgreSQL 10، أم PostgreSQL 12؟ (عادةً ما أقرأ “10.12” على أنها تشير أساسًا إلى الإصدار 10، وليس 12).

أها - ملفي:

/var/discourse/shared/standalone/postgres_data_old/PG_VERSION

يحتوي على القيمة “10”.

لذا فإن رابط PostgreSQL 13 المذكور أعلاه، بقدر ما ينطبق على ترقية من الإصدار 12 إلى 13، ليس بالضرورة ذا صلة، حسب علمي (وهو علم ضئيل للغاية).

أشعر بقلق شديد إزاء هذا الأمر… أشبه بمحاولة إصلاح ذخائر عسكرية حية في كهف مظلم، دون تعليمات، وبدون تدريب، بل وحتى دون التأكد من نوع الذخائر التي أتعامل معها.

هذا التعليق، الذي عثرت عليه بالصدفة تمامًا هكذا:

https://meta.discourse.org/t/how-do-i-manually-update-discourse-and-docker-image-to-latest/23325/238?u=thepythoniccow

“يجب عليك إعادة البناء مرة أخرى. أعتقد أنك تجاهلت رسالة حول ترقية postgres.”

جعلني أفكر في أنني يجب أن أجرب أمر “cd /var/discourse; git pull; ./launcher rebuild app” مرة أخرى… يبدو أنه يمكن تجربة هذا “إعادة البناء” عدة مرات.

لقد سجلت المخرجات هذه المرة. وأؤكد لك أنني تجاهلت معظم الرسائل في المخرجات. فعدد أسطر المخرجات الناتجة عن أمر “./launcher rebuild app” وحده يصل إلى 2020 سطرًا. سيستغرق مني شهرًا من أيام الأحد تعلم جميع البرامج التي تعمل وما تعنيه رسائل مخرجاتها. لا توجد طريقة عملية لأعرف ما إذا كنت أتجاهل شيئًا حاسمًا في تلك المخرجات.

ومع ذلك…

لقد نجح الأمر !!

عاد موقعي الإلكتروني للعمل، ويعمل بإصدار البرنامج الحالي.

إذن الدرس لهذا اليوم: إذا فشل أمر “./launcher rebuild app” في توفير موقع يعمل، جربه مرة أخرى.

إعجابَين (2)

آه. عذراً، لم أفكر في إخبارك بما أخبرتُ به ذلك الشخص!

:tada: عظيم! يسعدنا جداً أن الأمر قد نجح معك!

نعم. قد يكون هذا هو الشيء الوحيد الآخر الذي تحتاج إلى معرفته. :slight_smile:

يسعدنا أن الموقع عاد للعمل من جديد!

3 إعجابات

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