# 삭제 실패해도 사용자 삭제 이메일이 전송됩니다

**URL:** https://meta.discourse.org/t/user-deleted-email-is-sent-even-when-deletion-failed/368240
**Category:** Bug
**Tags:** review-queue
**Created:** [5월 30, 2025, 11:57오전 UTC](https://meta.discourse.org/t/user-deleted-email-is-sent-even-when-deletion-failed/368240 "2025-05-30T11:57:33Z")
**Posts on this page:** 1
**Showing post:** 1

<div class="post-metadata">

### Author: ![Moin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/moin/32/554653_2.png) [@Moin](https://meta.discourse.org/u/Moin)
#### Post date: [5월 30, 2025, 11:57오전 UTC](https://meta.discourse.org/t/user-deleted-email-is-sent-even-when-deletion-failed/368240/1 "2025-05-30T11:57:33Z")

</div>

리뷰 큐에서 사용자 삭제 기능을 테스트하면서 [로그인이 필요한 내 포럼에서 사용자가 가이드라인 링크를 클릭했을 때 일어나는 일](https://meta.discourse.org/t/link-to-guidelines-in-email-about-user-deletion-for-private-forums/368229)을 확인하고 있었는데, 이상한 일이 발생했습니다. 사용자에게 계정이 삭제되었다는 이메일이 2통이나 발송되었습니다. 사실 첫 번째 이메일은 일종의 오보와도 같았습니다. 사용자는 실제로 삭제되지 않았는데도 이메일이 발송된 것입니다.

아래의 모든 단계가 실제로 필요한지 확실하지는 않지만, 재현이 어려웠고, 어떤 방법으로든 재현 단계를 찾아낸 것만으로도 다행이라 생각하여, 다른 플래그 유형이나 다른 플래그 처리 방식이 동일한 문제를 일으키는지 확인해 보려 하지 않았습니다.

### 준비 사항

사용자의 추가 입력을 요구하는 사용자 정의 플래그가 필요합니다. 또한 자동 숨김(Auto-hiding) 기능도 활성화해 두었습니다. 이것이 영향이 있는지 확신은 없습니다. 그리고 삭제할 사용자(스패머), 관리자 계정, 그리고 다른 일반 사용자 한 명이 필요합니다.

### 재현 단계

1. 스팸머가 주제를 생성합니다.
2. 스팸머가 자신의 게시물을 스팸으로 신고합니다.  
 ![image](https://global.discourse-cdn.com/meta/original/4X/3/a/c/3ac4c72cb680798ffde493536fe722b8ac76d983.png)
3. 다른 사용자가 “기타” 항목을 사용하여 게시물을 신고합니다.
4. 관리자가 주제를 삭제합니다.  
 ![image](https://global.discourse-cdn.com/meta/original/4X/2/0/b/20b7eea58d901a4900eca90f087c29bac559ea20.png)
5. 관리자가 주제를 복구합니다.
6. 관리자가 사용자 정의 플래그 유형을 사용하여 게시물을 신고합니다.  
 ![image](https://global.discourse-cdn.com/meta/original/4X/a/2/a/a2aeb610b27e85c2b77711e7d73d12a55b01dad5.png)  
(이 경우, 플래그를 등록할 때 주제가 숨겨져 있었는데, 이것이 관련이 있는지 확실하지 않습니다.)
7. 리뷰 큐에서 관리자가 "예 → 사용자 삭제"를 선택합니다.  

### 결과

- 사용자는 삭제되지 않았습니다.
- 그러나 이메일이 발송되었습니다:  
 ![image](https://global.discourse-cdn.com/meta/original/4X/1/d/b/1db1706585dced9324701fbc4525229ae64bc7ad.png)
- 이메일이 발송되었음에도 불구하고 이메일 로그에 해당 항목이 없습니다.
- 브라우저 콘솔에 오류가 발생했습니다: `201/perform/delete_user?version=1:1 Failed to load resource: the server responded with a status of 500 ()`
- /logs에 오류가 기록되었습니다: `NoMethodError (undefined method 'score' for nil)`

> **error**
>
> ```plaintext
> NoMethodError (undefined method `score' for nil)
> app/models/reviewable.rb:732:in `recalculate_score'
> app/models/reviewable.rb:375:in `block in perform'
> app/models/reviewable.rb:366:in `perform'
> app/controllers/reviewables_controller.rb:273:in `perform'
> app/controllers/application_controller.rb:428:in `block in with_resolved_locale'
> app/controllers/application_controller.rb:428:in `with_resolved_locale'
> lib/middleware/omniauth_bypass_middleware.rb:35:in `call'
> lib/content_security_policy/middleware.rb:12:in `call'
> lib/middleware/anonymous_cache.rb:415:in `call'
> lib/middleware/csp_script_nonce_injector.rb:12:in `call'
> config/initializers/008-rack-cors.rb:26:in `call'
> lib/middleware/default_headers.rb:13:in `call'
> config/initializers/100-quiet_logger.rb:20:in `call'
> config/initializers/100-silence_logger.rb:29:in `call'
> lib/middleware/enforce_hostname.rb:24:in `call'
> lib/middleware/processing_request.rb:12:in `call'
> lib/middleware/request_tracker.rb:385:in `call'
> 
> Backtrace
> 
> app/models/reviewable.rb:732:in `recalculate_score'
> app/models/reviewable.rb:375:in `block in perform'
> activerecord (7.2.2.1) lib/active_record/connection_adapters/abstract/transaction.rb:616:in `block in within_new_transaction'
> activesupport (7.2.2.1) lib/active_support/concurrency/null_lock.rb:9:in `synchronize'
> activerecord (7.2.2.1) lib/active_record/connection_adapters/abstract/transaction.rb:613:in `within_new_transaction'
> activerecord (7.2.2.1) lib/active_record/connection_adapters/abstract/database_statements.rb:361:in `transaction'
> activerecord (7.2.2.1) lib/active_record/transactions.rb:234:in `block in transaction'
> activerecord (7.2.2.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:415:in `with_connection'
> activerecord (7.2.2.1) lib/active_record/connection_handling.rb:296:in `with_connection'
> activerecord (7.2.2.1) lib/active_record/transactions.rb:233:in `transaction'
> app/models/reviewable.rb:366:in `perform'
> app/controllers/reviewables_controller.rb:273:in `perform'
> actionpack (7.2.2.1) lib/action_controller/metal/basic_implicit_render.rb:8:in `send_action'
> actionpack (7.2.2.1) lib/abstract_controller/base.rb:226:in `process_action'
> actionpack (7.2.2.1) lib/action_controller/metal/rendering.rb:193:in `process_action'
> actionpack (7.2.2.1) lib/abstract_controller/callbacks.rb:261:in `block in process_action'
> activesupport (7.2.2.1) lib/active_support/callbacks.rb:121:in `block in run_callbacks'
> app/controllers/application_controller.rb:428:in `block in with_resolved_locale'
> i18n (1.14.7) lib/i18n.rb:353:in `with_locale'
> app/controllers/application_controller.rb:428:in `with_resolved_locale'
> activesupport (7.2.2.1) lib/active_support/callbacks.rb:130:in `block in run_callbacks'
> activesupport (7.2.2.1) lib/active_support/callbacks.rb:141:in `run_callbacks'
> actionpack (7.2.2.1) lib/abstract_controller/callbacks.rb:260:in `process_action'
> actionpack (7.2.2.1) lib/action_controller/metal/rescue.rb:27:in `process_action'
> actionpack (7.2.2.1) lib/action_controller/metal/instrumentation.rb:77:in `block in process_action'
> activesupport (7.2.2.1) lib/active_support/notifications.rb:210:in `block in instrument'
> activesupport (7.2.2.1) lib/active_support/notifications/instrumenter.rb:58:in `instrument'
> activesupport (7.2.2.1) lib/active_support/notifications.rb:210:in `instrument'
> actionpack (7.2.2.1) lib/action_controller/metal/instrumentation.rb:76:in `process_action'
> actionpack (7.2.2.1) lib/action_controller/metal/params_wrapper.rb:259:in `process_action'
> activerecord (7.2.2.1) lib/active_record/railties/controller_runtime.rb:39:in `process_action'
> actionpack (7.2.2.1) lib/abstract_controller/base.rb:163:in `process'
> actionview (7.2.2.1) lib/action_view/rendering.rb:40:in `process'
> rack-mini-profiler (3.3.1) lib/mini_profiler/profiling_methods.rb:89:in `block in profile_method'
> actionpack (7.2.2.1) lib/action_controller/metal.rb:252:in `dispatch'
> actionpack (7.2.2.1) lib/action_controller/metal.rb:335:in `dispatch'
> actionpack (7.2.2.1) lib/action_dispatch/routing/route_set.rb:67:in `dispatch'
> actionpack (7.2.2.1) lib/action_dispatch/routing/route_set.rb:50:in `serve'
> actionpack (7.2.2.1) lib/action_dispatch/journey/router.rb:53:in `block in serve'
> actionpack (7.2.2.1) lib/action_dispatch/journey/router.rb:133:in `block in find_routes'
> actionpack (7.2.2.1) lib/action_dispatch/journey/router.rb:126:in `each'
> actionpack (7.2.2.1) lib/action_dispatch/journey/router.rb:126:in `find_routes'
> actionpack (7.2.2.1) lib/action_dispatch/journey/router.rb:34:in `serve'
> actionpack (7.2.2.1) lib/action_dispatch/routing/route_set.rb:896:in `call'
> lib/middleware/omniauth_bypass_middleware.rb:35:in `call'
> rack (2.2.13) lib/rack/tempfile_reaper.rb:15:in `call'
> rack (2.2.13) lib/rack/conditional_get.rb:40:in `call'
> rack (2.2.13) lib/rack/head.rb:12:in `call'
> actionpack (7.2.2.1) lib/action_dispatch/http/permissions_policy.rb:38:in `call'
> lib/content_security_policy/middleware.rb:12:in `call'
> lib/middleware/anonymous_cache.rb:415:in `call'
> lib/middleware/csp_script_nonce_injector.rb:12:in `call'
> config/initializers/008-rack-cors.rb:26:in `call'
> rack (2.2.13) lib/rack/session/abstract/id.rb:266:in `context'
> rack (2.2.13) lib/rack/session/abstract/id.rb:260:in `call'
> actionpack (7.2.2.1) lib/action_dispatch/middleware/cookies.rb:704:in `call'
> actionpack (7.2.2.1) lib/action_dispatch/middleware/callbacks.rb:31:in `block in call'
> activesupport (7.2.2.1) lib/active_support/callbacks.rb:101:in `run_callbacks'
> actionpack (7.2.2.1) lib/action_dispatch/middleware/callbacks.rb:30:in `call'
> actionpack (7.2.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:31:in `call'
> actionpack (7.2.2.1) lib/action_dispatch/middleware/show_exceptions.rb:32:in `call'
> logster (2.20.1) lib/logster/middleware/reporter.rb:40:in `call'
> lib/middleware/default_headers.rb:13:in `call'
> lograge (0.14.0) lib/lograge/rails_ext/rack/logger.rb:18:in `call_app'
> railties (7.2.2.1) lib/rails/rack/logger.rb:29:in `call'
> config/initializers/100-quiet_logger.rb:20:in `call'
> config/initializers/100-silence_logger.rb:29:in `call'
> actionpack (7.2.2.1) lib/action_dispatch/middleware/request_id.rb:33:in `call'
> lib/middleware/enforce_hostname.rb:24:in `call'
> rack (2.2.13) lib/rack/method_override.rb:24:in `call'
> rack (2.2.13) lib/rack/sendfile.rb:110:in `call'
> plugins/discourse-prometheus/lib/middleware/metrics.rb:14:in `call'
> rack-mini-profiler (3.3.1) lib/mini_profiler.rb:191:in `call'
> lib/middleware/processing_request.rb:12:in `call'
> message_bus (4.4.1) lib/message_bus/rack/middleware.rb:60:in `call'
> lib/middleware/request_tracker.rb:385:in `call'
> actionpack (7.2.2.1) lib/action_dispatch/middleware/remote_ip.rb:96:in `call'
> rails_failover (2.2.0) lib/rails_failover/active_record/middleware.rb:67:in `block in call'
> activerecord (7.2.2.1) lib/active_record/connection_handling.rb:376:in `with_role_and_shard'
> activerecord (7.2.2.1) lib/active_record/connection_handling.rb:147:in `connected_to'
> rails_failover (2.2.0) lib/rails_failover/active_record/middleware.rb:64:in `call'
> rails_multisite (6.1.0) lib/rails_multisite/middleware.rb:26:in `call'
> railties (7.2.2.1) lib/rails/engine.rb:535:in `call'
> railties (7.2.2.1) lib/rails/railtie.rb:226:in `public_send'
> railties (7.2.2.1) lib/rails/railtie.rb:226:in `method_missing'
> rack (2.2.13) lib/rack/urlmap.rb:74:in `block in call'
> rack (2.2.13) lib/rack/urlmap.rb:58:in `each'
> rack (2.2.13) 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)>'
> vendor/bundle/ruby/3.3.0/bin/unicorn:25:in `load'
> vendor/bundle/ruby/3.3.0/bin/unicorn:25:in `<main>'
> 
> ```

### 참고:

- [이전에 언급했듯이](https://meta.discourse.org/t/modify-add-site-text-associated-with-custom-moderation-flags/335942/5?u=moin), `flag reasons`(신고 사유)는 사용자 정의 플래그와 함께 작동하지 않습니다.

---

_[View the full topic](https://meta.discourse.org/t/user-deleted-email-is-sent-even-when-deletion-failed/368240)._
