Discourse 모바일 버전에서 개발하기

Ubuntu 환경에서 로컬 개발용 Discourse를 설치해 두고 있습니다. 로컬 설치 가이드를 따라 메인 개발 버전을 정상적으로 구동 중입니다. 새로 추가된 ember-cli도 설정하여 Rails 앱으로 프록시하도록 구성했습니다. 데스크톱 버전 앱은 완전히 상호작용이 가능합니다.

하지만 Chrome DevTools를 사용해 모바일 버전을 확인하면 문제가 발생합니다. “200 OK” 응답은 받지만 내용이 전혀 없는 빈 페이지가 표시될 뿐입니다. 완전히 비어 있는 상태입니다.

Rails 로그를 통해 무언가를 렌더링하는 것을 볼 수 있지만, Ember를 통해 프록시되는 것 같지 않습니다.

Started GET "/" for <redacted> at 2022-01-31 22:51:03 +0000
   Rendering layout layouts/application.html.erb
   Rendering categories/index.html.erb within layouts/application
   Rendered categories/index.html.erb within layouts/application (Duration: 2.8ms | Allocations: 925)
   Rendered layouts/_head.html.erb (Duration: 1.6ms | Allocations: 273)
   Rendered common/_discourse_stylesheet.html.erb (Duration: 3.2ms | Allocations: 609)
   Rendered layouts/_head_tag.html.erb (Duration: 0.2ms | Allocations: 65)
   Rendered application/_header.html.erb (Duration: 2.5ms | Allocations: 824)
   Rendered layouts/_body_tag.html.erb (Duration: 0.1ms | Allocations: 21)
   Rendered layout layouts/application.html.erb (Duration: 22.6ms | Allocations: 4961)

ember-cli에서는 해당 요청에 대한 로그가 전혀 출력되지 않습니다.

아마도 무언가를 잘못 설정해서 어딘가에서 오류가 발생하고 있는 것 같지만, 어디에서 어떻게 오류를 확인해야 할지 도무지 알 수 없습니다. 이 문제를 더 자세히 로그로 확인할 수 있는 추가 플래그나 환경 변수가 있을까요? 여기에서 제안된 대로 DEBUG=ember-cli:*를 설정해 보았지만, 요청에 대한 로그는 출력되지 않았습니다.

이 문제에 대한 도움이 큰 도움이 될 것입니다! Discourse를 오랫동안 사용해 온 사용자입니다. 개발해 주셔서 감사합니다!

브라우저 콘솔에 자바스크립트 오류가 있나요?

아쉽게도 아닙니다. 콘솔에 빨간색으로 표시되는 것은 이것뿐입니다:

GET http://localhost:4200/ 200 (OK)

이상하게도 응답이 완전히 비어 있습니다.

Ember CLI나 Discourse 자체에서 더 자세한 로그를 활성화하는 방법에 대해 혹시 아이디어가 있으신가요? 에러가 뭔지만 알면 문제를 해결할 수 있을 것 같은데, 무슨 이유인지 에러 메시지가 전혀 보이지 않습니다. 혹시 방법 아시는 분 계신가요?

소스 코드를 좀 더 파고들다 보니 도움이 되는 환경 변수 두 가지를 찾았습니다.

  • PRINT_EXCEPTIONS - 모든 예외를 표시합니다. 너무 노이즈가 많아서 유용할지 모르겠지만, 제 경우에는 도움이 되었습니다.
  • RAILS_LOGS_STDOUT - 모든 로그를 콘솔로 출력합니다. 위에서 찾고자 했던 것이 바로 이것이었죠.

이것들을 통해 Rails 내부나 제 테마의 SCSS에서 에러가 발생하지 않는다는 것을 확인했습니다.

어떤가 하면, Ember와 Rails 사이에 gzip 구성 요소가 끼어 있었습니다. 어떻게 거기서 생겼는지는 모르겠지만, Content-Encoding 헤더가 존재할 때 이 특정 라인에서 해당 헤더를 복사해서 넘겨주고 있었고, 이로 인해 브라우저(와 curl)가 응답 본문 전체를 무시하게 되었습니다(아마도 더 이상 gzip으로 인코딩되지 않았기 때문일 것입니다).

이 문제는 2.9.0.beta1에서 수정된 것 같습니다만, 저는 2.7.13 버전을 사용하고 있습니다.

개발 환경에서 gzip 구성 요소를 제거하면 제 특정 버전에서는 문제가 해결되었지만, 앞으로는 gzip와 함께 잘 작동할 것으로 보입니다. 데스크톱 버전에서는 왜 같은 문제가 발생하지 않았는지 모르겠습니다.

비슷한 문제를 겪고 있는 다른 분들에게 도움이 되길 바랍니다.