mreach
(M. Reacher)
9월 30, 2021, 8:25오후
1
관리자 사용자 한 명이 Discourse 업데이트 후 이상한 오류를 겪고 있습니다. 이 오류는 사용자가 뒤로 가기 버튼이나 사이트 로고를 클릭할 때 발생합니다. 사이트의 루트/홈으로 이동하도록 JavaScript가 트리거되는 것처럼 보이지만, 대신 다음과 같은 오류가 발생합니다:
시각적으로 오류는 다음과 같이 표시됩니다:
JS 콘솔에서는:
또한 /admin으로 이동하려는 시도 등 모든 네비게이션 바 클릭에서도 이 문제가 발생한다는 것을 발견했습니다.
이 문제를 더 깊이 추적하는 데 도움이 될 만한 생각이 있으신가요? production.log나 다른 곳에서 오류를 발견하지 못해, JavaScript와 관련된 것으로 보이지만 아직 원인을 찾지 못해 고개를 갸웃거리고 있습니다.
pfaffman
(Jay Pfaffman)
9월 30, 2021, 9:19오후
2
mreach
(M. Reacher)
9월 30, 2021, 10:16오후
3
제안해 주셔서 감사합니다. 이상하게도 안전 모드에서 3가지 옵션을 모두 활성화했음에도 여전히 오류가 발생했습니다:
mreach
(M. Reacher)
10월 1, 2021, 2:51오후
4
아직까지 추가 디버깅 과정에서 막혀 있는 상태입니다. 이로 인해 "안전 모드"가 JavaScript를 완전히 비활성화하지 못하고 있는 것 같습니다. 테스트를 위해 JavaScript 기능을 더 철저히 제거할 수 있는 다른 단계가 있을까요?
david
(David Taylor)
10월 1, 2021, 2:57오후
5
사이트가 공개적으로 접근 가능한가요? 그렇다면 링크를 공유해 주실 수 있을까요? (공개적으로 게시하기 꺼리시면 개인 메시지로 보내주셔도 됩니다)
david
(David Taylor)
10월 1, 2021, 3:58오후
6
링크를 공유해 주셔서 감사합니다 @mreach . 여기서는 눈에 띄는 문제를 찾지 못하겠습니다.
사이트에서 이 문제가 한 명의 사용자에게만 발생한다고 언급하셨는데요. 특정 브라우저/기기에서만 발생하는 문제인지 아시나요? 아니면 다른 기기로 로그인해도 같은 문제가 발생하는 건가요?
특정 브라우저/기기에서만 발생하는 경우라면, 브라우저 플러그인(예: 광고 차단기)이 Discourse의 코드에 간섭을 일으키고 있을 수 있습니다.
모든 브라우저에서 문제가 발생한다면 해결이 좀 더 복잡합니다. 포럼에 서드파티 플러그인이 설치되어 있나요? 해당 사용자가 Discourse의 ‘인터페이스’ 설정에서 '기본 홈 페이지’를 어떻게 설정해 두었는지도 알아볼 가치가 있습니다.
mreach
(M. Reacher)
10월 1, 2021, 4:32오후
7
감사합니다. 네, 저도 대부분 같은 생각을 하고 있었습니다. 모든 확장 기능을 비활성화하고 브라우저 데이터를 모두 삭제하도록 지시했습니다. 그런데 또 다른 사용자가 동일한 문제를 보고했습니다… 그리고 두 사람 모두 Chrome을 사용 중입니다. Firefox와 Brave를 시도해 보라고 했더니, 두 사람 모두 해당 브라우저에서는 정상적으로 작동한다고 했지만, Chrome의 경우 어떤 조치를 취해도 다시 “정상적으로” 작동하지 않는다고 합니다. 다시 시크릿 모드에서의 결과를 물어보았는데, 두 사람 모두 시크릿 모드에서는 정상적으로 작동한다고 보고했습니다. 다시 한번 말씀드리지만, 이 모든 것은 마지막 Discourse 업데이트 이후에 일어난 일입니다. 따라서 JS에서 무언가가 제대로 정리되지 않는 것 같습니다… 어떻게 그런 일이 될 수 있는지 정말로 이해가 되지 않습니다.
두 사람에게 홈페이지로 무엇을 설정해 두었는지 물어보았습니다. 결과를 알려드리겠습니다. 정말 좋은 아이디어인데, 제 머리에는 떠오르지 않았던 것 같습니다…
mreach
(M. Reacher)
10월 1, 2021, 4:44오후
8
음, 흥미롭긴 하지만 결정적인 단서가 되지는 않네요:
문제를 겪고 있는 사용자는 홈 화면을 "Categories"로 설정해 두었습니다:
이를 “Latest” 등으로 변경하면, 사이트 로고를 클릭하거나 브라우저의 “뒤로” 화살표를 사용하여 홈 페이지를 정상적으로 불러올 수 있습니다. 하지만 다시 "Categories"로 변경하면 aforementioned 문제/에러가 재발합니다.
또한 이 사용자는 관리자이기도 하며, 오른쪽 위 햄버거 아이콘을 클릭한 뒤 "Admin"을 선택하면 위에서 보고된 것과 동일한 에러가 발생합니다. 홈 화면이 "Categories"가 아닌 "Latest"로 설정된 상태에서도 마찬가지입니다.
물론 새로운 정보이지만, 제 입장에서 보면 도움이 되는 내용은 아닙니다. 음.
david
(David Taylor)
10월 1, 2021, 4:59오후
9
mreach:
JS 콘솔에서:
이 오류들에 대해 좀 더 자세한 정보를 얻을 수 있을까요? 모두 확장 가능하며, 오류에 대해 좀 더 자세한 내용이 포함되었으면 합니다.
mreach
(M. Reacher)
10월 2, 2021, 8:24오후
10
mreach
(M. Reacher)
10월 4, 2021, 6:23오후
11
지금까지 제안해 주셔서 다시 한번 감사드립니다 - @david님 , 혹시 해당 사항에 대한 의견이 있으신가요?
david
(David Taylor)
10월 4, 2021, 6:54오후
12
아쉽게도 아닙니다. 이 로그들은 상당히 일반적이며 실제 원인에 대해 많은 정보를 제공하지 않는 것 같습니다.
가장 흥미로운 로그는 위에서 공유하신 스크린샷의 상단에 있으며, 동시에 pastebin의 마지막 항목이기도 한 것입니다.
domainname.com/:1 Uncaught (in promise) {readyState: 4, getResponseHeader: ƒ, getAllResponseHeaders: ƒ, setRequestHeader: ƒ, overrideMimeType: ƒ, …}
여기 있는 ... 안에 무엇이 포함되어 있는지 아는 것이 도움이 될 수 있습니다. 로그 왼쪽의 작은 삼각형을 클릭하면 확장되어 더 많은 정보를 볼 수 있어야 합니다. 해당 부분의 복사/붙여넣기 또는 스크린샷을 공유해 주시면 도움이 될 것입니다.
별개로, 서버 측 오류(/logs에서)를 확인하고 계신가요? 그리고 최신 버전의 Discourse를 사용하고 계신가요?
mreach
(M. Reacher)
10월 5, 2021, 5:02오전
13
네, 최신 버전을 실행하고 있습니다. 오류 발생 시점에 로그를 확인해 보았지만, 프로덕션 환경이나 그 외 어디에서도 아무런 문제가 보이지 않습니다…
음, 해당 라인에서 객체를 복사한 결과 다음과 같은 내용이 반환되었습니다:
{
"readyState": 4,
"responseText": "<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\">\n <meta http-equiv=\"refresh\" content=\"30\">\n <title>domainname.com Maintenance</title>\n <style>\n\t html {\n\t background: #3d4147;\n\t }\n .center {\n display: flex;\n justify-content: center;\n }\n .container {\n background: #717984;\n max-width: 500px;\n padding: 5px 50px 30px 50px;\n margin-top: 20px;\n }\n .title {\n padding-top: 20px;\n }\n h1, p {\n font-family: \"Helvetica Neue\",Helvetica,Arial,sans-serif;\n }\n @keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n .spinner {\n animation: spin 10s infinite linear;\n height: 75px;\n width: 75px;\n border: 7px solid #555555;\n border-right-color: transparent;\n border-radius: 50%;\n margin-top: 20px;\n }\n </style>\n </head>\n <body>\n <div class=\"center\">\n <img src=\"/err/site.png\" alt=\"site logo image\" width=\"512\" height=\"171\">\n </div>\n <div class=\"center\">\n <div class=\"container\">\n\t\t<center>\n <h1 class=\"title\" >We're temporarily under maintenance…</h1>\n\t\t</center>\n\n <div class=\"center\">\n <img src=\"/err/error.png\" alt=\"maintenance image\" width=\"150\" height=\"152\">\n </div>\n\n\t\t<center>\n <p>domainname.com is currently undergoing maintenance. We're either upgrading the site or performing scheduled maintenance. </p>\n\t\t <p>For your convenience, we've set this page to AUTOMATICALLY refresh for you when the system's available again!</p>\n <p>Thanks so much for your patience.</p>\n\t\t</center>\n\t\t\n <div class=\"center\">\n <div class=\"spinner\"></div>\n </div>\n </div>\n </div>\n </body>\n</html>\n",
"status": 200,
"statusText": "parsererror"
}
그리고 콘솔에서 찍은 스크린샷입니다:
mreach
(M. Reacher)
10월 5, 2021, 6:10오후
14
@david 그걸 말씀하신 건가요? 올바른 결과를 확보했기를 바랍니다.
david
(David Taylor)
10월 5, 2021, 6:17오후
15
프록시 뒤에 Discourse를 실행 중이신가요? 이 유지보수 메시지는 Discourse 자체에서 나오는 것이 아닌 것 같습니다
mreach
(M. Reacher)
10월 5, 2021, 7:32오후
16
사이트가 유지보수(업그레이드나 도커 업데이트 등) 중에 렌더링되는 오류 페이지 구현입니다…
david
(David Taylor)
10월 5, 2021, 7:37오후
17
오류가 발생한 시점에 해당 사이트가 의도적인 유지보수를 진행 중이 아니었나요? 그렇다면 해당 프록시 구현/설정에서 문제가 있는 것으로 보입니다. 이를 배제하기 위해, 표준 설치 지침 에 따라 Discourse를 포트 80/443에 직접 노출할 수 있나요?
물론, Discourse의 오류로 인해 프록시가 이 메시지를 표시하는 경우도 가능합니다. 하지만 Discourse가 반환한 내용을 알지 못하면 이를 진단하기 어렵습니다. 프록시가 업스트림 Discourse의 응답에 대한 로그를 기록하고 있을까요?