신규 사용자가 가입할 수 없으며 콘솔에 404 오류가 발생합니다

이것이 버그인지 내 설정 문제인지 확실하지 않습니다.

Discourse ID 가입을 사용해 새 사용자를 만들려고 하면, Discourse ID 인증 부분은 정상적으로 작동하지만, keppari.discourse.diy 인스턴스로 돌아왔을 때 브라우저에 인증된 Discourse ID 이메일로 로그인되어 있더라도 가입이 조용히 실패합니다. 가입 버튼은 표시되지만 클릭해도 아무 반응이 없으며 페이지에 경고 메시지도 없습니다. 이전에는 Discourse ID로 다른 사용자들을 정상적으로 생성할 수 있었습니다.

로그인 및 인증 설정에서 제가 오버라이드한 설정은 2FA 비활성화와 Discourse ID 허용뿐입니다. 저는 셀프 호스팅을 사용 중이며 SMTP가 구성되어 있지 않습니다. 이전 사용자 생성과 이번 시도 사이에, SMTP가 구성되어 있지 않아 로그인 양식이 혼란스러울 것 같다고 생각해 로컬 로그인을 잠시 비활성화했다가 다시 활성화했습니다.

이와 관련이 있는지 확실하지는 않지만, 모든 익명 사용자 페이지 뷰의 콘솔에서 플러그인뿐 아니라 /assets/vendor.map과 assets/start-discourse.map에 대해 404 오류가 여러 개 나옵니다. 로그인된 사용자는 이러한 콘솔 오류가 없습니다. /logs에 최근 기록도 보이지 않습니다.

이것이 제 설정 오류라면 변경해야 할 다른 설정에 대한 조언을 주시면 감사하겠습니다. 저는 셀프 호스팅을 사용 중이며 버전은 2026.3.0-latest입니다.

즉, 사용자는 가입 화면에 멈춰 있고 가입 버튼이 비활성화되어 있다는 건가요? 스크린샷을 공유해 주시겠어요? /logs에 오류가 있나요?

회원가입 버튼이 비활성화되어 있지 않습니다. 활성화되어 있지만 클릭해도 아무 반응이 없습니다. 아래 첫 번째 스크린샷은 회원가입을 시도하기 전 모습이지만, 클릭한 후에도 화면이 동일해 보입니다.

현재 로그는 다음과 같습니다. 이 로그에서 10:25에 회원가입을 시도했습니다. 처음 게시할 때는 로그에 오류가 없다고 생각했지만, 10:25 시점의 이 오류들은 새로 발생한 것입니다.

현재 모바일을 사용 중이라 더 이전 로그를 복사/붙여넣기할 수 없지만, 도움이 된다면 오늘 늦게 전체 로그를 게시하겠습니다. 감사합니다!

네, can’t alloc thread 오류에 대한 백트레이스와 환경을 게시해 주세요. 해당 오류가 인스턴스에서 문제를 일으키는 것 같습니다.

최근 발생한 can't alloc thread 오류에 대한 백트레이스는 다음과 같습니다:

Message (159137 copies reported)

Job exception: can't alloc thread

Backtrace

