Ember 5 업그레이드로 사이트가 깨졌습니다

너무 이르다!

겨울 휴가 기간에 다른 소식들과 뒤섞여 이 변경 사항의 공지사항을 완전히 놓쳤습니다. 취미로 사이트를 운영하다 보니 이 포럼을 정기적으로 읽지는 않습니다. 오늘 업데이트로 사이트가 깨진 후에야 그 사실을 알게 되었습니다. 이제 EMBER_VERSION이 이미 비활성화되어 이전 버전으로 되돌릴 방법이 없고, 수정해야 할 부분을 수정할 방법도 없습니다. 비활성화 경고가 표시되지 않기 때문이죠(휴가 전 마지막으로 능동적인 유지보수를 했을 때 경고가 표시되지 않았습니다). 어쨌든 저에게 Ember에 대한 지식은 거의 없습니다.

이러한 상황은 개발자 포럼을 매 순간 주시할 수 없는 취미 개발자에게 기본 버전이 실제로 안전하게 사용 가능한 다른 포럼 솔루션으로 데이터베이스를 추출하여 이동을 고려하게 만들고 있습니다.

Ember 5가 깨지는 이유나 무엇이 문제인지 전혀 모르는데, 다른 해결책이 있을까요? JavaScript 콘솔은 도움이 되지 않습니다.

사실 JavaScript 콘솔은 보통 매우 유용합니다.

stable을 원하셨을 수도 있지만, 이제 와서 그러기는 좀 늦었을 겁니다.

모든 커스터마이징을 제거한 후, 스테이징 인스턴스를 사용하여 하나씩 다시 적용해 보시는 것을 권장합니다. 이렇게 하면 어떤 항목이 문제를 일으키는지 파악할 수 있으며, 해당 항목을 제거하거나 수정할 수 있습니다.

많은 인기 플러그인과 테마 컴포넌트는 이미 호환성을 갖추고 있습니다.

화면에 무한히 로딩 아이콘만 표시되고 "Ember not found"라는 메시지가 뜹니다.

저는 Digital Ocean의 기본 표준 버전인 Discourse를 설치했습니다. 설치 과정에서 어떤 브랜치를 사용할지 묻는 질문은 전혀 없었고, 당연히 LTS 버전이 설치될 것이라고 가정했습니다. 2개월 안에 파괴적 변경이 포함된 기능이 배포된 후 필수로 전환되는 것은 제가 생각하는 LTS의 개념이 아닙니다. WordPress나 Linux에서는 LTS가 아닌 릴리스에서도 이렇게 하지 않을 것입니다. 모든 새로운 DigitalOcean 드롭렛에 대해 이 문제를 수정하고, 개인 사용자는 사용하지 않는 것이 좋다는 경고를 추가해 주세요.

이 답변을 싫어하게 되겠지만, DO는 DO가 원하는 대로 행동할 뿐이고, 이는 다른 사람들의 손에 달려 있지 않습니다. 따라서 그들에게 그렇게 요청해야 합니다.

DigitalOcean 외부에서는 항상 그들의 설치 도구를 사용하지 말라고 경고하고 있습니다.

콘솔의 오류를 보면 어떤 테마 컴포넌트에서 오류가 발생했는지 대개 파악할 수 있습니다. 오류 전체를 여기에 붙여넣어 주실 수 있을까요? (오류를 확장해서) 아니면 가능하시다면 포럼 URL을 여기에 공유해 주시거나, 원하시면 개인 메시지로 보내 주시겠습니까?

그렇다면 Digital Ocean(DO) 측과 직접 이야기를 나누셔야 할 것 같습니다 :slight_smile:

그럼에도 불구하고, 표준 설치(DO의 버전이 아닌 것)에서 tests-passed(기본값)는 LTS가 아니며, stable이 LTS입니다. CDCK가 이 기본값을 장려하려는 이유는 커뮤니티를 통해 최신 버전을 테스트할 수 있기 때문이라고 생각합니다. 무료 소프트웨어를 받는 대가로 합리적인 조치라고 볼 수 있죠. 하지만 선택지는 항상 열려 있습니다.

safe-mode를 사용하는 것이 도움이 될 수 있습니다. 손상된 테마를 비활성화하는 것만으로 해결될 수도 있습니다.

몇 년 전에 제가 당신을 위해 무언가를 처리해 준 적이 있는 것 같습니다. 빠른 해결책을 찾아보려 했지만, 더 이상 해당 사이트 계정이 없습니다.

어쨌든 안전 모드(Safe mode)는 작동해야 합니다. 안전 모드를 시도해 보셨나요? 그렇게 하면 문제를 일으키는 테마나 플러그인을 분리할 수 있습니다.

추가 정보가 전혀 없으면 도움을 드리기 매우 어렵습니다.

어떤 테마를 사용 중이신가요? 어떤 플러그인을 사용하시나요? 그중 어떤 것이 문제인가요?

안녕하세요, @Judith

갑자기 이런 일이 생겨서 놀라셨을 텐데 정말 죄송합니다. :cry: 문제를 집중적으로 해결하기 위해 이 내용을 별도의 전용 토픽으로 분리했습니다.

진행 상황은 어때요? :crossed_fingers:

모두 감사합니다!

