회원가입 오류: PG::UniqueViolation (ERROR: unique constraint을 위반하는 중복 키 값)

안녕하세요! 사이트에서 변경 사항이 없었습니다.

새로운 사용자들이 이 오류에 대해 보고하기 시작했습니다:

PG::UniqueViolation (ERROR: duplicate key value violates unique constraint "idx_category_users_category_id_user_id" DETAIL: Key (category_id, user_id)=(55, 1691) already exists. ) app/models/user.rb

상세 내용:

Message (2 copies reported)

PG::UniqueViolation (ERROR:  duplicate key value violates unique constraint "idx_category_users_category_id_user_id"
DETAIL:  Key (category_id, user_id)=(55, 1691) already exists.
)
app/models/user.rb:1499:in `set_default_categories_preferences'
app/controllers/users_controller.rb:629:in `create'
app/controllers/application_controller.rb:358:in `block in with_resolved_locale'
app/controllers/application_controller.rb:358:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:68:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:354:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:22:in `call'
lib/middleware/request_tracker.rb:176:in `call'

Backtrace

rack-mini-profiler (2.2.0) lib/patches/db/pg.rb:110:in `exec'
rack-mini-profiler (2.2.0) lib/patches/db/pg.rb:110:in `async_exec'
mini_sql (0.3) lib/mini_sql/postgres/connection.rb:201:in `run'
mini_sql (0.3) lib/mini_sql/postgres/connection.rb:173:in `exec'
app/models/user.rb:1499:in `set_default_categories_preferences'
activesupport (6.0.3.3) lib/active_support/callbacks.rb:428:in `block in make_lambda'
activesupport (6.0.3.3) lib/active_support/callbacks.rb:238:in `block in halting_and_conditional'
activesupport (6.0.3.3) lib/active_support/callbacks.rb:517:in `block in invoke_after'
activesupport (6.0.3.3) lib/active_support/callbacks.rb:517:in `each'
activesupport (6.0.3.3) lib/active_support/callbacks.rb:517:in `invoke_after'

Env
rack-mini-profiler (2.2.0) lib/patches/db/pg.rb:110:in `exec'

rack-mini-profiler (2.2.0) lib/patches/db/pg.rb:110:in `async_exec'

mini_sql (0.3) lib/mini_sql/postgres/connection.rb:201:in `run'

mini_sql (0.3) lib/mini_sql/postgres/connection.rb:173:in `exec'

app/models/user.rb:1499:in `set_default_categories_preferences'

activesupport (6.0.3.3) lib/active_support/callbacks.rb:428:in `block in make_lambda'

activesupport (6.0.3.3) lib/active_support/callbacks.rb:238:in `block in halting_and_conditional'

activesupport (6.0.3.3) lib/active_support/callbacks.rb:517:in `block in invoke_after'

activesupport (6.0.3.3) lib/active_support/callbacks.rb:517:in `each'

activesupport (6.0.3.3) lib/active_support/callbacks.rb:517:in `invoke_after'

activesupport (6.0.3.3) lib/active_support/callbacks.rb:136:in `run_callbacks'

activesupport (6.0.3.3) lib/active_support/callbacks.rb:825:in `_run_create_callbacks'

activerecord (6.0.3.3) lib/active_record/callbacks.rb:331:in `_create_record'

activerecord (6.0.3.3) lib/active_record/timestamp.rb:110:in `_create_record'

activerecord (6.0.3.3) lib/active_record/persistence.rb:905:in `create_or_update'

activerecord (6.0.3.3) lib/active_record/callbacks.rb:327:in `block in create_or_update'

activesupport (6.0.3.3) lib/active_support/callbacks.rb:135:in `run_callbacks'

activesupport (6.0.3.3) lib/active_support/callbacks.rb:825:in `_run_save_callbacks'

activerecord (6.0.3.3) lib/active_record/callbacks.rb:327:in `create_or_update'

activerecord (6.0.3.3) lib/active_record/timestamp.rb:128:in `create_or_update'

activerecord (6.0.3.3) lib/active_record/persistence.rb:470:in `save'

activerecord (6.0.3.3) lib/active_record/validations.rb:47:in `save'

activerecord (6.0.3.3) lib/active_record/transactions.rb:314:in `block in save'

activerecord (6.0.3.3) lib/active_record/transactions.rb:375:in `block in with_transaction_returning_status'

activerecord (6.0.3.3) lib/active_record/connection_adapters/abstract/database_statements.rb:280:in `block in transaction'

