مشكلة حذف المستخدم، يعرض "خطأ 500" عند حذف جميع المشاركات

واجهت مشكلة مع أحد المستخدمين الذي طلب حذف حسابه. قبل حذف الحساب، أثناء محاولتي استخدام Delete all posts (حذف جميع المشاركات) في جزء إدارة المستخدمين، تلقيت Error 500 بعد تأكيد الإجراء.

في الوقت الحالي، قمت بحذف المشاركات التي تمكنت من العثور عليها يدويًا، حيث كان لدى المستخدم عدد قليل نسبيًا من المشاركات، لذا لم تكن هناك مشكلة في هذا الجانب. ولكنني ما زلت أرى أن Posts created (المشاركات التي تم إنشاؤها) تظهر 10+ لهذا الحساب. وبالطبع، لا يمكنني حذف الحساب. ولا أرى أي مشاركات أخرى من هذا المستخدم.

في /logs أرى إدخالين للسجل للحدث (بقدر ما أستطيع أن أستنتج)

Message

ActiveRecord::InvalidForeignKey (PG::ForeignKeyViolation: ERROR:  update or delete on table "reviewables" violates foreign key constraint "fk_rails_2fe5fa5cd0" on table "reviewable_notes"
DETAIL:  Key (id)=(7064) is still referenced from table "reviewable_notes".
)
Message

Failed to handle exception in exception app middleware : ActiveRecord::InvalidForeignKey : PG::ForeignKeyViolation: ERROR:  update or delete on table "reviewables" violates foreign key constraint "fk_rails_2fe5fa5cd0" on table "reviewable_notes"
DETAIL:  Key (id)=(7064) is still referenced from table "reviewable_notes".


Backtrace