/usr/local/lib/ruby/3.4.0/socket.rb:712:in 'Thread.new'
/usr/local/lib/ruby/3.4.0/socket.rb:712:in 'block in Socket.tcp_with_fast_fallback'
/usr/local/lib/ruby/3.4.0/socket.rb:710:in 'Array#map'
/usr/local/lib/ruby/3.4.0/socket.rb:710:in 'Socket.tcp_with_fast_fallback'
/usr/local/lib/ruby/3.4.0/socket.rb:661:in 'Socket.tcp'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-client-0.26.1/lib/redis_client/ruby_connection.rb:122:in 'RedisClient::RubyConnection#connect'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-client-0.26.1/lib/redis_client/ruby_connection.rb:48:in 'RedisClient::RubyConnection#initialize'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-client-0.26.1/lib/redis_client.rb:815:in 'Class#new'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-client-0.26.1/lib/redis_client.rb:815:in 'block in RedisClient#connect'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-client-0.26.1/lib/redis_client/middlewares.rb:12:in 'RedisClient::BasicMiddleware#connect'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-client-0.26.1/lib/redis_client.rb:814:in 'RedisClient#connect'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-client-0.26.1/lib/redis_client.rb:800:in 'RedisClient#raw_connection'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-client-0.26.1/lib/redis_client.rb:759:in 'RedisClient#ensure_connected'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-client-0.26.1/lib/redis_client.rb:352:in 'RedisClient#call_v'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-5.4.0/lib/redis/client.rb:90:in 'Redis::Client#call_v'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/rack-mini-profiler-4.0.1/lib/mini_profiler/profiling_methods.rb:90:in 'block in Redis::Client#profile_method'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-5.4.0/lib/redis.rb:152:in 'block in Redis#send_command'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-5.4.0/lib/redis.rb:151:in 'Monitor#synchronize'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-5.4.0/lib/redis.rb:151:in 'Redis#send_command'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-5.4.0/lib/redis/commands/keys.rb:256:in 'Redis::Commands::Keys#del'
/var/www/discourse/lib/discourse_redis.rb:168:in 'block in DiscourseRedis#del'
/var/www/discourse/lib/discourse_redis.rb:29:in 'DiscourseRedis.ignore_readonly'
/var/www/discourse/lib/discourse_redis.rb:165:in 'DiscourseRedis#del'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/distributed_mutex.rb:48:in 'MiniScheduler::DistributedMutex#synchronize'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/distributed_mutex.rb:15:in 'MiniScheduler::DistributedMutex.synchronize'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:365:in 'MiniScheduler::Manager#lock'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:316:in 'MiniScheduler::Manager#tick'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler.rb:74:in 'block (2 levels) in MiniScheduler.start'

또 다른 백트레이스입니다:

Message (2661 copies reported)

Job exception: can't alloc thread

Backtrace

/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:63:in 'Thread.new'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:63:in 'block in MiniScheduler::Manager::Runner#ensure_worker_threads'
<internal:numeric>:257:in 'Integer#times'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:63:in 'MiniScheduler::Manager::Runner#ensure_worker_threads'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:23:in 'block (2 levels) in MiniScheduler::Manager::Runner#initialize'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:20:in 'Thread::Mutex#synchronize'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:20:in 'block in MiniScheduler::Manager::Runner#initialize'

설정하는 동안 Digital Ocean 드롭렛의 메모리가 1GB입니다. 관련이 있을 수 있으므로 참고해 주세요. 권장 사양은 아니지만, 저를 제외한 실제 트래픽이 없다면 문제가 되지 않을 것이라고 생각했습니다.

안녕하세요. 일반 사용자 관점에서 이 부분을 시도해 보았습니다. Discourse ID로 가입하려고 하면 필드가 채워진 후에 한 번만 프롬프트가 표시되고, 가입 버튼을 누르면 버튼은 눌리긴 하는데 제대로 된 동작이 이루어지지 않습니다.

이것은 /signup 및 기타 모든 페이지에서 익명 사용자의 콘솔 오류입니다:

[Error] Failed to load resource: the server responded with a status of 404 () (discourse-lazy-videos.map, line 0)
[Error] Failed to load resource: the server responded with a status of 404 () (poll.map, line 0)
[Error] Failed to load resource: the server responded with a status of 404 () (vendor.map, line 0)
[Error] Failed to load resource: the server responded with a status of 404 () (discourse-local-dates.map, line 0)
[Error] Failed to load resource: the server responded with a status of 404 () (checklist.map, line 0)
[Error] Failed to load resource: the server responded with a status of 404 () (spoiler-alert.map, line 0)
[Error] Failed to load resource: the server responded with a status of 404 () (discourse-rewind.map, line 0)
[Error] Failed to load resource: the server responded with a status of 404 () (discourse-calendar.map, line 0)
[Error] Failed to load resource: the server responded with a status of 404 () (discourse-staff-alias.map, line 0)
[Error] Failed to load resource: the server responded with a status of 404 () (discourse-topic-voting.map, line 0)
[Error] Failed to load resource: the server responded with a status of 404 () (discourse-narrative-bot.map, line 0)
[Error] Failed to load resource: the server responded with a status of 404 () (automation.map, line 0)
[Error] Failed to load resource: the server responded with a status of 404 () (start-discourse.map, line 0)
[Error] Failed to load resource: the server responded with a status of 404 () (discourse-details.map, line 0)
[Error] Failed to load resource: the server responded with a status of 404 () (discourse-user-notes.map, line 0)
[Error] Failed to load resource: the server responded with a status of 404 () (discourse-data-explorer.map, line 0)
[Error] Failed to load resource: the server responded with a status of 404 () (discourse-anonymous-categories.map, line 0)
[Error] Failed to load resource: the server responded with a status of 404 () (discourse-fingerprint.map, line 0)