Discourse 푸시 알림을 iPhone으로 보내는(표준 Discourse 방식이 작동하지 않는 경우) 문제의 플러그인을 찾아냈습니다. 바로 @featheredtoast의 GitHub - featheredtoast/discourse-pushover-notifications: Pushover notifications for Discourse · GitHub 와 제 GitHub - Sprachprofi/discourse-fcm-notifications: Send Discourse push notifications through FCM to any custom app · GitHub 입니다. 두 플러그인의 Ember 코드는 동일하며 매우 단순합니다. 관리자 화면에 몇 개의 추가 필드와 사용자 프로필에 하나 추가된 필드, 그리고 푸시 알림이 이미 활성화되어 있는지 여부에 대한 체크 로직 정도입니다. EMBER_VERSION 스위치가 폐지되었기 때문에, 문제의 몇 줄을 좁혀 보는데 도움이 될 수 있는 비추천(deprecation) 경고나 오류 메시지를 볼 수 없게 되었습니다. 그래서 Ember 3과 Ember 5 사이에서 무엇이 변경되었을지 Github Copilot에게 조언을 구했고, 현재 그 제안들을 시도해 보고 있습니다. 아이디어가 있으시면 언제든 환영합니다.

재차 강조하지만, 이는 깨어지는 변경(breaking change)을 강요하는 방식이 아닙니다. 그리고 저는 Discourse에 깊은 실망을 느낍니다. 모든 상식에 반하는 여러 정책들이 있습니다:

  • 기술적 지식이 없는 사용자들이 기본적으로 테스트 통과 버전(tests-passed) 대신 LTS 버전을 사용하지 못하게 하는 것
  • 공식 설치 가이드에서 더 안정적인 버전을 사용할 수 있는 가능성조차 언급하지 않음으로써 이 문제를 더욱 악화시키는 것. 이는 아마도 LTS 버전이 덜 필요한 포럼 내부 관계자들만 알고 있는 것 같습니다.
  • 이전의 정상 작동하던 버전으로 되돌리는 것을 불가능하게 만드는 것
  • EMBER_VERSION 플래그를 의도적으로 제거하여 프로젝트의 후방 호환성을 2개월 미만으로 제한함으로써 이를 더욱 악화시키는 것. 다른 프로젝트들은 1년의 후방 호환성을 보장하며, 그것들은 또한 이전 버전으로 되돌릴 수 있는 프로젝트들입니다.

직접 만든 플러그인에서는 (아마도 유일한) 문제가 Ember 전역 변수를 사용하고 있다는 점일 것 같습니다.

export default Ember.Component.extend({

위 코드는 아래처럼 리팩토링해야 합니다.

import Component from "@ember/component";
export default Component.extend({

(클래스 구문으로 리팩토링하는 것이 더 좋겠지만, 사이트를 다시 정상 작동시키기 위해서는 필수적이지 않습니다)

참고로 ChatGPT는 이런 문제를 찾아내는 데 능숙합니다.

네, @RGJ와 같은 의견입니다. 위에서 언급된 ‘Ember not found’ 오류를 기준으로 볼 때, 가장 가능성 높은 원인은 'ember-global’의 비추천(deprecation) 처리입니다. 자세한 내용은 여기에서 확인하실 수 있습니다(원래 공지에서 링크됨). 해당 플러그인들에서는 Ember.Component 및 일부 Ember.computed.* 호출에 이 기능이 사용되고 있는 것으로 보입니다.

간단한 PR 두 개를 첨부합니다. 이 수정 사항 이후에 다른 문제가 드러날 가능성은 있지만, JS 코드를 대략 살펴본 결과 눈에 띄는 문제는 보이지 않습니다.

롤아웃 과정에 대한 피드백을 보내주셔서 감사합니다! 우리는 진전과 안정성 사이의 적절한 균형을 맞추기 위해 지속적으로 노력하고 있습니다. 이번 롤아웃에서 배운 교훈을 향후 업그레이드/리팩토링 프로젝트에 반드시 적용하겠습니다.

@david 감사합니다! 오류 범위를 줄이기 위해 당분간 Pushover 알림을 비활성화하고, Discourse FCM Notifications 플러그인의 최신 버전을 가져왔습니다. 하지만 새 빌드에서는 여전히 “Ember not defined” 오류가 발생합니다.

참고로, Copilot의 제안은 다음과 같았습니다:

set / setProperties 관련 부분은 잘못된 것 같습니다. Ember 5에서 이 함수들이 여전히 존재하는지 확인했습니다. 또한 this._super를 super로 변경해도 작동하지 않았고, 컴파일 중에 오류 메시지가 나타났습니다. computed 문법도 현재 변경되었는데, 원래 문법이든 Copilot이 추천한 문법이든 둘 다 맞지 않습니다. 그래서 Ember 5에서 무엇이 더 변경되었는지 아이디어가 떠오르지 않습니다. 저는 다른 프로젝트에서는 Ember를 사용하지 않습니다.

더 다른 아이디어가 있을까요?

실수해서 정말 죄송합니다 - 제가 한 부분을 놓쳤어요 :facepalm:. 이렇게 하면 해결될 거예요: Fixup Ember.Component usage - Pull Request #2 - Sprachprofi/discourse-fcm-notifications - GitHub

네, AI가 비필수적인 새로운 패턴(네이티브 클래스 구문, this.set/get 등)과 필수적인 비추천(deprecation) 수정 사항 사이를 구별하는 데 어려움을 겪을 수 있다고 생각해요. AI의 제안은 여전히 유용할 수 있지만, 무엇을 신뢰하고 무엇을 무시할지 알 만큼 충분한 컨텍스트가 있을 때만 그렇습니다.

개인적으로는 https://deprecations.emberjs.com/v3.x와 같은 권위 있는 출처를 항상 먼저 확인합니다.

사이트가 다시 복구되었습니다! 실시간으로 이 문제를 해결해 주셔서 정말 감사합니다. 정말 감사드립니다.

@featheredtoast 푸시오버(Pushover) 알림을 사용하는 포럼도 안전하게 업데이트할 수 있도록 풀 리퀘스트도 수락해 주세요.

오늘부로 Pushover 알림 관련 패치도 병합되었습니다 :white_check_mark: