يبدو أن هذه المشكلة التي تم الإبلاغ عنها في الموضوع المرتبط لا تزال قائمة بالنسبة لي. أنا على أحدث إصدار وقمت بسحب التغييرات وإعادة بناء المشغل بالأمس.
عند محاولة تسمية قناة دردشة جديدة بنفس اسم أي قناة دردشة مستخدمة سابقًا، يحدث خطأ 500 في وحدة تحكم JavaScript.
في سجلات أخطاء Discourse، أحصل على:
فشل في معالجة الاستثناء في تطبيق معالجة الاستثناءات : ActiveRecord::RecordNotUnique : PG::UniqueViolation: خطأ: قيمة المفتاح المكررة تنتهك القيد الفريد "index_chat_channels_on_slug"
التفاصيل: المفتاح (slug)=(sec-fhir) موجود بالفعل.
في وحدة تحكم Rails، يمكنني رؤية أن ChatChannels المحذوفة قد اختفت، لكنني أشك في أن الاسم المستعار (slug) المحذوف لا يزال موجودًا في فهرس أو في تبعية أخرى لقاعدة البيانات ولم يتم حذفه.
هذا الحل البديل لا يعمل بالنسبة لي، عند محاولة إعادة تسمية “foo2” إلى “foo” أحصل على نفس خطأ 500، بسبب فشل قيد التفرد على الاسم المستعار.
لست متأكدًا من كيفية حذف الأسماء المستعارة (المفهرسة؟) لقنوات الدردشة المحذوفة بأمان، لكنني على استعداد للمحاولة.
إنشاء قناة بالاسم “whiskers” والاسم المختصر “whiskers”
حذف القناة
إنشاء قناة بالاسم “whiskers” والاسم المختصر “whiskers”
لقد نجح ذلك.
عند حذف القناة (الخطوة 2)، يتغير الاسم المختصر تلقائيًا إلى شيء فريد. ولكن نظرًا لأنك حذفت قناتك قبل تقديم هذا التغيير، فقد لا يزال الاسم المختصر القديم موجودًا.
من المحتمل أن تتمكن من تحديث الاسم المختصر يدويًا للقناة المحذوفة عبر وحدة تحكم rails، لكنني لست متأكدًا من الصيغة الصحيحة. سأسأل.
لاحظ أيضًا أنه يمكن الآن تعديل الأسماء المختصرة للقنوات بشكل مستقل عن اسم القناة، لذلك كحل بديل، يمكنك أيضًا إنشاء قناة بالاسم المطلوب اليوم واختيار اسم مختصر مختلف لا يتعارض.
أؤكد أن هذا الاختبار يعمل أيضًا بالنسبة لي على نسختي، وهي محدثة بالكامل.
أعتقد أن المشكلة هي أن هناك اسمًا مستعارًا عالقًا في مكان ما في قاعدة البيانات كان يجب حذفه، ولكنه لم يُحذف، ربما كان هناك خطأ في إصدار سابق تم إصلاحه الآن. تم تمكين الدردشة على هذه النسخة لمدة 17 يومًا فقط، لذا فإن أي خطأ يجب أن يكون نشطًا في هذا الإطار الزمني.
لا يمكنني تكرار هذا بأي شكل من الأشكال. بعد إجراء نسخة احتياطية لقاعدة البيانات، ربما يمكنك تجربة هذه الأوامر في وحدة تحكم Rails. يبدو الأمر مفاجئًا على الرغم من ذلك.
[1] pry(main)> DB.exec("DROP INDEX IF EXISTS index_chat_channels_on_slug;")
[2] pry(main)> DB.exec("CREATE UNIQUE INDEX index_chat_channels_on_slug ON chat_channels(slug);")
شكراً على ما سبق. لم أكن أعرف عن with_deleted ولكن ذلك مكّنني من رؤية المثيلات المحذوفة وإعادة تسمية الشرائح الخاصة بها وفقًا لمقتطفك.
يمكنني تأكيد أن هذا تم إصلاحه. أتفق مع @j.jaffeux في أن هذا من غير المرجح أن يؤثر على العديد من المستخدمين، لذا أقول إن وجود إصلاح لوحدة تحكم Rails هنا في الموضوع يكفي.
عند محاولة إنشاء قناة جديدة (باسم “general”، ونفس الاسم للـ slug) يظهر الخطأ التالي في السجلات (لا يحدث شيء في الواجهة الأمامية).
لا تظهر أي قنوات “مغلقة”.
ربما كانت لدي قناة عامة في الماضي - وربما حذفتها (هل هي افتراضية؟)
لا يمكنني إعادة إنتاج المشكلة باستخدام slug عشوائي آخر (إنشاء > حذف > إنشاء يعمل بشكل جيد).
فشل في معالجة الاستثناء في تطبيق الوسيط الاستثنائي : ActiveRecord::RecordNotUnique : PG::UniqueViolation: خطأ: مفتاح مكرر ينتهك قيد المفتاح الفريد "index_chat_channels_on_slug"
التفاصيل: المفتاح (slug)=(general) موجود بالفعل.