영어가 아닌 그룹 이름으로 메시지 전송 시 오류 500 발생

내 Discourse 기본 언어가 일본어로 설정되어 있습니다.
그리고 일부 기본 그룹 이름이 일본어로 변환되었고, 그룹 URL(슬러그)도 일본어로 되어 있습니다.

예를 들어, 스태프 그룹 URL은 /g/スタッフ이고,
스태프 활동 페이지 URL은 /g/スタッフ/activity/posts입니다.

그리고 영어가 아닌 이름의 모든 그룹에서 그룹 메시지 페이지에 접근할 수 없습니다. /g/スタッフ/messages
해당 페이지에 접근을 시도하면 서버 오류 500 메시지가 표시됩니다.

커스텀 텍스트 페이지에서 해당 텍스트를 찾아보았지만, 커스터마이징이 불가능한 것 같습니다.

언어를 다시 영어로 변경하고 페이지를 새로고침해도 해당 비영어권 그룹 이름이 여전히 일본어로 남아 있기 때문에 어떤 종류의 버그인 것 같습니다.

두 가지 질문이 있습니다:

  1. 비영어권 그룹의 그룹 메시지 오류를 수정할 수 있을까요?

  2. Discourse는 비영어권 그룹 이름을 허용하지 않는다고 생각합니다. 그렇다면 어떻게 이름을 다시 영어로 변경할 수 있을까요?

참고: 최신 버전으로 업데이트하고 앱을 재빌드했지만 문제가 여전히 남아 있습니다.

최신 Discourse 버전에서 이 문제를 재현할 수 없습니다. :thinking:

로케일을 영어로 업데이트하면 EnsureDbConsistency 예약 작업을 통해 12시간 후에 그룹 이름이 자동으로 "staff"로 업데이트됩니다.

빠른 답변 감사합니다. :grinning:

에러 로그에 표시되는 오류입니다. :thinking:

ActionController::UrlGenerationError (No route matches {:action=>"private_messages_group", :controller=>"list", :format=>"json", :group_name=>"トラストレベル0", :page=>1, :topic_ids=>nil, :username=>"admin"}

ActionController::UrlGenerationError (No route matches {:action=>"private_messages_group", :controller=>"list", :format=>"json", :group_name=>"スタッフ", :page=>1, :topic_ids=>nil, :username=>"admin"}, po

ActionController::UrlGenerationError (No route matches {:action=>"private_messages_group", :controller=>"list", :format=>"json", :group_name=>"管理者", :page=>1, :topic_ids=>nil, :username=>"admin"}, pos

ActionController::UrlGenerationError (No route matches {:action=>"private_messages_group_archive", :controller=>"list", :format=>"json", :group_name=>"管理者", :page=>1, :topic_ids=>nil, :username=>"admi

상세 정보:

정보
  • ActionController::UrlGenerationError (No route matches {:action=>“private_messages_group”, :controller=>“list”, :format=>“json”, :group_name=>“管理者”, :page=>1, :topic_ids=>nil, :username=>“admin”}, possible unmatched constraints: [:group_name])
  • app/controllers/list_controller.rb:416:in `public_send’
  • app/controllers/list_controller.rb:416:in `construct_url_with’
  • app/controllers/list_controller.rb:175:in `message_route’
  • app/controllers/list_controller.rb:160:in `block in generate_message_route’
  • 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:355: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:177:in `call’
백트레이스
  • actionpack (6.0.3.5) lib/action_dispatch/journey/formatter.rb:57:in `generate’
  • actionpack (6.0.3.5) lib/action_dispatch/routing/route_set.rb:738:in `generate’
  • actionpack (6.0.3.5) lib/action_dispatch/routing/route_set.rb:769:in `generate’
  • actionpack (6.0.3.5) lib/action_dispatch/routing/route_set.rb:816:in `url_for’
  • actionpack (6.0.3.5) lib/action_dispatch/routing/route_set.rb:269:in `call’
  • actionpack (6.0.3.5) lib/action_dispatch/routing/route_set.rb:326:in `block in define_url_helper’
  • app/controllers/list_controller.rb:416:in `public_send’
  • app/controllers/list_controller.rb:416:in `construct_url_with’
  • app/controllers/list_controller.rb:175:in `message_route’
  • app/controllers/list_controller.rb:160:in `block in generate_message_route’
  • actionpack (6.0.3.5) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action’
  • actionpack (6.0.3.5) lib/abstract_controller/base.rb:195:in `process_action’
  • actionpack (6.0.3.5) lib/action_controller/metal/rendering.rb:30:in `process_action’
  • actionpack (6.0.3.5) lib/abstract_controller/callbacks.rb:42:in `block in process_action’
  • activesupport (6.0.3.5) 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.9) lib/i18n.rb:314:in `with_locale’
  • app/controllers/application_controller.rb:358:in `with_resolved_locale’
  • activesupport (6.0.3.5) lib/active_support/callbacks.rb:121:in `block in run_callbacks’
  • activesupport (6.0.3.5) lib/active_support/callbacks.rb:139:in `run_callbacks’
  • actionpack (6.0.3.5) lib/abstract_controller/callbacks.rb:41:in `process_action’
  • actionpack (6.0.3.5) lib/action_controller/metal/rescue.rb:22:in `process_action’
  • actionpack (6.0.3.5) lib/action_controller/metal/instrumentation.rb:33:in `block in process_action’
  • activesupport (6.0.3.5) lib/active_support/notifications.rb:180:in `block in instrument’
  • activesupport (6.0.3.5) lib/active_support/notifications/instrumenter.rb:24:in `instrument’
  • activesupport (6.0.3.5) lib/active_support/notifications.rb:180:in `instrument’
  • actionpack (6.0.3.5) lib/action_controller/metal/instrumentation.rb:32:in `process_action’
  • actionpack (6.0.3.5) lib/action_controller/metal/params_wrapper.rb:245:in `process_action’
  • activerecord (6.0.3.5) lib/active_record/railties/controller_runtime.rb:27:in `process_action’
  • actionpack (6.0.3.5) lib/abstract_controller/base.rb:136:in `process’
  • actionview (6.0.3.5) lib/action_view/rendering.rb:39:in `process’
  • rack-mini-profiler (2.3.1) lib/mini_profiler/profiling_methods.rb:111:in `block in profile_method’
  • actionpack (6.0.3.5) lib/action_controller/metal.rb:190:in `dispatch’
  • actionpack (6.0.3.5) lib/action_controller/metal.rb:254:in `dispatch’
  • actionpack (6.0.3.5) lib/action_dispatch/routing/route_set.rb:50:in `dispatch’
  • actionpack (6.0.3.5) lib/action_dispatch/routing/route_set.rb:33:in `serve’
  • actionpack (6.0.3.5) lib/action_dispatch/journey/router.rb:49:in `block in serve’
  • actionpack (6.0.3.5) lib/action_dispatch/journey/router.rb:32:in `each’
  • actionpack (6.0.3.5) lib/action_dispatch/journey/router.rb:32:in `serve’
  • actionpack (6.0.3.5) 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:27: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:355: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.5) lib/action_dispatch/middleware/cookies.rb:648:in `call’
  • actionpack (6.0.3.5) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call’
  • activesupport (6.0.3.5) lib/active_support/callbacks.rb:101:in `run_callbacks’
  • actionpack (6.0.3.5) lib/action_dispatch/middleware/callbacks.rb:26:in `call’
  • actionpack (6.0.3.5) lib/action_dispatch/middleware/actionable_exceptions.rb:18:in `call’
  • actionpack (6.0.3.5) lib/action_dispatch/middleware/debug_exceptions.rb:32:in `call’
  • actionpack (6.0.3.5) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call’
  • logster (2.9.6) lib/logster/middleware/reporter.rb:43:in `call’
  • railties (6.0.3.5) lib/rails/rack/logger.rb:37:in `call_app’
  • railties (6.0.3.5) 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.5) lib/action_dispatch/middleware/remote_ip.rb:81:in `call’
  • actionpack (6.0.3.5) lib/action_dispatch/middleware/request_id.rb:27:in `call’
  • lib/middleware/enforce_hostname.rb:23:in `call’
  • rack (2.2.3) lib/rack/method_override.rb:24:in `call’
  • actionpack (6.0.3.5) lib/action_dispatch/middleware/executor.rb:14:in `call’
  • rack (2.2.3) lib/rack/sendfile.rb:110:in `call’
  • actionpack (6.0.3.5) lib/action_dispatch/middleware/host_authorization.rb:76:in `call’
  • rack-mini-profiler (2.3.1) lib/mini_profiler/profiler.rb:373:in `call’
  • message_bus (3.3.4) lib/message_bus/rack/middleware.rb:61:in `call’
  • lib/middleware/request_tracker.rb:177:in `call’
  • railties (6.0.3.5) lib/rails/engine.rb:527:in `call’
  • railties (6.0.3.5) lib/rails/railtie.rb:190:in `public_send’
  • railties (6.0.3.5) 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.8.0) lib/unicorn/http_server.rb:634:in `process_client’
  • unicorn (5.8.0) lib/unicorn/http_server.rb:732:in `worker_loop’
  • unicorn (5.8.0) lib/unicorn/http_server.rb:548:in `spawn_missing_workers’
  • unicorn (5.8.0) lib/unicorn/http_server.rb:144:in `start’
  • unicorn (5.8.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 `’

  1. Discourse 설정 마법사를 다시 실행해 보았지만 문제가 여전히 남아 있습니다.

  2. 모든 플러그인을 비활성화한 안전 모드(safe-mode)로 실행해 보았지만 문제가 여전히 남아 있습니다.

  1. 또한 Discourse를 영어로 되돌리고 /sidekiq/scheduler에서 Jobs::EnsureDbConsistency를 트리거해 보았지만, 해당 그룹 이름은 여전히 일본어로 남아 있습니다. :thinking:

:group_name=>“스태프”

group_name 매개변수가 URL 인코딩되지 않은 것 같습니다. 어떤 브라우저를 사용하시나요?

최신 Chrome 버전에서는 이를 재현할 수 없습니다.

최신 업데이트가 적용된 Chrome을 사용 중입니다. :grinning:
Firefox와 Opera에서도 시도해 봤는데, 모두 동일한 문제가 발생합니다.

다른 사용자들도 같은 문제를 겪고 있다는 것을 확인했습니다. :thinking:

아직도 이 문제를 재현할 수 없습니다. 제 브라우저에서는 링크가 다음과 같이 퍼센트 URL 인코딩됩니다:

http://localhost:9292/topics/private-messages-group/arpit/%E3%82%B9%E3%82%BF%E3%83%83%E3%83%95.json

… 그리고 서버에서 정상적인 응답을 반환합니다.

브라우저와 운영체제의 기본 로케일이 무엇인가요? 영어인가요, 일본어인가요?

왜 브라우저에서 퍼센트 URL 인코딩이 적용되지 않는지 궁금합니다.

제 Windows 10에는 일본어와 중국어 언어 팩이 모두 설치되어 있습니다.
현재 Windows 기본 언어는 중국어로 설정되어 있습니다.
Chrome은 일본어로, Firefox는 영어로 설정되어 있습니다. :sweat_smile:


여러 번 테스트해 본 결과, 그룹 이름에서 몇 가지 이상한 동작을 발견했습니다.

예를 들어, 사용자 지정 → 텍스트에서
groups.default_names.trust_level_0 = トラストレベル0
으로 설정하면 URL이 /g/%E3%83%88%E3%83%A9%E3%82%B9%E3%83%88%E3%83%AC%E3%83%99%E3%83%AB4/messages가 되고, 500 Internal Server Error가 발생합니다.


groups.default_names.trust_level_0 = trust_level_0로 변경하고 1일 정도 기다리면, URL이 /g/trust_level_0/messages/로 다시 바뀌고 페이지에 문제없이 접근할 수 있습니다.


다른 단어로 변경하는 경우, 예를 들어 groups.default_names.trust_level_0 = Level 0로 설정하고 1일 정도 기다리면 URL은 변경되지 않습니다. URL이 일본어였으면 일본어로, 영어였으면 영어로 유지됩니다.


현재로서는 모든 그룹 이름을 영어 기본 이름으로 되돌리면 문제가 해결될 것 같습니다. 그룹 이름은 반드시 영어 기본 이름과 동일해야 하며, 그렇지 않으면 URL이 영어로 다시 바뀌지 않습니다.
예를 들어, 며칠 전에 groups.default_names.admins를 Admin으로 설정했는데, Admin 뒤에 's’를 붙이는 것을 잊었기 때문입니다. 며칠이 지난 지금도 URL은 여전히 일본어로 유지되고 있습니다.

저도 정확히 같은 문제를 겪고 있습니다. 이 문제는 이미 한동안 지속되어 왔으며, 그 기간 동안 Discourse를 여러 번 업데이트했습니다.



Screenshot 2021-05-12 at 9.50.22 AM
영문과 中文(TW) 로케일로 모두 전환해 보고, Google Chrome과 Firefox 브라우저에서도 시도해 보았습니다.

이 문제를 재현할 수 없습니다. 이 문제를 발생시키기 위해 필요한 정확한 단계는 무엇인가요?

그룹의 유니코드 이름을 설정한 후 유니코드 사용자 이름을 비활성화하면 나에게 이런 문제가 발생합니다.

감사합니다! 유니코드 사용자 이름을 활성화한 후 문제가 해결되었습니다.