rack-mini-profiler-4.0.1/lib/patches/db/pg/alias_method.rb:109:in `exec'
rack-mini-profiler-4.0.1/lib/patches/db/pg/alias_method.rb:109:in `async_exec'
activerecord-8.0.4/lib/active_record/connection_adapters/postgresql/database_statements.rb:167:in `perform_query'
activerecord-8.0.4/lib/active_record/connection_adapters/abstract/database_statements.rb:556:in `block (2 levels) in raw_execute'
activerecord-8.0.4/lib/active_record/connection_adapters/abstract_adapter.rb:1017:in `block in with_raw_connection'
activesupport-8.0.4/lib/active_support/concurrency/null_lock.rb:9:in `synchronize'
activerecord-8.0.4/lib/active_record/connection_adapters/abstract_adapter.rb:986:in `with_raw_connection'
activerecord-8.0.4/lib/active_record/connection_adapters/abstract/database_statements.rb:555:in `block in raw_execute'
activesupport-8.0.4/lib/active_support/notifications/instrumenter.rb:58:in `instrument'
activerecord-8.0.4/lib/active_record/connection_adapters/abstract_adapter.rb:1137:in `log'
activerecord-8.0.4/lib/active_record/connection_adapters/abstract/database_statements.rb:554:in `raw_execute'
activerecord-8.0.4/lib/active_record/connection_adapters/abstract/database_statements.rb:591:in `internal_execute'
activerecord-8.0.4/lib/active_record/connection_adapters/abstract/database_statements.rb:166:in `exec_delete'
activerecord-8.0.4/lib/active_record/connection_adapters/abstract/database_statements.rb:214:in `delete'
activerecord-8.0.4/lib/active_record/connection_adapters/abstract/query_cache.rb:27:in `delete'
activerecord-8.0.4/lib/active_record/relation.rb:1045:in `block in delete_all'
activerecord-8.0.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:422:in `with_connection'
activerecord-8.0.4/lib/active_record/connection_handling.rb:312:in `with_connection'
activerecord-8.0.4/lib/active_record/relation.rb:1032:in `delete_all'
/var/www/discourse/app/models/user.rb:1322:in `delete_posts_in_batches'
/var/www/discourse/app/controllers/admin/users_controller.rb:76:in `delete_posts_batch'
actionpack-8.0.4/lib/action_controller/metal/basic_implicit_render.rb:8:in `send_action'
actionpack-8.0.4/lib/abstract_controller/base.rb:215:in `process_action'
actionpack-8.0.4/lib/action_controller/metal/rendering.rb:193:in `process_action'
actionpack-8.0.4/lib/abstract_controller/callbacks.rb:261:in `block in process_action'
activesupport-8.0.4/lib/active_support/callbacks.rb:120:in `block in run_callbacks'
/var/www/discourse/app/controllers/application_controller.rb:442:in `block in with_resolved_locale'
i18n-1.14.7/lib/i18n.rb:353:in `with_locale'
/var/www/discourse/app/controllers/application_controller.rb:442:in `with_resolved_locale'
activesupport-8.0.4/lib/active_support/callbacks.rb:129:in `block in run_callbacks'
/var/www/discourse/app/controllers/application_controller.rb:1088:in `ensure_dont_cache_page'
activesupport-8.0.4/lib/active_support/callbacks.rb:129:in `block in run_callbacks'
activesupport-8.0.4/lib/active_support/callbacks.rb:140:in `run_callbacks'
actionpack-8.0.4/lib/abstract_controller/callbacks.rb:260:in `process_action'
actionpack-8.0.4/lib/action_controller/metal/rescue.rb:27:in `process_action'
actionpack-8.0.4/lib/action_controller/metal/instrumentation.rb:76:in `block in process_action'
activesupport-8.0.4/lib/active_support/notifications.rb:210:in `block in instrument'
activesupport-8.0.4/lib/active_support/notifications/instrumenter.rb:58:in `instrument'
activesupport-8.0.4/lib/active_support/notifications.rb:210:in `instrument'
actionpack-8.0.4/lib/action_controller/metal/instrumentation.rb:75:in `process_action'
actionpack-8.0.4/lib/action_controller/metal/params_wrapper.rb:259:in `process_action'
activerecord-8.0.4/lib/active_record/railties/controller_runtime.rb:39:in `process_action'
actionpack-8.0.4/lib/abstract_controller/base.rb:152:in `process'
actionview-8.0.4/lib/action_view/rendering.rb:40:in `process'
rack-mini-profiler-4.0.1/lib/mini_profiler/profiling_methods.rb:90:in `block in profile_method'
actionpack-8.0.4/lib/action_controller/metal.rb:252:in `dispatch'
actionpack-8.0.4/lib/action_controller/metal.rb:335:in `dispatch'
actionpack-8.0.4/lib/action_dispatch/routing/route_set.rb:67:in `dispatch'
actionpack-8.0.4/lib/action_dispatch/routing/route_set.rb:50:in `serve'
actionpack-8.0.4/lib/action_dispatch/routing/mapper.rb:32:in `block in <class:Constraints>'
actionpack-8.0.4/lib/action_dispatch/routing/mapper.rb:62:in `serve'
actionpack-8.0.4/lib/action_dispatch/journey/router.rb:53:in `block in serve'
actionpack-8.0.4/lib/action_dispatch/journey/router.rb:133:in `block in find_routes'
actionpack-8.0.4/lib/action_dispatch/journey/router.rb:126:in `each'
actionpack-8.0.4/lib/action_dispatch/journey/router.rb:126:in `find_routes'
actionpack-8.0.4/lib/action_dispatch/journey/router.rb:34:in `serve'
actionpack-8.0.4/lib/action_dispatch/routing/route_set.rb:908:in `call'
/var/www/discourse/lib/middleware/omniauth_bypass_middleware.rb:35:in `call'
/var/www/discourse/lib/middleware/crawler_hooks.rb:11:in `call'
rack-2.2.21/lib/rack/tempfile_reaper.rb:15:in `call'
rack-2.2.21/lib/rack/conditional_get.rb:40:in `call'
rack-2.2.21/lib/rack/head.rb:12:in `call'
actionpack-8.0.4/lib/action_dispatch/http/permissions_policy.rb:38:in `call'
/var/www/discourse/lib/content_security_policy/middleware.rb:12:in `call'
/var/www/discourse/lib/middleware/anonymous_cache.rb:420:in `call'
/var/www/discourse/lib/middleware/csp_script_nonce_injector.rb:12:in `call'
/var/www/discourse/config/initializers/008-rack-cors.rb:14:in `call'
rack-2.2.21/lib/rack/session/abstract/id.rb:266:in `context'
rack-2.2.21/lib/rack/session/abstract/id.rb:260:in `call'
actionpack-8.0.4/lib/action_dispatch/middleware/cookies.rb:706:in `call'
actionpack-8.0.4/lib/action_dispatch/middleware/callbacks.rb:31:in `block in call'
activesupport-8.0.4/lib/active_support/callbacks.rb:100:in `run_callbacks'
actionpack-8.0.4/lib/action_dispatch/middleware/callbacks.rb:30:in `call'
actionpack-8.0.4/lib/action_dispatch/middleware/debug_exceptions.rb:31:in `call'
actionpack-8.0.4/lib/action_dispatch/middleware/show_exceptions.rb:32:in `call'
logster-2.20.1/lib/logster/middleware/reporter.rb:40:in `call'
/var/www/discourse/lib/middleware/default_headers.rb:13:in `call'
railties-8.0.4/lib/rails/rack/logger.rb:41:in `call_app'
railties-8.0.4/lib/rails/rack/logger.rb:29:in `call'
/var/www/discourse/config/initializers/100-quiet_logger.rb:20:in `call'
/var/www/discourse/config/initializers/100-silence_logger.rb:29:in `call'
actionpack-8.0.4/lib/action_dispatch/middleware/request_id.rb:34:in `call'
/var/www/discourse/lib/middleware/enforce_hostname.rb:23:in `call'
rack-2.2.21/lib/rack/method_override.rb:24:in `call'
actionpack-8.0.4/lib/action_dispatch/middleware/executor.rb:16:in `call'
rack-2.2.21/lib/rack/sendfile.rb:127:in `call'
rack-mini-profiler-4.0.1/lib/mini_profiler.rb:191:in `call'
message_bus-4.4.1/lib/message_bus/rack/middleware.rb:60:in `call'
/var/www/discourse/lib/middleware/request_tracker.rb:321:in `call'
actionpack-8.0.4/lib/action_dispatch/middleware/remote_ip.rb:96:in `call'
/var/www/discourse/lib/middleware/overload_protections.rb:22:in `call'
/var/www/discourse/lib/middleware/processing_request.rb:14:in `call'
railties-8.0.4/lib/rails/engine.rb:535:in `call'
railties-8.0.4/lib/rails/railtie.rb:226:in `public_send'
railties-8.0.4/lib/rails/railtie.rb:226:in `method_missing'
rack-2.2.21/lib/rack/urlmap.rb:74:in `block in call'
rack-2.2.21/lib/rack/urlmap.rb:58:in `each'
rack-2.2.21/lib/rack/urlmap.rb:58:in `call'
unicorn-6.1.0/lib/unicorn/http_server.rb:634:in `process_client'
unicorn-6.1.0/lib/unicorn/http_server.rb:739:in `worker_loop'
unicorn-6.1.0/lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
unicorn-6.1.0/lib/unicorn/http_server.rb:143:in `start'
unicorn-6.1.0/bin/unicorn:128:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/bin/unicorn:25:in `load'
/var/www/discourse/vendor/bundle/ruby/3.3.0/bin/unicorn:25:in `<main>'

ما هي جداول reviewable_notes و reviewable_notes؟ هل هي مرتبطة بقائمة Review (المراجعة) الخاصة بالمشرفين؟

أي تعليقات أو ربما واجه شخص ما شيئًا مشابهًا؟

أعتقد أن هذا قد يكون خطأ تم تقديمه مؤخرًا.

هل يمكنك التحقق مما إذا كان لدى المستخدم أي محتوى مُعلَّم في قائمة انتظار المراجعة، وما إذا كان هناك أي ملاحظة حولها؟ إذا كان الأمر كذلك، حاول حذف ذلك أولاً قبل المتابعة.

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

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

بالمناسبة، هل تم إصلاح الخلل بالفعل في الفرع الافتراضي؟ ربما حان وقت التحديثات.

تعديل: ملاحظة حول الإصدار/البناء كمرجع لأي شخص آخر قد يواجه مشكلة مماثلة: v2026.1.0-latest بناء الحاوية في منتصف يناير على الفرع الافتراضي tests-passed.

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

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

يسعدني أن الحل البديل قد نجح!