خطأ حرج: تم تغيير اسم المستخدم، وتعطل المستخدم

لقد قمت للتو بتغيير اسم مستخدم شخص ما xxx بناءً على طلبه. كان يريد الحصول على اسم مستخدم غير نشط yyy. لذا، قمت أولاً بتغيير الاسم غير النشط yyy إلى شيء آخر مثل yyy1، ثم غيرت اسم المستخدم الخاص بذلك الشخص من xxx إلى yyy.

في هذه المرحلة، أولاً، لم يتمكن المستخدم من نشر أي شيء، ورأيت الخطأ التالي في السجلات:

Job exception: PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_users_on_username_lower" DETAIL: Key (username_lower)=(mina) already exists.

حاولت إعادة اسم المستخدم إلى ما كان عليه من قبل، والآن اختفى كل سجله. ما الذي حدث بالضبط هنا؟

هل يمكنك تكرار هذا @tshenry؟

الآن لا أستطيع حتى فتح صفحة ملفهم الشخصي. هل هناك شيء يمكنني فعله لإصلاح هذا في الوقت الراهن؟

أعمل الآن على اتباع الخطوات التي حددتها. سأخبرك بما أكتشفه.

بالمناسبة، لا أعرف لماذا أواجه خطأً مع هذا المستخدم (username_lower)=(mina) على الإطلاق. لم أقم بإجراء أي تغيير عليه، ويبدو أنه مستخدم غير نشط. ومع ذلك، ألاحظ سلوكًا غريبًا في ملفه الشخصي أيضًا. إذا فتحت صفحة الإشعارات الخاصة به، أحصل على خطأ 404.

حسنًا، لقد اتبعت الخطوات. إذا قمت بأي شيء مختلف عما قمت به أنت، فأخبرني.

هناك مستخدمان:

  • xxx (حساب نشط)
  • yyy (حساب غير نشط)
  1. غيّر yyy إلى yyy1
    غيّر xxx إلى yyy
    ( :white_check_mark: نجح معي)

  2. حاول النشر باستخدام حساب yyy الجديد
    ( :white_check_mark: نجح معي)

  3. غيّر yyy مرة أخرى إلى xxx
    ( :white_check_mark: نجح معي، دون فقدان سجل المستخدم)

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

هل يمكنك التحقق من /admin/logs/staff_action_logs لديك لمعرفة ما إذا كانت جميع تغييرات أسماء المستخدمين المسجلة منطقية؟ يجب أن يؤدي النقر على الصور الرمزية لأسماء المستخدمين المدرجة إلى نقلك إلى صفحة المستخدم الحالية والصحيحة الخاصة بهم.

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

هذا ما قمت به حتى الآن:

وفقًا لما أراه في هذا التقرير، قمت أولًا بتغيير fatemeh إلى fatemeh12. ثم قمت بتغيير fatemeh_baghdadi إلى fatemeh. بعد فترة، أخبرني المستخدم أنه لا يستطيع نشر أي شيء. لذا اعتقدت أنه قد يكون هناك خطأ ما في عملية تغيير اسم المستخدم وحاولت تغييره إلى اسم لم يُستخدم من قبل. لذلك قمت بتغيير fatemeh (الذي كان سابقًا fatemeh_baghdadi) إلى fatemeh74. ثم لاحظت أن سجلهم قد تم مسح كليًا، مما جعلني أشعر بالقلق. لذا حاولت تغيير اسم المستخدم مرة أخرى إلى ما كان في البداية من fatemeh74 إلى fatemeh_baghdadi. ثم مرة أخرى من fatemeh_baghdadi إلى fatemeh_baghdadi5، لكن لم يتحسن الوضع. الآن لدي مستخدمان مختلفان: fatemeh74 و fatemeh_baghdadi5، والذي يجب نظريًا أن يكونا شخصًا واحدًا، لكنهما في الواقع شخصان، ويبدو أن أحدهما لا يعمل بشكل صحيح.

أبذل قصارى جهدي لمتابعة الموقف هنا. يبدو وكأنه حالة غريبة جدًا!

هل يمكنك توضيح ما تقصده عندما تقول إن تاريخهم قد تم مسحها بالكامل؟ هل يجب أن يحتوي ملف fatemeh_baghdadi5 على مواضيع ورسائل مختلفة مدرجة في قسم النشاط في ملفه الشخصي؟

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

هناك مهمة خلفية تُسمى EnsureDbConsistency تعمل كل 12 ساعة. قد يكون من المثير للاهتمام إما تشغيلها يدويًا من Sidekiq، أو الانتظار والنظر فيما إذا تم إصلاح كل شيء تلقائيًا خلال الـ 12 ساعة القادمة.

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

من الصعب جدًا فهم ما يحدث دون الحصول على وصول مباشر إلى كل شيء، لكنني آمل أن نتمكن من حل الأمر!

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

https://talk.zabanshenas.com/t/topic/29066/3?u=hnaseri

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

أين يوجد هذا بالضبط؟

شكرًا لك على نشر هذا المثال. هذا بالتأكيد مقلق.

يمكنك العثور عليه مدرجًا في /sidekiq/scheduler. إنه يستحق المحاولة، لكن بناءً على ما نشرته للتو، يبدو أن هناك مشكلة أعمق.

للأسف أنت محق. لم يحل مشكلتي.

@tshenry هل يُسمح لي بوجود اسم مستخدمين متطابقين تماماً باستثناء الكلمة الأولى التي تختلف في حالة الأحرف (كبيرة/صغيرة)؟

أعتقد أن هذا قد يكون مرتبطاً بالمشكلة.

ملاحظة مثيرة للاهتمام!

أسماء المستخدمين غير حساسة لحالة الأحرف فعليًا، لذا لا ينبغي أن يكون هناك مستخدمان يحملان نفس اسم المستخدم. ومع ذلك:

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

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

ما فهمته حتى الآن هو التالي: في الخطوة الأولى، حاولت تغيير اسم المستخدم fatemeh إلى fatemeh12 لجعله متاحًا. ومع ذلك، كان اسم المستخدم Fatemeh12 موجودًا بالفعل، لذا في الواقع لم يكن ينبغي السماح لي بتغيير fatemeh إلى fatemeh12. لكن النظام سمح لي بذلك بشكل غريب، ومنذ تلك النقطة تعطلت قاعدة البيانات.

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

مرحبًا :wave: هذا رائع لسماعه. كنت آمل أن يأتي عمل في الخلفية لإنقاذ الموقف بعد مرور بعض الوقت. يبدو أن هذا قد يكون ما حدث.

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

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

أنا موافق على إرسال نسخة من قاعدة بياناتي، إذا كان ذلك قد يساعد في تحديد المشكلة.

لم أفعل شيئًا، لكن المستخدم تعطل مرة أخرى :|. هناك بالتأكيد خطأ ما في قاعدة بياناتي.

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

نحن لا نستخدم أسماء مستخدمين يونيكود، وهذا أمر… مُشكّل إلى حد ما في بعض الأحيان، حيث يؤدي ذلك في بعض الأحيان إلى تعطيل عملية مزامنة إضافة Patreon التي نعتمد عليها بشدة لخدمات السياسات الخارجية.