كيفية التحقق مما يمنع ترحيل rake؟

أحاول استخدام مواقع متعددة، لقد قمت بتثبيت النسخة الثانية وهي تعمل بشكل رائع.

لكن الآن لا يمكنني إعادة البناء. تظهر السجلات:

تحذير " > babel-plugin-debug-macros@0.4.0-pre1" لديه تبعية نظير غير ملباة " @babel/core@^7.0.0".
تحذير "workspace-aggregator-ffab61d1-8b70-4cda-8f38-dde575adc062 > discourse > @uppy/xhr-upload@3.1.0" لديه تبعية نظير غير صحيحة " @uppy/core@^3.0.6".
PG::UniqueViolation: خطأ: قيمة المفتاح المكرر تنتهك قيد التفرد "idx_category_users_user_id_category_id"
التفاصيل: المفتاح (user_id, category_id)=(-4, 9) موجود بالفعل
Pups::ExecError: cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate' فشل مع العودة #
<Process::Status: pid 695 exit 1>
مكان الفشل: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
فشل التنفيذ مع المعلمات {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:\nmigrate'"]}
فشل التهيئة مع رمز الخروج 1

حاولت بدون إضافات ولا يزال معطلاً. يمكنني بدء التطبيق ولكن لا يمكنني إعادة البناء.

هل قمت بتثبيت Discourse Chatbot :robot: (يدعم ChatGPT)؟

نعم وحاولت إلغاء التثبيت حينها (لأنني رأيت أنني لا أستطيع اختبار الإضافات في مواقع متعددة دون اختيارها يدويًا).

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

إعجابَين (2)

شكرًا. هل يمكنك تأكيد ما إذا كان هذا هو ما أبحث عنه؟

discourse=# \d category_users
                                            Table "public.category_users"
       Column       |            Type             | Collation | Nullable |                  Default                   
--------------------+-----------------------------+-----------+----------+--------------------------------------------
 id                 | integer                     |           | not null | nextval('category_users_id_seq'::regclass)
 category_id        | integer                     |           | not null | 
 user_id            | integer                     |           | not null | 
 notification_level | integer                     |           | not null | 
 last_seen_at       | timestamp without time zone |           |          | 
Indexes:
    "category_users_pkey" PRIMARY KEY, btree (id)
    "idx_category_users_category_id_user_id" UNIQUE, btree (category_id, user_id)
    "index_category_users_on_user_id_and_last_seen_at" btree (user_id, last_seen_at)

لقد جربت DROP INDEX idx_category_users_category_id_user_id ولكنني سأكون ممتنًا جدًا للأمر الدقيق هنا :slight_smile:

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

ما هي المشكلة المحددة هنا؟

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

يجب ألا تحذف الفهرس!

تحتاج فقط إلى حذف السجل المكرر.

ابحث عن السجل الثاني الذي يحتوي على user_id = -4 و category_id 9 واحذفه باستخدام id الخاص به.

هذه عملية محفوفة بالمخاطر، لذا تحقق أولاً باستخدام:

SELECT FROM category_users WHERE id = <the second id>;

للتأكد من أنه يعيد سجلاً واحداً فقط، ثم:

DELETE FROM category_users WHERE id = <the second id>;

هل يمكنك تذكر ما هي التغييرات التي أجريتها فيما يتعلق بالبوت، إن وجدت؟

3 إعجابات

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

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

إعجابَين (2)

حسنًا، ربما لم يكن الأمر كله خطئي :sweat_smile:

إعجابَين (2)