كيف يقوم المرء بتشغيل استعلامات sql إذا لم يبدأ الحاوية؟ (فشل إعادة البناء)

مرحباً.

حاولت تشغيل التحديثات وإعادة البناء، لكنني انتهيت بهذه الرسالة الخطأ الجميلة:

I, [2023-01-18T08:05:48.701709 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all'
I, [2023-01-18T08:05:52.431210 #1]  INFO -- :
I, [2023-01-18T08:05:52.431807 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
2023-01-18 08:05:59.081 UTC [1166] discourse@discourse ERROR:  could not create unique index "index_tags_on_name_ccnew_ccnew_ccnew5"
2023-01-18 08:05:59.081 UTC [1166] discourse@discourse DETAIL:  Key (name)=(vuejs) is duplicated.
2023-01-18 08:05:59.081 UTC [1166] discourse@discourse STATEMENT:  REINDEX INDEX CONCURRENTLY index_tags_on_name_ccnew_ccnew
rake aborted!
StandardError: An error has occurred, all later migrations canceled:

PG::UniqueViolation: ERROR:  could not create unique index "index_tags_on_name_ccnew_ccnew_ccnew5"
DETAIL:  Key (name)=(vuejs) is duplicated.
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/pg.rb:110:in `exec'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/pg.rb:110:in `async_exec'

هناك مواضيع أخرى على المنتدى بها مشاكل مشابهة (1, 2, 3) ولكن عندما أحاول الدخول إلى الحاوية أحصل على هذا:

/var/discourse# ./launcher enter app
x86_64 arch detected.
Error: No such container: app

لذلك، أنا غير قادر على إسقاط الفهارس يدويًا.

هل هناك أي اقتراح آخر حول النهج الذي يجب أن أتخذه بعد ذلك؟

إعجابَين (2)

مرحباً أيونوت،

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

أعتقد أن الالتزام الذي أدخل الهجرة التي فشلت هو هذا:

يمكنك محاولة تثبيت مثيل Discourse الخاص بك على الإصدار السابق وهو الالتزام 690e2f15ab9549486aaa6750e1093c1336bf17f2. قم بتحرير ملف app.yml الخاص بك وقم بتعيين مفتاح version ضمن params. تأكد من إلغاء التعليق على هذا المفتاح أيضاً!

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

إعجابَين (2)

بعد التشغيل، تمكنت من العثور على جميع العلامات المكررة باستخدام إضافة مستكشف البيانات (Data Explorer plugin):

SELECT name, count(*)
    FROM tags
    GROUP BY name
     HAVING count(*) > 1

لبعض الأسباب، كانت هناك حوالي عشر علامات مكررة. أتساءل لماذا وكيف ظهرت هناك في المقام الأول

تمكنت من مسح تلك العلامات المزعجة، وأزلت قفل الإصدار من ملف yml، وأعدت البناء، وتبدو الأمور جيدة الآن.

شكراً لك!

:+1:

5 إعجابات

لقد رأينا هذا في الماضي، إنها مشكلة كابوس ولكن تم عزلها لتكون متعلقة بالترقية.

يعتمد هيكل الفهرس في PG على اللغة المحلية في وقت التثبيت ويمكن أن تؤدي الترقيات إلى كابوس في بعض الأحيان.

إذا لم يتم إصدار إعادة الفهرسة في وقت مبكر بما فيه الكفاية، فقد تحدث مشاكل. لم تقم بعض ترقيات Docker PG المبكرة لدينا بتشغيل هذا… وبعض التثبيتات القديمة للأسف لديها قنبلة موقوتة.

تم حل هذا إلى حد كبير هذه الأيام في النظام البيئي ولكن بعض الألم لا يزال قائماً.

إعجابَين (2)

ربما يساعد هذا في تحديد السبب بشكل أكبر، لذا إليك بعض التفاصيل الإضافية حول النظام:

التثبيت قديم بالفعل، منذ عام 2014، ولكن يتم تحديث النظام مرة واحدة على الأقل شهريًا (على الرغم من أنه عادةً ما يكون كل أسبوعين). لذلك لم يتم تخطي أي إصدار رئيسي على الإطلاق.

لا يوجد قفل إصدار، لذلك نحن نعمل بشكل أساسي على أحدث إصدار متاح في الفرع main (YOLO!).

على الرغم من أننا جربنا عددًا قليلاً جدًا من الإضافات غير الرسمية منذ فترة، إلا أن جميع الإضافات المثبتة رسمية وقد كان الأمر كذلك على مدار … 5 سنوات أو أكثر.

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

أواجه نفس المشكلة، لقد اتبعتك حتى هذه الجملة.

كيف تزيل التكرارات فعليًا؟ هل تصدر ببساطة عبارة delete SQL في Data Explorer؟ ماذا عن سجلات الجداول الخارجية التي تشير إلى هذه العلامة؟

تحديث 1

حسنًا، أرى أنه لا يمكنك تنفيذ عبارات update.

لقد استخدمت الآن الواجهة الرسومية وقمت ببساطة بإعادة تسمية العلامة.

قم بتحرير الوسم (بالانتقال إلى /tag/foo) وقم بإعادة تسميته أو إزالته.

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