activerecord (6.0.3.3) lib/active_record/connection_adapters/abstract/transaction.rb:280:in `block in within_new_transaction'

activesupport (6.0.3.3) lib/active_support/concurrency/load_interlock_aware_monitor.rb:26:in `block (2 levels) in synchronize'

activesupport (6.0.3.3) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'

activesupport (6.0.3.3) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'

activesupport (6.0.3.3) lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'

activesupport (6.0.3.3) lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'

activerecord (6.0.3.3) lib/active_record/connection_adapters/abstract/transaction.rb:278:in `within_new_transaction'

activerecord (6.0.3.3) lib/active_record/connection_adapters/abstract/database_statements.rb:280:in `transaction'

activerecord (6.0.3.3) lib/active_record/transactions.rb:212:in `transaction'

activerecord (6.0.3.3) lib/active_record/transactions.rb:366:in `with_transaction_returning_status'

activerecord (6.0.3.3) lib/active_record/transactions.rb:314:in `save'

activerecord (6.0.3.3) lib/active_record/suppressor.rb:44:in `save'

app/controllers/users_controller.rb:629:in `create'

actionpack (6.0.3.3) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'

actionpack (6.0.3.3) lib/abstract_controller/base.rb:195:in `process_action'

actionpack (6.0.3.3) lib/action_controller/metal/rendering.rb:30:in `process_action'

actionpack (6.0.3.3) lib/abstract_controller/callbacks.rb:42:in `block in process_action'

activesupport (6.0.3.3) lib/active_support/callbacks.rb:112:in `block in run_callbacks'

app/controllers/application_controller.rb:358:in `block in with_resolved_locale'

i18n (1.8.5) lib/i18n.rb:313:in `with_locale'

app/controllers/application_controller.rb:358:in `with_resolved_locale'

activesupport (6.0.3.3) lib/active_support/callbacks.rb:121:in `block in run_callbacks'

activesupport (6.0.3.3) lib/active_support/callbacks.rb:139:in `run_callbacks'

actionpack (6.0.3.3) lib/abstract_controller/callbacks.rb:41:in `process_action'

actionpack (6.0.3.3) lib/action_controller/metal/rescue.rb:22:in `process_action'

actionpack (6.0.3.3) lib/action_controller/metal/instrumentation.rb:33:in `block in process_action'

activesupport (6.0.3.3) lib/active_support/notifications.rb:180:in `block in instrument'

activesupport (6.0.3.3) lib/active_support/notifications/instrumenter.rb:24:in `instrument'

activesupport (6.0.3.3) lib/active_support/notifications.rb:180:in `instrument'

actionpack (6.0.3.3) lib/action_controller/metal/instrumentation.rb:32:in `process_action'

actionpack (6.0.3.3) lib/action_controller/metal/params_wrapper.rb:245:in `process_action'

activerecord (6.0.3.3) lib/active_record/railties/controller_runtime.rb:27:in `process_action'

actionpack (6.0.3.3) lib/abstract_controller/base.rb:136:in `process'

actionview (6.0.3.3) lib/action_view/rendering.rb:39:in `process'

rack-mini-profiler (2.2.0) lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'

actionpack (6.0.3.3) lib/action_controller/metal.rb:190:in `dispatch'

actionpack (6.0.3.3) lib/action_controller/metal.rb:254:in `dispatch'

actionpack (6.0.3.3) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'

actionpack (6.0.3.3) lib/action_dispatch/routing/route_set.rb:33:in `serve'

actionpack (6.0.3.3) lib/action_dispatch/journey/router.rb:49:in `block in serve'

actionpack (6.0.3.3) lib/action_dispatch/journey/router.rb:32:in `each'

actionpack (6.0.3.3) lib/action_dispatch/journey/router.rb:32:in `serve'

actionpack (6.0.3.3) lib/action_dispatch/routing/route_set.rb:834:in `call'

lib/middleware/omniauth_bypass_middleware.rb:68:in `call'

rack (2.2.3) lib/rack/tempfile_reaper.rb:15:in `call'

rack (2.2.3) lib/rack/conditional_get.rb:40:in `call'

rack (2.2.3) lib/rack/head.rb:12:in `call'

lib/content_security_policy/middleware.rb:12:in `call'

lib/middleware/anonymous_cache.rb:354:in `call'

rack (2.2.3) lib/rack/session/abstract/id.rb:266:in `context'

rack (2.2.3) lib/rack/session/abstract/id.rb:260:in `call'

