문제 설명
최근 새로운 CDN 서비스를 설정하고 app.yml에서 DISCOURSE_LONG_POLLING_BASE_URL을 구성하여, 롱 폴링(long polling) 서비스를 원래 서버와 분리하려 했습니다.
그러나 메시지 버스가 구성한 롱 폴링 기본 URL을 무시하고 계속 "/"로 요청을 보내고 있습니다.
재현 단계
app.yml에서DISCOURSE_LONG_POLLING_BASE_URL을 사용자 지정 CDN URL로 구성합니다.- Discourse를 다시 빌드하고 시작합니다.
- 프론트엔드가 환경 변수 값을 올바르게 읽는지 확인합니다.
- 브라우저 개발자 도구의 네트워크 탭에서 메시지 버스 네트워크 요청을 관찰합니다.
스크린샷
프론트엔드가 설정을 올바르게 읽는 모습:
예상 동작
long_polling_base_url 설정이 제공된 경우, 메시지 버스는 해당 설정을 사용하여 요청을 보내야 합니다.
실제 동작
DISCOURSE_LONG_POLLING_BASE_URL 구성과 관계없이 메시지 버스는 계속 "/"로 요청을 보내고 있습니다.
근본 원인
문제는 app/assets/javascripts/discourse/app/instance-initializers/message-bus.js 파일에 있습니다.
messageBus.baseUrl을 설정하는 로직이 long_polling_base_url 사이트 설정을 올바르게 처리하지 않아, 사용자 지정 URL이 구성되어 있더라도 기본적으로 /로 설정되도록 되어 있었습니다.
수정 사항
메시지 버스 인스턴스 초기화 프로그램에서 문제를 식별하고 수정했습니다. 이 수정은 siteSettings.long_polling_base_url이 설정되어 있고 "/"이 아닌 경우, 메시지 버스의 기본 URL이 올바르게 구성되도록 보장합니다.
검증
- 프론트엔드가 환경 변수를 올바르게 읽는지 확인했습니다.
- 설정을 존중하도록 메시지 버스 초기화 로직을 수정했습니다.
- 모든 포맷 체크를 통과했습니다.
- 메시지 버스가 이제 구성한 롱 폴링 기본 URL을 올바르게 사용하고 있습니다.
이 버그는 사용자 지정 CDN 설정과 함께 롱 폴링을 사용하는 모든 Discourse 설치에 영향을 미치며, 메시지 버스 요청에 대한 적절한 CDN 활용을 방해합니다.
@David_Ghost 님께 감사드립니다. 아래에서 해당 논의에 참여해 주세요:
