سأنتقل إلى جهاز افتراضي جديد وأستعيد قاعدة البيانات هناك. إنه أسهل، ويتطلب وقت توقف قليل، وإذا حدث خطأ، يمكنك ببساطة الاستمرار في استخدام الخادم الذي يعمل.
لقد قمت بترقية 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
هل توجد أي خطوات أخرى يمكنني اتخاذها؟ لست متأكدًا من كيفية فقدان العمود.
لست متأكدًا من كيفية القيام بذلك، وبشكل أكثر تحديدًا إلى أي جدول وما إلى ذلك. هل توجد معلومات حول ذلك يمكنني العثور عليها؟ لقد وجدت المنشور الذي تشير إليه، لكن لم تكن هناك تفاصيل محددة.
سيؤدي هذا إلى ترقية PostgreSQL الخاص بك من 13 إلى 15، انظر: PostgreSQL 15 update
بمجرد ترقية قاعدة البيانات بنجاح، قمت بتشغيل
./launcher rebuild app
أدى هذا إلى ظهور خطأ بشأن عمود مفقود
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...
^
في هذه المرحلة، لا توجد طريقة لبدء تشغيل الحاوية، لذا ذهبت إلى app.yml وقمت بتعطيل جميع الإضافات ثم قمت بإعادة البناء مرة أخرى
تم إعادة بناء التطبيق أخيرًا، ثم تمكنت من الدخول إلى وحدة تحكم Rails لإضافة العمود المذكور أعلاه يدويًا.
./launcher enter app
rails db
ActiveRecord::Base.connection.execute("ALTER TABLE flags ADD COLUMN require_message BOOLEAN DEFAULT FALSE;")
exit
exit
بمجرد وجود العمود، عدت إلى app.yml وقمت بتمكين جميع الإضافات وقمت بإعادة البناء مرة أخرى
نجحت إعادة البناء … ونحن الآن جاهزون!
شكرًا لك @pfaffman على استجابتك السريعة في عطلة نهاية الأسبوع. سنقوم بإنشاء قطرة جديدة محدثة والانتقال إليها. كان من المفترض أن تكون هذه ترقية سريعة في مكانها من واجهة الويب. ولكن يبدو أن البرنامج النصي لا يختبر توافق Docker. عندما قام بترقية Docker الخاص بـ Discourse، ألقى خطأ Docker غير المتوافق.
كان هذا خطأنا بالكامل لقولنا إننا نستخدم إصدارًا قديمًا جدًا من Ubuntu 16، أحد الأشياء الجيدة والسيئة في نظام مستقر هو أنه يميل إلى البقاء.