actionpack (6.0.3.3) lib/action_dispatch/middleware/cookies.rb:648:in `call'

actionpack (6.0.3.3) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'

activesupport (6.0.3.3) lib/active_support/callbacks.rb:101:in `run_callbacks'

actionpack (6.0.3.3) lib/action_dispatch/middleware/callbacks.rb:26:in `call'

actionpack (6.0.3.3) lib/action_dispatch/middleware/actionable_exceptions.rb:17:in `call'

actionpack (6.0.3.3) lib/action_dispatch/middleware/debug_exceptions.rb:32:in `call'

actionpack (6.0.3.3) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'

logster (2.9.4) lib/logster/middleware/reporter.rb:43:in `call'

railties (6.0.3.3) lib/rails/rack/logger.rb:37:in `call_app'

railties (6.0.3.3) lib/rails/rack/logger.rb:28:in `call'

config/initializers/100-quiet_logger.rb:23:in `call'

config/initializers/100-silence_logger.rb:31:in `call'

actionpack (6.0.3.3) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'

actionpack (6.0.3.3) lib/action_dispatch/middleware/request_id.rb:27:in `call'

lib/middleware/enforce_hostname.rb:22:in `call'

rack (2.2.3) lib/rack/method_override.rb:24:in `call'

actionpack (6.0.3.3) lib/action_dispatch/middleware/executor.rb:14:in `call'

rack (2.2.3) lib/rack/sendfile.rb:110:in `call'

actionpack (6.0.3.3) lib/action_dispatch/middleware/host_authorization.rb:76:in `call'

rack-mini-profiler (2.2.0) lib/mini_profiler/profiler.rb:246:in `call'

message_bus (3.3.4) lib/message_bus/rack/middleware.rb:61:in `call'

lib/middleware/request_tracker.rb:176:in `call'

railties (6.0.3.3) lib/rails/engine.rb:527:in `call'

railties (6.0.3.3) lib/rails/railtie.rb:190:in `public_send'

railties (6.0.3.3) lib/rails/railtie.rb:190:in `method_missing'

rack (2.2.3) lib/rack/urlmap.rb:74:in `block in call'

rack (2.2.3) lib/rack/urlmap.rb:58:in `each'

rack (2.2.3) lib/rack/urlmap.rb:58:in `call'

unicorn (5.7.0) lib/unicorn/http_server.rb:632:in `process_client'

unicorn (5.7.0) lib/unicorn/http_server.rb:728:in `worker_loop'

unicorn (5.7.0) lib/unicorn/http_server.rb:548:in `spawn_missing_workers'

unicorn (5.7.0) lib/unicorn/http_server.rb:144:in `start'

unicorn (5.7.0) bin/unicorn:128:in `<top (required)>'

vendor/bundle/ruby/2.7.0/bin/unicorn:23:in `load'

vendor/bundle/ruby/2.7.0/bin/unicorn:23:in `<main>'

저는 최신 버전의 Discourse를 사용 중입니다.

수정하는 데 도움을 주시겠습니까?

자동 시청 그룹에 중복 항목이 있는 것 같습니다. 어떻게 이런 일이 가능한지 확실하지는 않지만, 자동 시청에 대한 사이트 설정을 초기화해 볼 수 있을까요?

샘님, 정말 대단하세요!

이 문제는 제가 직접 일으킨 것이었습니다. Trust_level_0 사용자를 위해 기본 관찰 카테고리를 설정했는데, 이로 인해 문제가 발생하여 가입이 실패했습니다. 그래서 해당 그룹의 관찰 카테고리를 삭제했고, 이제 가입이 정상적으로 작동하고 있습니다.

저도 같은 방식으로 설정했는데 동일한 문제를 겪고 있습니다. 새로운 가입이 불가능합니다.

우리가 이 기능을 의도한 대로 사용하고 있지 않은 건가요? 저는 신규 사용자가 특정 카테고리를 즉시 관찰하도록 설정하고 싶습니다.
어떻게 구현할 수 있을까요?

아니요, 어떻게 해야 하는지 방법을 찾지 못했습니다. 그룹을 사용하면 가능할까요? 기본적으로 새 사용자를 특정 그룹에 자동으로 추가하고, 그 그룹이 특정 태그나 카테고리를 감시하도록 설정하는 방식 말입니다.

신뢰 등급(Trust levels)으로는 이걸 할 수 없다는 게 저한테는 좀 이상하게 느껴집니다.

그룹으로 이걸 할 수 있다면 알려주세요.

해당 문제는 아래 커밋으로 수정되었습니다