현재 최신 커밋 레벨(105634435f)을 사용하고 있습니다. 저는 보통 일주일에 한 번 정도 Discourse를 업그레이드합니다. 평소에는 문제가 전혀 없었습니다. 그런데 이번에는 여러 테마 컴포넌트가 로드되지 않습니다. 여기서 '로드 실패’란 컴포넌트가 더 이상 화면에 표시되지 않는다는 뜻입니다. 관리 패널의 로그 기능에서는 이 문제와 관련이 있을 만한 이상한 내용을 찾지 못했습니다. 많은 오류들은 우발적인 것으로 보이며, 이미 꽤 오랜 기간 동안 발생해 왔습니다. 예를 들어 드물게 발생하는 MimeType 오류나 Google DNS 타임아웃 등이 있는데, 역시 드물게 발생하는 오류들입니다.
업그레이드 후 로드되지 않는 플러그인은 다음과 같습니다:
DiscoTOC
discourse gifs
Discourse Jitsi
Hamburger Theme Selector
Nav Links Component
Tag Icons
정상적으로 작동하는 플러그인은 다음 두 개뿐입니다:
Discourse Kanban
Easy Footer
더 많은 정보가 필요하시다면(필요할 것 같습니다) 기꺼이 제공하겠습니다. 안내해 주시면 감사하겠습니다. 이 게시글은 무언가 잘못되었다는 신호를 보내는 것이며, 아마도 최근 변경 사항과 관련이 있을 것입니다. 정보가 부족해서 죄송합니다…
팔코가 말한 것에 덧붙이자면, 해당 변경 사항은 며칠 내에 다시 적용될 예정입니다. 다만, 다시 적용하기 전에 모든 공식 테마/컴포넌트가 해당 변경 사항과 호환되는지 확인하겠습니다. 따라서 공식 테마/컴포넌트에서 문제가 다시 발생하면, 업데이트를 통해 문제를 해결할 수 있습니다.
또한, 사이트에 사용자 지정/비공개 컴포넌트를 사용하는 사람들을 위해 테마/컴포넌트를 호환되도록 만드는 방법에 대한 게시글도 작성하겠습니다.
이 문제가 롤백된 기능과 관련이 있다고 생각하지 않습니다. 몇 주 전에도 컴포넌트에서 동일한 상황이 발생했는데, 아마 포크 인디케이터 기능(플러그인을 다루므로 아마도 이 역시 관련이 없을 것 같지만, 컴포넌트를 수정하기 위해 포크해야 했던 적이 있었습니다) 때문이었을 것입니다.
네, 그 변경 사항이 테마에서 확인한 문제의 원인입니다. 무슨 일이 있었는지 설명하려면 테마 시스템에 대해 조금 자세히 말씀드릴 필요가 있습니다. Discourse 테마/컴포넌트에 JS를 추가하는 방법은 두 가지가 있습니다. 첫 번째 방법은 head_tag.html 파일 안에 <script type="text/discourse-plugin"> 태그를 사용하는 것이고, 두 번째 방법은 테마/컴포넌트 내부의 javascripts라는 이름의 디렉토리에 저장된 독립적인 JS 파일을 사용하는 것입니다.
오늘 제가 변경하기 전까지는, 해당 특수 스크립트 태그 내부의 JavaScript는 Ember CLI로 Discourse를 개발할 때 사용할 수 없는 Discourse 전역 변수에 의존하는 방식으로 처리되었습니다. 오늘 제가 적용한 변경 사항으로 인해, Discourse는 해당 태그 내부의 JS를 독립적인 파일에서 가져온 것처럼 처리하도록 만들었고, 이를 통해 Discourse 전역 변수를 사용하지 않도록 했습니다.
이제 스크립트 태그를 파일처럼 처리하는 것의 한 가지 "부수 효과"는, 태그 내부의 JavaScript에 이전에는 없던 "use strict" 지시문이 추가된다는 것입니다. 그리고 이 지시문이 여러분이 확인한 오류를 일으키고 있습니다:
제가 변경 사항을 다시 적용할 때 JS 태그가 다시 독립적인 파일처럼 처리되므로, 오늘 테마에서 적용한 모든 변경 사항을 유지하는 것을 권장합니다.
네, 모든 변경 사항이 사라졌습니다. CSS, JS 변경 사항은 물론 텍스트 변경 사항까지요 즉, 제 테마가 “Lorem ipsum dolor sit amet …” 같은 텍스트가 포함된 초기 상태로 되돌아간 겁니다. 어쨌든 백업을 사용할 예정이지만, 업그레이드 후에 이런 일이 발생한 것은 정말 이상했습니다.