لقد حاولت ترقية نسخة 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
سأكون ممتنًا لأي توجيه حول ما إذا كانت هناك طريقة للتعافي من هذا (أو إذا كنت بحاجة إلى تحمل المسؤولية والقيام بتثبيت جديد). شكرًا!
كانت لدي مشكلة مماثلة، ولكن يبدو من غير المرجح أن يساعدك حلي.
ليس لديك SKIP_POST_DEPLOYMENT_MIGRATIONS معينًا في ملف app.yml الخاص بك، أليس كذلك؟ إذا كان الأمر كذلك، فأنت بحاجة إلى ترحيل قاعدة البيانات مع تعيينها على صفر ثم إعادة البناء، ولكن لا أعتقد أن هذه هي مشكلتك.
لقد قمت بإفراغ جميع الجداول التي كانت تسبب لي أخطاء (واحدًا تلو الآخر، وفي النهاية كان هناك 7)، حتى تمكنت من إعادة بناء التطبيق دون أي خطأ.
في حالتك، يبدو أن المشكلة هي عمود:
PG::DuplicateColumn: ERROR: column "bookmarkable_id" of relation "bookmarks" already exists
ربما يجب عليك البحث عن الجدول الذي ينتمي إليه، لتتمكن من إفراغه، أو يمكنك ببساطة إسقاط هذا العمود.
أعتقد أن المشكلة تكمن في أنه عند الترحيل جزئيًا، تكون هذه الجداول قد تم إنشاؤها بالفعل، وبالتالي لا يمكن إنشاؤها مرة أخرى وتعطي خطأ. ربما يمكن إضافة شرط لهذه العملية، حتى لا تعطي أخطاء؟ (أنا لست خبيرًا) @pfaffman
أعتقد أنك تريد إزالة العمود 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 أعلاه.
يبدو هذا حلاً محتملاً. يجب أن تكون قادرًا على الترقية إلى هذا الإصدار وربما يمكنك بعد ذلك الوصول إلى الإصدار الحالي؟ شيء من هذا القبيل منطقي بالنسبة لي.