저는 Memberful을 SSO로 사용하는데, 오늘 리빌드 이후에 Discourse에 로그인할 때 "요청한 URL 또는 리소스를 찾을 수 없습니다."라는 오류가 발생하기 시작했습니다. 이제 관리자 페이지에도 들어갈 수 없습니다. Memberful에는 정상적으로 로그인할 수 있지만, Discourse에는 접속할 수 없습니다. 여기서 어떻게 문제를 해결해야 할까요? 플러그인 없이 리빌드도 했고, discourse-doctor를 실행해 보았지만 이상한 점은 보이지 않습니다.
리빌드하기 전에는 새로운 회원 가입이 Discourse에서 사용자로 생성되지 않는 문제가 있었습니다. 콘솔에 다음과 같은 오류가 표시되었는데, 리빌드 후에는 기존 사용자조차 로그인할 수 없게 되었습니다. 도와주세요!
그리고, Memberful 측에서 이 문제에 대해 다음과 같이 답변했습니다:
그들은 이것이 포럼 자체의 문제로 보인다고 했습니다. 우리가 보낸 스크린샷(원본 에러 로그 스크린샷)과 관련이 있는지 확실하지는 않지만, 멤버를 동기화하려고 할 때 내부 서버 오류를 수신한다고 합니다:
Oops - Error 500
Oops The software powering this discussion forum encountered an unexpected problem. We apologize for the inconvenience.
Detailed information about the error was logged, and an automatic notification generated. We'll take a look at it.
No further action is necessary. However, if the error condition persists, you can provide additional detail, including steps to reproduce the error, by posting a discussion topic in the site's feedback category.
이는 /admin/users/sync_sso에 대한 POST 요청에서 발생합니다.
그들은 이 오류를 방지할 수 있는지 확인해 달라고 Discourse 호스트나 관리자에게 문의하는 것을 제안합니다.
ghassan
(Ghassan Maslamani)
6월 27, 2022, 4:17오후
2
로그인을 위해 다음을 시도해 보셨나요:
Sam Saffron:
실수로 체크하게 된다면?
실수로 enable_discourse_connect를 체크하여 원래 상태로 되돌려야 하고 더 이상 관리자 패널에 접근할 수 없는 경우, /u/admin-login으로 이동하여 안내에 따르세요.
또는, 서버 콘솔에서 다음을 실행하세요:
cd /var/discourse
./launcher enter app
rails c
irb > SiteSetting.enable_discourse_connect = false
irb > SiteSetting.enable_local_logins = true
irb > exit
exit
출처: Setup DiscourseConnect - Official Single-Sign-On for Discourse (sso)
위 내용은 기본적으로 SSO가 켜져 있는 상태에서 관리자로 로그인할 수 없을 때 두 가지 옵션이 있다는 뜻입니다:
RGJ
(Richard - Communiteq)
6월 27, 2022, 4:43오후
3
최근 태그 알림 관련해서 설정을 변경해 보셨나요?
변경했다면 콘솔에서 해당 설정을 되돌려 보실 수 있습니다.
pfaffman
(Jay Pfaffman)
6월 27, 2022, 4:47오후
4
Memberful을 통해 사이트에 로그인할 수 있었습니다. 문제는 보이지 않습니다.
지금까지 파악한 내용을 바탕으로, 네트워크 오류 또는 Memberful 자체의 문제였다고 생각합니다.
@pfaffman 님 덕분에 /u/admin-login 경로를 다시 떠올리게 되어 관리자 권한으로 로그인할 수 있었습니다. 감사합니다, Jay!
그래서 requested url... 문제는 더 이상 발생하지 않지만, 신규 사용자가 생성되지 않는 문제는 여전히 남아 있습니다. Jay 님은 이미 계정이 있어서 로그인할 수 있었지만, 신규 사용자는 로그인이 되지 않고 로그인 오류가 발생하고 있습니다.
@RGJ 최근 이 부분에 변경 사항을 넣었는데, 정말로 로그인 문제를 일으킬 수 있다고 보시나요? 저는 태그 하나를 만들고 기본값으로 음소거(muted)로 설정한 것이 유일한 변경 사항이었습니다.
조금 산발적으로 말씀드려 죄송합니다. 오늘 아침에 여러 문제가 동시에 발생했거든요!
RGJ
(Richard - Communiteq)
6월 27, 2022, 6:10오후
6
1시간 전까지는 아니었습니다. 하지만 idx_tag_users_ix1 인덱스에서 문제가 보고되고 있습니다. 인덱스가 손상되었을 수 있으므로, 현재는 증상만 싸우고 있는 것일 수 있지만, 해당 알림을 비활성화하면 사용자 생성 시 설정되므로 포럼을 다시 사용 가능하게 하는 데 도움이 될 수 있습니다.
스택 트레이스까지 포함된 상황이 아니었으니까요.
pfaffman
(Jay Pfaffman)
6월 27, 2022, 6:29오후
7
와. 정말 탁월한 지적이네요!
어떤 테이블인지 정확히 모르겠지만,
discourse=# reindex table tag_users;
을 실행하면 오류가 발생하지 않습니다.
Jay가 이미 답글을 달았지만, 우리는 비공개로 논의하고 있었습니다. 네, Richard, 그것이 해결책이었어요! 정말 훌륭하셨습니다. 기본 무음 목록에서 해당 태그를 제거하고 모든 사용자에게 적용한 후 다시 작동하기 시작했습니다. 이것이 단순히 손상 문제였는지, 아니면某种 버그인지 확인하기 위해 다시 활성화할 수 있는지 테스트를 진행해 보겠습니다. 감사합니다, 정말 감사합니다!
수정: 후속 보고로, 실제로 손상된 것이었습니다. 태그 알림을 다시 활성화했는데 모든 것이 정상적으로 작동합니다.
이 문제가 다시 발생했고, 이제 문제를 일으키던 태그를 제거해도 해결되지 않습니다. 로그에서 확인되는 태그 ID 842를 어떻게 식별할 수 있을까요? 감사합니다!
ActiveRecord::RecordNotUnique (PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "idx_tag_users_ix1" DETAIL: Key (user_id, tag_id, notification_level)=(8118, 842, 0) already exists. )
로그인 시도 로그
rack-mini-profiler (3.0.0) lib/patches/db/pg.rb:69:in `exec_params'
rack-mini-profiler (3.0.0) lib/patches/db/pg.rb:69:in `exec_params'
activerecord (7.0.3) lib/active_record/connection_adapters/postgresql_adapter.rb:768:in `block (2 levels) in exec_no_cache'
activesupport (7.0.3) lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
activesupport (7.0.3) lib/active_support/dependencies/interlock.rb:41:in `permit_concurrent_loads'
activerecord (7.0.3) lib/active_record/connection_adapters/postgresql_adapter.rb:767:in `block in exec_no_cache'
activesupport (7.0.3) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
activesupport (7.0.3) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
activesupport (7.0.3) lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
activesupport (7.0.3) lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
activerecord (7.0.3) lib/active_record/connection_adapters/abstract_adapter.rb:765:in `block in log'
activesupport (7.0.3) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activerecord (7.0.3) lib/active_record/connection_adapters/abstract_adapter.rb:756:in `log'
activerecord (7.0.3) lib/active_record/connection_adapters/postgresql_adapter.rb:766:in `exec_no_cache'
activerecord (7.0.3) lib/active_record/connection_adapters/postgresql_adapter.rb:745:in `execute_and_clear'
activerecord (7.0.3) lib/active_record/connection_adapters/postgresql/database_statements.rb:54:in `exec_query'
activerecord (7.0.3) lib/active_record/connection_adapters/abstract/database_statements.rb:150:in `exec_insert_all'
activerecord (7.0.3) lib/active_record/connection_adapters/abstract/query_cache.rb:22:in `exec_insert_all'
activerecord (7.0.3) lib/active_record/insert_all.rb:41:in `execute'
activerecord (7.0.3) lib/active_record/persistence.rb:213:in `insert_all!'
app/models/user.rb:1734:in `set_default_tags_preferences'
activesupport (7.0.3) lib/active_support/callbacks.rb:400:in `block in make_lambda'
activesupport (7.0.3) lib/active_support/callbacks.rb:236:in `block in halting_and_conditional'
activesupport (7.0.3) lib/active_support/callbacks.rb:599:in `block in invoke_after'
activesupport (7.0.3) lib/active_support/callbacks.rb:599:in `each'
activesupport (7.0.3) lib/active_support/callbacks.rb:599:in `invoke_after'
activesupport (7.0.3) lib/active_support/callbacks.rb:108:in `run_callbacks'
activesupport (7.0.3) lib/active_support/callbacks.rb:929:in `_run_create_callbacks'
activerecord (7.0.3) lib/active_record/callbacks.rb:461:in `_create_record'
activerecord (7.0.3) lib/active_record/timestamp.rb:108:in `_create_record'
activerecord (7.0.3) lib/active_record/persistence.rb:1067:in `create_or_update'
activerecord (7.0.3) lib/active_record/callbacks.rb:457:in `block in create_or_update'
activesupport (7.0.3) lib/active_support/callbacks.rb:118:in `block in run_callbacks'
activerecord (7.0.3) lib/active_record/autosave_association.rb:370:in `around_save_collection_association'
activesupport (7.0.3) lib/active_support/callbacks.rb:127:in `block in run_callbacks'
activesupport (7.0.3) lib/active_support/callbacks.rb:138:in `run_callbacks'
activesupport (7.0.3) lib/active_support/callbacks.rb:929:in `_run_save_callbacks'
activerecord (7.0.3) lib/active_record/callbacks.rb:457:in `create_or_update'
activerecord (7.0.3) lib/active_record/timestamp.rb:126:in `create_or_update'
activerecord (7.0.3) lib/active_record/persistence.rb:648:in `save!'
activerecord (7.0.3) lib/active_record/validations.rb:53:in `save!'
activerecord (7.0.3) lib/active_record/transactions.rb:302:in `block in save!'
activerecord (7.0.3) lib/active_record/transactions.rb:354:in `block in with_transaction_returning_status'
activerecord (7.0.3) lib/active_record/connection_adapters/abstract/transaction.rb:319:in `block in within_new_transaction'
activesupport (7.0.3) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
activesupport (7.0.3) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
activesupport (7.0.3) lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
activesupport (7.0.3) lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
activerecord (7.0.3) lib/active_record/connection_adapters/abstract/transaction.rb:317:in `within_new_transaction'
activerecord (7.0.3) lib/active_record/connection_adapters/abstract/database_statements.rb:316:in `transaction'
activerecord (7.0.3) lib/active_record/transactions.rb:350:in `with_transaction_returning_status'
activerecord (7.0.3) lib/active_record/transactions.rb:302:in `save!'
activerecord (7.0.3) lib/active_record/suppressor.rb:54:in `save!'
app/models/discourse_connect.rb:260: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:460:in `sync_sso'
actionpack (7.0.3) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (7.0.3) lib/abstract_controller/base.rb:215:in `process_action'
actionpack (7.0.3) lib/action_controller/metal/rendering.rb:53:in `process_action'
actionpack (7.0.3) lib/abstract_controller/callbacks.rb:234:in `block in process_action'
activesupport (7.0.3) lib/active_support/callbacks.rb:118:in `block in run_callbacks'
app/controllers/application_controller.rb:415:in `block in with_resolved_locale'
i18n (1.10.0) lib/i18n.rb:328:in `with_locale'
app/controllers/application_controller.rb:415:in `with_resolved_locale'
activesupport (7.0.3) lib/active_support/callbacks.rb:127:in `block in run_callbacks'
activesupport (7.0.3) lib/active_support/callbacks.rb:138:in `run_callbacks'
actionpack (7.0.3) lib/abstract_controller/callbacks.rb:233:in `process_action'
actionpack (7.0.3) lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack (7.0.3) lib/action_controller/metal/instrumentation.rb:67:in `block in process_action'
activesupport (7.0.3) lib/active_support/notifications.rb:206:in `block in instrument'
activesupport (7.0.3) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (7.0.3) lib/active_support/notifications.rb:206:in `instrument'
actionpack (7.0.3) lib/action_controller/metal/instrumentation.rb:66:in `process_action'
actionpack (7.0.3) lib/action_controller/metal/params_wrapper.rb:259:in `process_action'
activerecord (7.0.3) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack (7.0.3) lib/abstract_controller/base.rb:151:in `process'
actionview (7.0.3) lib/action_view/rendering.rb:39:in `process'
rack-mini-profiler (3.0.0) lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'
actionpack (7.0.3) lib/action_controller/metal.rb:188:in `dispatch'
actionpack (7.0.3) lib/action_controller/metal.rb:251:in `dispatch'
actionpack (7.0.3) lib/action_dispatch/routing/route_set.rb:49:in `dispatch'
actionpack (7.0.3) lib/action_dispatch/routing/route_set.rb:32:in `serve'
actionpack (7.0.3) lib/action_dispatch/routing/mapper.rb:18:in `block in <class:Constraints>'
actionpack (7.0.3) lib/action_dispatch/routing/mapper.rb:48:in `serve'
actionpack (7.0.3) lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack (7.0.3) lib/action_dispatch/journey/router