깨진 업데이트를 처리한 후 다시 헤드에 연결하는 방법?

몇 달 전에 업데이트 문제가 있었고, 결국 2.9.0.beta1으로 되돌려야 했으며 당시에는 더 이상 업데이트가 불가능한 상태였습니다.

다양한 사정으로 인해 이 프로젝트를 잠시 중단해야 했으며, 이제야 다시 작업에復帰할 수 있게 되었습니다. 근본적인 원인은 PostgreSQL 데이터베이스 서버가 충분히 그리고 적절하게 업그레이드되지 않았기 때문인 것으로 밝혀졌으며, 이 문제는 이제 해결되었고 현재 PostgresQL 14.x 버전으로 실행 중입니다. 또한 Discourse도 현재 이 버전의 데이터베이스에서 실행되고 있습니다.

불행히도 일반적인 웹 관리자 업그레이드 사용자 인터페이스를 통해 다시 업그레이드를 시도했을 때 fatal: HEAD does not point to a branch라는 오류가 표시되었습니다 (전체 오류 내용 보기):

fatal: HEAD does not point to a branch
Docker Manager: FAILED TO UPGRADE
#<RuntimeError: RuntimeError>
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:203:in `run'
...

/var/discourse/launcher rebuild app을 실행하면 해결될 것 같았지만, 이것도 작동하지 않았으며 결국 동일한 버전만 다시 시작되었습니다. 그러나 다음과 같은 출력을 확인했습니다:

$ ./launcher rebuild app
x86_64 arch detected.

WARNING: We are about to start downloading the Discourse base image
This process may take anywhere between a few minutes to an hour, depending on your network speed

Please be patient

2.0.20220818-0047: Pulling from discourse/base
1efc276f4ff9: Pull complete
1b880e64942b: Pull complete
794f6dc9a2ff: Pull complete
Digest: sha256:7734701087766821ffb2ddcef423754798bd345c2ac0d550131c6e6905c268e8
Status: Downloaded newer image for discourse/base:2.0.20220818-0047
docker.io/discourse/base:2.0.20220818-0047
...
I, [2022-09-13T02:09:12.828649 #1]  INFO -- : Replacing # redis with sv start redis || exit 1 in /etc/service/unicorn/run
I, [2022-09-13T02:09:12.829826 #1]  INFO -- : > cd /var/www/discourse/plugins && git clone https://github.com/discourse/docker_manager.git
Cloning into 'docker_manager'...
I, [2022-09-13T02:09:13.957219 #1]  INFO -- :
I, [2022-09-13T02:09:13.958187 #1]  INFO -- : > cd /var/www/discourse && git fetch --depth=1 origin tag v2.9.0.beta2 --no-tags
From https://github.com/discourse/discourse
 * [new tag]           v2.9.0.beta2 -> v2.9.0.beta2
I, [2022-09-13T02:09:18.214516 #1]  INFO -- :
I, [2022-09-13T02:09:18.215535 #1]  INFO -- : > cd /var/www/discourse && git checkout v2.9.0.beta2
Note: switching to 'v2.9.0.beta2'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 88a85843 FIX: Cooking custom emojis should not use a secure URL (#15929)
I, [2022-09-13T02:09:19.557296 #1]  INFO -- :
...

결국 백업을 복원하여 이러한 변경 사항을 되돌렸으며, Discourse를 main의 HEAD에 올바르게 다시 연결하고 최신 베타 버전으로 빌드를 다시 시작하는 방법에 대해 먼저 의견을 구해야 한다고 생각했습니다. 그리고 마침내 최신 버전으로 업데이트를 완료한 후에는 향후에 안정적 릴리스 버전으로 고정하여 업데이트하기를 원합니다. 지난 1년 동안 문제를 해결하기 위해 베타 버전을 사용했지만, 이제 이 모험은 충분합니다. :laughing:

Discourse가 백업을 생성하도록 하시겠습니까? 컨테이너 내부의 Postgres를 pg14를 사용하도록 업그레이드하는 방법을 강구하셔야 합니다. 아직 PG 13으로 돌아가도 늦지 않았다면, 그렇게 하시는 것이 더 나을 것입니다.

명령줄을 통해 재빌드만 하시면 됩니다.

음, @pfaffman 님께 몇 가지 말씀드리고 싶은 게 있어요:

  • 지적해 주셔서 감사합니다. PGSQL 업데이트에 너무 몰두해서 14가 아니라 13으로 이동해야 한다는 걸 깜빡했네요. 울 것 같아요!
  • 14에서 13으로 데이터베이스를 성공적으로 다운그레이드한 사례를 보신 적 있으신가요?
  • 이론적으로는 서버에 13용 클러스터를 하나 더 추가해서 13과 14가 동시에 실행되도록 할 수 있을 것 같지만, 이미 여러 다른 서비스들이 같은 서버에서 14 기반으로 실행 중이라 더 이상 건드리기 어렵습니다. 그래서 유일한 희망은 13 인스턴스를 설치하고 Discourse 쪽만 다운그레이드하는 거예요…
  • rebuild 명령어를 시도해 봤지만 작동하지 않았습니다. 위에서 공유한 내용 말씀하시는 거죠?: /var/discourse/launcher rebuild app,

따라서 출력에는 "Note"가 포함되지만, 이는 오류가 아닙니다. 최신 버전이 아닌 버전을 체크아웃할 때마다 “detached head” 메시지가 표시되는 것이 정상입니다.

그 마음을 잘 이해합니다.

그 부분은 제 전문 분야가 아닙니다. 컨테이너를 업데이트해서 pg14 도구를 사용하는 것이 훨씬 쉽습니다. pg13 사이트로 복원하려는 의사가 없다면 문제없이 진행할 수 있을 것입니다.

어떤 식으로 작동하지 않았나요? 그리고 이것이 프로덕션 서버라면, 먼저 테스트 서버에서 이 작업을 수행하는 것이 좋습니다.