CLI에서 비활성화된 테마 컴포넌트를 삭제할 수 없음 - 부팅 실패

Alternative Logos 때문이라는 점은 알고 있습니다:

I, [2021-06-25T11:00:32.360020 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake themes:update assets:precompile'
Failed to update Alternative Logos
about.json contains invalid values: Maximum discourse version is invalid
/var/www/discourse/app/models/remote_theme.rb:169:in `update_from_remote'
/var/www/discourse/lib/tasks/themes.rake:61:in `block (2 levels) in <main>'

이 컴포넌트가 있었는데, Discourse가 다운되어 있어 관리자 패널에 접속하여 삭제할 수 없습니다. 명령줄에서 이 테마 컴포넌트를 삭제하는 방법은 무엇인가요?

cleanup가 중지된 컨테이너에 어떤 영향을 미치는지 정확히 모르겠지만, 그냥 ./launcher start app을 실행한 후 문제를 일으키는 항목( https://your.domain/admin/customize/themes )을 비활성화하면 될지도 모르겠네요?

app.yml 파일의 플러그인을 말씀하시는 건가요?

네, 맞습니다.

Alternative Logos 때문이라는 것은 알고 있습니다:

I, [2021-06-25T11:00:32.360020 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake themes:update assets:precompile'
Failed to update Alternative Logos
about.json contains invalid values: Maximum discourse version is invalid
/var/www/discourse/app/models/remote_theme.rb:169:in `update_from_remote'
/var/www/discourse/lib/tasks/themes.rake:61:in `block (2 levels) in <main>'

해당 컴포넌트가 설치되어 있지만, Discourse가 다운되어 있어 관리 패널에 접근하여 삭제할 수 없습니다. 명령줄을 통해 이 테마 컴포넌트를 삭제하는 방법이 있을까요? 앱을 다시 빌드하거나 시작할 수 없어서 상황이 좀 곤란합니다.

즉,

  • Alternative Logos의 about.json 파일에 나와 있는 최대 버전이 내가 사용하는 버전보다 낮아서 재구축을 할 수 없습니다.
  • 앱을 실행하지 않고서는 Alternative Logos 구성 요소를 삭제할 수 없습니다.
  • 재구축을 할 수 없기 때문에 앱을 실행할 수도 없습니다.

이 문제를 해결할 방법이 있을까요? Alternative Logos 구성 요소를 제거하고 싶습니다.

앱을 다시 빌드하지 않고 바로 실행할 수는 없나요?

./launcher start app

Unable to find image 'local_discourse/app:latest' locally
docker: Error response from daemon: pull access denied for local_discourse/app, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
See 'docker run --help'.

불행히도 그렇지 않습니다

그럼 git pull을 실행해도 되겠지만, 구원병을 기다리는 게 나을지도 :sweat_smile: (제이가 답글을 달고 있네…)

아니요, git pull은 아무것도 하지 않습니다.

다음 명령어를 시도해 보셨나요?

  ./launcher start app

다만, 이전 컨테이너가 종료된 상태에서 ./launcher cleanup을 실행했고 시작할 컨테이너가 없다면 꽤 난감한 상황에 빠진 셈입니다. 그렇게 하신 건가요? 그렇게 하신 것으로 보입니다.

잘못된 테마 컴포넌트 때문에 업그레이드가 불가능해지는 것은 버그라고 생각합니다. 따라서 해결책이 곧 나올 수도 있겠습니다.

데이터베이스를 수정하여 테마 컴포넌트를 제거하는 것도 방법이지만, 데이터베이스에 접근할 수 있도록 컨테이너를 실행할 수 없는 상태라면 어떻게 해야 할지 정확히 모르겠습니다.

제가 생각할 수 있는 다른 긴급 해결책은 클린 설치 환경에서 기존 데이터베이스를 복원해 보는 것입니다.

클린 설치 환경에 데이터베이스를 복원한 다음(깨진 테마는 무시되지 않을까요?), 기존 데이터베이스를 삭제하고 업그레이드된 Discourse로 새 빈 데이터베이스를 다시 구축한 후, 원격 클린 설치 환경의 데이터베이스를 복원하는 방식입니다.

또 다른 해결책은 데이터베이스 전용 이미지를 생성하고 SQL을 사용해 깨진 테마 컴포넌트를 제거하는 것입니다.

아마도 새 설치를 진행한 뒤, 백업에서 복원할 것 같습니다. 그리고 이 .sql 백업 파일에서 대체 로고(Alternative Logos)에 대한 변경 사항을 적용할 예정입니다.

다만, 컴포넌트가 깨져서 Discourse 재구성이 필요한 경우, 처음부터 다시 설치하는 것 외에는 다른 선택지가 없다는 점은 정말 좋지 않은 상황입니다.

음, 결국 해결책은 새로운 Discourse 설치 환경을 설정하고, 백업에서 복원한 뒤 문제를 일으키던 구성 요소를 삭제하는 것이었습니다.

오늘 아침에도 비슷한 상황을 겪었지만, 앱을 단순히 재시작하는 것으로 해결했습니다.

제 사이트에는 약 10개의 테마가 있으며, 모든 테마가 색상 스킴에 맞춰 서로 다른 색상의 로고를 사용하므로 Alternative Logos 컴포넌트를 사용해 왔습니다. 이제 사이트 설정에서 다크 테마 로고를 입력할 수 있는 위치를 확인했습니다. 하지만 이 비권장(deprecated) 컴포넌트를 삭제하면, 다른 테마들을 위한 나머지 사용자 지정 로고들은 어디에 추가해야 하나요?

문제는 about.json 파일에 있는 것 같고, 테마 컴포넌트를 포크해서 직접 버전을 만들 수 있을 것 같아요. 하지만 자세히 살펴보거나 직접 시도해 본 적은 없습니다.