Problema de eliminación de usuario, devuelve "Error 500" al borrar todas las publicaciones

Tuve un problema con un usuario que solicitó la eliminación de su cuenta. Antes de la eliminación de la cuenta, al intentar usar Delete all posts (Eliminar todas las publicaciones) en la parte de administración de usuarios, obtuve un Error 500 después de confirmar la acción.

Por ahora, eliminé manualmente las publicaciones que pude encontrar, ya que el usuario tenía una cantidad bastante pequeña de publicaciones, así que no hubo problemas en ese aspecto. Pero todavía veo que Posts created (Publicaciones creadas) muestra 10+ para esta cuenta. Y, por supuesto, no puedo eliminar la cuenta. Tampoco veo más publicaciones de este usuario.

En /logs veo dos entradas de registro para el evento (por lo que puedo deducir)

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/middleware/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>'

¿Qué son estas tablas reviewable_notes y reviewable_notes? ¿Están relacionadas con la cola de Review (Revisión) de los moderadores?

¿Algún comentario o alguien ha encontrado algo similar?

Creo que este puede ser un error introducido recientemente.

¿Puedes comprobar si el usuario tiene algún contenido marcado en la cola de revisión y si hay alguna nota sobre ellos? Si es así, intenta eliminar eso primero antes de continuar.

1 me gusta

¡Gracias! Tu suposición fue acertada. El usuario tenía algunas publicaciones marcadas por los moderadores y una de ellas tenía una nota añadida. Después de eliminar la nota, pude eliminar con éxito todas las publicaciones del usuario y al usuario mismo.

Por cierto, ¿el error ya está corregido en la rama principal (default branch)? Quizás sea hora de actualizar.

EDITAR: nota sobre la versión/compilación para referencia de cualquiera que pueda encontrar un problema similar: contenedor de compilación de mediados de enero v2026.1.0-latest en la rama predeterminada tests-passed.

1 me gusta

No lo creo, haré un informe de error interno.

¡Me alegro de que la solución alternativa lo haya resuelto!