DiscourseConnect sync_sso에서 UniqueViolation 발생

Memberful을 통해 포럼에서 DiscourseConnect를 사용 중이며, 버그일 수도 있는 오류를 추적하고 있습니다. 혹은 우회 방법이 있다면 조언을 주실 수 있을까요?

사용자 이름은 “이름 + 증가하는 숫자” 형식으로 생성되는 것 같지만, 해당 사용자가 이미 존재하여 아래 메시지가 오류 로그에 표시됩니다.

재현을 위해 동기화 자체가 어떻게 트리거되는지 정확히 모르겠지만, 어딘가의 예약 작업이 /admin/users/sync_sso를 호출하는 것으로 추정됩니다.

새해 전날 최신 가용 업데이트를 설치하고 앱을 재빌드했는데, 오늘 오류 로그는 다음과 같습니다:

버전: 2.8.13

메시지 (33건 보고됨)

ActiveRecord::RecordNotUnique (PG::UniqueViolation: ERROR:  duplicate key value violates unique constraint "index_users_on_username"
DETAIL:  Key (username)=(REDACTED) already exists.
)
app/models/discourse_connect.rb:253:in `block in match_email_or_create_user'
lib/distributed_mutex.rb:33:in `block in synchronize'
lib/distributed_mutex.rb:29:in `synchronize'
lib/distributed_mutex.rb:29:in `synchronize'
lib/distributed_mutex.rb:14:in `synchronize'
app/models/discourse_connect.rb:239:in `match_email_or_create_user'
app/models/discourse_connect.rb:121:in `lookup_or_create_user_unsafe'
app/models/discourse_connect.rb:109:in `block in lookup_or_create_user'
lib/distributed_mutex.rb:33:in `block in synchronize'
lib/distributed_mutex.rb:29:in `synchronize'
lib/distributed_mutex.rb:29:in `synchronize'
lib/distributed_mutex.rb:14:in `synchronize'
app/models/discourse_connect.rb:108:in `lookup_or_create_user'
app/controllers/admin/users_controller.rb:471:in `sync_sso'
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:361: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:23:in `call'
lib/middleware/request_tracker.rb:198:in `call'

백트레이스

rack-mini-profiler (2.3.3) lib/patches/db/pg.rb:69:in `exec_params'
rack-mini-profiler (2.3.3) lib/patches/db/pg.rb:69:in `exec_params'
activerecord (6.1.6.1) lib/active_record/connection_adapters/postgresql_adapter.rb:672:in `block (2 levels) in exec_no_cache'
activesupport (6.1.6.1) lib/active_support/dependencies/interlock.rb:48:in `block in permit_concurrent_loads'
activesupport (6.1.6.1) lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
activesupport (6.1.6.1) lib/active_support/dependencies/interlock.rb:47:in `permit_concurrent_loads'
activerecord (6.1.6.1) lib/active_record/connection_adapters/postgresql_adapter.rb:671:in `block in exec_no_cache'
activerecord (6.1.6.1) lib/active_record/connection_adapters/abstract_adapter.rb:696:in `block (2 levels) in log'
activesupport (6.1.6.1) lib/active_support/concurrency/load_interlock_aware_monitor.rb:26:in `block (2 levels) in synchronize'
activesupport (6.1.6.1) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'

환경 (축약됨)

REQUEST_URI /admin/users/sync_sso
REQUEST_METHOD POST
HTTP_USER_AGENT http.rb/5.1.0
1개의 좋아요