저의 가입 시도를 알림으로 받으셨나요?

또한, 그 대신 non-id로 가입을 시도해 보면 되는지 확인해 볼까요?

아니요, 새 사용자를 볼 수 없고 어떤 알림도 받지 못했습니다. 시도해 주셔서 감사합니다.

SMTP가 설정되어 있지 않아서 non-ID 방식은 작동하지 않을 것 같습니다.

혹시 도움이 될까 싶어서 재빌드를 해봤는데, 여전히 can't alloc thread 오류와 가입 문제가 발생하고 있습니다.

가능하시다면, 같은 크기의 새 드롭렛에서 새로운 테스트용 Discourse를 설치해 보실 수 있을까요? 동일한 문제가 발생한다면, 문제가 메모리 크기 때문임을 알 수 있습니다. (저도 1GB 드롭렛에서 테스트를 해볼 수 있지만, 하루 이틀은 걸릴 것 같습니다.)

새로운 1GB 드롭렛에全新한 설치를 진행했는데, 에러 없이 Discourse ID로 로그인할 수 있습니다. 메인 설치에서 문제가 발생한 시점은 로컬 로그인을 비활성화했다가 다시 활성화한 후였는데, 이것이 영향을 미쳤을지 궁금합니다.

“로컬 로그인 사용” 체크박스를 해제하면 새 사용자가 가입할 수 없게 되며, 브라우저 콘솔에 동일한 에러가 나타나는 것을 재현할 수 있었습니다. 새 설치 환경에서 로그에 다음과 같은 에러가 기록되었습니다:

MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-City.mmdb) could not be found: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-City.mmdb
8:00 pm

MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-ASN.mmdb) could not be found: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-ASN.mmdb
8:00 pm

(discourse_id) Authentication failure! access_denied: OmniAuth::Strategies::OAuth2::CallbackError, access_denied | The resource owner or authorization server denied the request.
8:08 pm

다시 "로컬 로그인 사용"을 체크하면 새 설치 환경에서 새 사용자가 다시 가입할 수 있게 되었고, 익명 사용자의 콘솔 에러도 사라졌습니다. can't alloc thread 로그 에러는 아직 재현하지 못했습니다.

ID가 활성화된 상태에서, Admin > Login & Authentication > Discourse ID에서 자격 증명을 재생성할 수 있나요?

자격 증명을 다시 생성했지만, 브라우저 콘솔에서 여전히 404 오류가 발생하고 새 사용자를 등록할 수 없습니다. 자격 증명을 다시 생성한 후 /logs에서 새로운 오류는 보이지 않지만, 도움이 된다면 다시 공유하겠습니다.

아, 그렇군요. 여기는 별도의 설정 오류가 있는 것 같습니다.

로그인 관련 사이트 설정 목록과 그 값을 공유해 주실 수 있을까요? 당연히 인증 정보는 제외하고, 새 가입자 등록을 어떻게 처리하도록 사이트가 설정되어 있는지 궁금합니다. (편의상 DM으로 보내주셔도 됩니다.)

관리자 > 로그인 및 인증에서 기본 설정과 다른 설정은 다음과 같습니다:

  • “외부 인증 시 2단계 인증 강제” 비활성화
  • Discourse ID 활성화

한동안 로컬 로그인을 비활성화했지만, 현재는 다시 활성화되어 있습니다.

문제가 플러그인 때문인지 확인해 보기 위해 플러그인을 하나씩 비활성화하기 시작했는데, Fingerprint 때문인 것 같습니다. Fingerprint만 비활성화한 상태에서 계정을 만드는 테스트가 필요하지만, 모든 플러그인을 비활성화한 뒤 각각 새 사용자를 생성해 보았으며, Fingerprint를 비활성화한 후에는 새 계정을 만들 수 있었습니다.

아, 후속 연락 주셔서 감사합니다. 이 플러그인의 링크를 가지고 계신가요? 도움이 될 것 같아요!