التعافي من ترقية فاشلة/تم تطبيقها جزئيًا

لقد حاولت ترقية نسخة Discourse الخاصة بي، ولكن بسبب عدد قليل من المشكلات، يبدو أنها فشلت في حالة مطبقة جزئيًا. عند تشغيل ./launcher rebuild app، أحصل على رسالة الخطأ التالية، والتي تشير لي إلى ترحيل تم تطبيقه بالفعل (جزئيًا):

I, [2022-03-24T21:13:16.043071 #1]  INFO -- : cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

PG::DuplicateColumn: ERROR:  column "bookmarkable_id" of relation "bookmarks" already exists

سأكون ممتنًا لأي توجيه حول ما إذا كانت هناك طريقة للتعافي من هذا (أو إذا كنت بحاجة إلى تحمل المسؤولية والقيام بتثبيت جديد). شكرًا!

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

يمكنك تشغيل

./launcher start app

لبدء الحاوية القديمة. هذا سيعيدك.

إعجابَين (2)

نعم، أنا على علم بذلك (وقد فعلت ذلك) - ومع ذلك، أتساءل ما هي خطوتي التالية فيما يتعلق بالترقية.

إعجابَين (2)

أوه. لم يكن ذلك مفيدًا إذن :person_shrugging:

كانت لدي مشكلة مماثلة، ولكن يبدو من غير المرجح أن يساعدك حلي.

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

لا، لا يبدو كذلك.

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

تحقق من هذا:

لقد قمت بإفراغ جميع الجداول التي كانت تسبب لي أخطاء (واحدًا تلو الآخر، وفي النهاية كان هناك 7)، حتى تمكنت من إعادة بناء التطبيق دون أي خطأ.

في حالتك، يبدو أن المشكلة هي عمود:

PG::DuplicateColumn: ERROR: column "bookmarkable_id" of relation "bookmarks" already exists

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

أعتقد أن المشكلة تكمن في أنه عند الترحيل جزئيًا، تكون هذه الجداول قد تم إنشاؤها بالفعل، وبالتالي لا يمكن إنشاؤها مرة أخرى وتعطي خطأ. ربما يمكن إضافة شرط لهذه العملية، حتى لا تعطي أخطاء؟ (أنا لست خبيرًا) @pfaffman

يبدو صحيحًا، @undasein.

أعتقد أنك تريد إزالة العمود bookmarkable_id من جدول الإشارات المرجعية. لذلك بعد الدخول إلى الحاوية والدخول إلى postgres بهذا الشكل:

cd /var/discourse
./launcher enter app
su - postgres
psql

ثم ستقوم بـ

ALTER TABLE bookmarks
DROP COLUMN bookmarkable_id
DROP COLUMN bookmarkable_type;

ولكن أخذ نسخة احتياطية لقاعدة البيانات فقط لن يكون فكرة سيئة إذا كان المنتدى قيد التشغيل. إذا لم يكن كذلك، يمكنك إجراء نسخة احتياطية باستخدام discourse backup بعد السطر enter app أعلاه.

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

نفس المشكلة هنا! هل هذا هو الحل الصحيح الذي يجب اتباعه؟

كان هذا تخميني. يمكنك تجربته وإخبارنا.

لست خبيرًا في الخطاب.

@sam هل لديك أي أفكار للمضي قدمًا؟ التثبيت القياسي والترقية يتضح أنه كابوس.

هل الطريقة المذكورة أعلاه هي الطريقة الصحيحة لحل هذه المشكلة؟

شكرًا مقدمًا.

للأسف لم ينجح الأمر، وما زلت أتلقى

PG::DuplicateColumn: ERROR:  column "bookmarkable_id" of relation "bookmarks" already exists

هل كان هناك أي إجراء آخر يجب اتخاذه بعد هذه الأوامر؟

ALTER TABLE bookmarks
DROP COLUMN bookmarkable_id
DROP COLUMN bookmarkable_type;

شكراً لمساعدتك.

مرحباً نيك،
أحاول إعادة إنتاج هذا، ما هو الـ commit الخاص بنسختك؟
يمكنك المحاولة باستخدام

version: cd7ce52138bed391d5efc56366e7a6517a6079e7

في ملف app.yml الخاص بك، هذا قبل 10 أيام، قبل إعادة الـ commit الذي تم التراجع عنه والذي يبدو أنه كان لديه مشاكل مماثلة.

إعجابَين (2)

صباح الخير بن،

هل من الممكن أن تعطيني شرحاً للأوامر للقيام بذلك من فضلك؟

يمكنني التحديث وكل ذلك بسهولة ولكن هذه هي المرة الأولى التي يحدث فيها خطأ، وبصراحة أنا خارج منطقة راحتي تمامًا هههههه

هل يمكنك تشغيل ./launcher start app والتحقق من الإصدار المثبت في https://your.domain/admin حتى أتمكن من محاولة تتبع خطواتك. هل هناك أي إضافات؟

إعجابَين (2)

مرحباً بن،

الإصدار المثبت: 2.9.0.beta2
(5374e587a3)

الإضافات المثبتة:
discourse-reactions
docker_manager
styleguide

شكراً لك،
نيك

./launcher start app
-bash: ./launcher: No such file or directory
 cd /var/discourse

قبل

./launcher start app
إعجابَين (2)

لذلك، لاحظت أن لدي بعض تحديثات أوبونتو، لذا كل شيء على الخادم محدث

حاولت مرة أخرى ولا يزال

PG::DuplicateColumn: ERROR:  column "bookmarkable_id" of relation "bookmarks" already exists

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

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