أنا مسؤول عن منتدى. طلب أحد المستخدمين دمج حسابه القديم مع حسابه الجديد.
النشاط الخاص به هو كالتالي:
عندما حاولت دمج الحسابات، علق الموقع على “جارٍ دمج الحسابات…”. تركته لمدة 10 دقائق ولكن لم يحدث شيء.
ماذا أفعل هنا؟
أنا مسؤول عن منتدى. طلب أحد المستخدمين دمج حسابه القديم مع حسابه الجديد.
النشاط الخاص به هو كالتالي:
عندما حاولت دمج الحسابات، علق الموقع على “جارٍ دمج الحسابات…”. تركته لمدة 10 دقائق ولكن لم يحدث شيء.
ماذا أفعل هنا؟
هل تم دمجه عن طريق الخطأ ولم يتم تحديث واجهة المستخدم؟ حاول فتح صفحة المسؤول للمستخدم الذي كان يجب حذفه في علامة تبويب أخرى.
أتذكر أن هذا حدث لي بشكل متقطع عندما قمت بدمج الحسابات، وأظهر إعادة التحميل أنه تم دمج الحساب المعني، لكن الصفحة لم تقم بإعادة التوجيه لتعكس ذلك.
للأسف لا - كلا الحسابين لا يزالان نشطين.
أرى إخلاء مسؤولية مفاده “لا يمكن حذف المستخدمين إذا كان لديهم منشورات”… هذا الرجل لديه 4 آلاف منشور تم إنشاؤها…
أي نصيحة هناك؟
لا ينبغي أن يكون ذلك مشكلة بما أنك تقوم بالدمج… هل هناك أي أخطاء في وحدة تحكم المتصفح أو أخطاء ذات صلة في /logs؟
لقد واجهت مشكلة كهذه واعتقدت أنه يجب علي مشاركة النتائج التي توصلت إليها هنا في حال كان ذلك قد يساعد أي شخص آخر يواجهها.
في حالتي، علقت عملية دمج الحساب إلى الأبد مع ظهور مربع حوار “تقدم الدمج” يتنقل ذهابًا وإيابًا بين رسالتي “تغيير ملكية المنشورات…” و"تحديث اسم المستخدم…".
من خلال النظر إلى سجلات إجراءات الموظفين (/admin/logs/staff_action_logs)،
يمكنني أن أرى أنه على الرغم من نقل ملكية العديد من المنشورات فورًا بعد أن قمت بتشغيل الدمج، لم تكن هناك إجراءات إضافية، مما يثبت أن العملية قد علقت بالفعل بدلاً من أن تستغرق وقتًا طويلاً جدًا لمعالجة جميع المنشورات.
عندما تحققت من سجلات الأخطاء (/logs/)، رأيت أن خطأ “Job exception: topic” كان يتم إنتاجه بشكل دوري، مع تتبع المكدس:
/var/www/discourse/app/services/post_owner_changer.rb:12:in `block in initialize'
/var/www/discourse/app/services/post_owner_changer.rb:11:in `each'
/var/www/discourse/app/services/post_owner_changer.rb:11:in `initialize'
/var/www/discourse/app/services/user_merger.rb:84:in `new'
/var/www/discourse/app/services/user_merger.rb:84:in `change_post_owner'
/var/www/discourse/app/services/user_merger.rb:72:in `block in move_posts'
/var/www/discourse/app/services/user_merger.rb:70:in `each'
/var/www/discourse/app/services/user_merger.rb:70:in `move_posts'
/var/www/discourse/app/services/user_merger.rb:14:in `merge!'
/var/www/discourse/app/jobs/regular/merge_user.rb:15:in `execute'
/var/www/discourse/app/jobs/base.rb:316:in `block (2 levels) in perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'
/var/www/discourse/app/jobs/base.rb:303:in `block in perform'
/var/www/discourse/app/jobs/base.rb:299:in `each'
/var/www/discourse/app/jobs/base.rb:299:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:220:in `execute_job'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:185:in `block (4 levels) in process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:180:in `traverse'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
/var/www/discourse/lib/sidekiq/discourse_event.rb:6:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182:in `traverse'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
/var/www/discourse/lib/sidekiq/pausable.rb:131:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182:in `traverse'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/job/interrupt_handler.rb:9:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182:in `traverse'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/metrics/tracking.rb:26:in `track'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/metrics/tracking.rb:134:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182:in `traverse'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:173:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:184:in `block (3 levels) in process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:145:in `block (6 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/job_retry.rb:118:in `local'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:144:in `block (5 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/config.rb:39:in `block in <class:Config>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:139:in `block (4 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:281:in `stats'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:134:in `block (3 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/job_logger.rb:15:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:133:in `block (2 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/job_retry.rb:85:in `global'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:132:in `block in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/job_logger.rb:40:in `prepare'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:131:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:183:in `block (2 levels) in process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:182:in `handle_interrupt'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:182:in `block in process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:181:in `handle_interrupt'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:181:in `process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:86:in `process_one'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:76:in `run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/component.rb:10:in `watchdog'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/component.rb:19:in `block in safe_thread'
والبيئة كالتالي:
hostname [...]
process_id 701
application_version 3146142c2ed2c880d53b2f8c136af9f46df99b59
current_db default
current_hostname forum.arduino.cc
job Jobs::MergeUser
problem_db default
time 8:15 am
opts
user_id 42
target_user_id 123
current_user_id 456
current_site_id default
أخيرًا، توصلت إلى أن التعليق كان ناتجًا عن حساب المستخدم “من” الذي لديه منشورات “يتيمة”. بقصد “يتيمة”، أعني أنه كان هناك إدخال في قاعدة البيانات للمنشور، ولكن لم يكن هناك إدخال للموضوع المرتبط بهذا المنشور.
يمكنك التحقق من وجود “منشورات يتيمة” في حساب مستخدم معين عن طريق تشغيل استعلام Data Explorer هذا:
-- [params]
-- integer :user_id
SELECT
posts.id,
posts.topic_id
FROM
posts
WHERE
posts.user_id = :user_id
AND posts.topic_id NOT IN (
SELECT
topics.id
FROM
topics
)
بعد إزالة المنشورات اليتيمة من قاعدة البيانات (بفضل المساعدة من فريق Discourse نظرًا لأننا نستخدم خطة استضافة)، تمكنت من إكمال عملية دمج الحساب بنجاح.
شكرًا @per1234 لمشاركة خطوات استكشاف الأخطاء وإصلاحها!
@Nick_Torres هل تمكنت من حل مشكلتك؟
لقد أضفت علامة merge-user للمساعدة في الفرز المستقبلي. يبدو أن هناك بعض الحالات الشاذة التي يتم فيها مقاطعة الدمج بدون رسالة خطأ مفيدة.