PG::UndefinedTable: 오류: 관계 "voice_rooms"이(가) 존재하지 않습니다

저도 같은 문제를 겪었습니다. 이 스크립트를 실행하려면 ask.discourse.com에서 꽤 많은 도움을 받아야 했는데, 시스템 관리 경험이 적은 분들에게는 그리 쉬운 작업이 아니었기 때문입니다!

다른 분들을 위해 요약해 드립니다:


표준 Docker 설치 환경에서 이 문제를 겪고 계신 분들을 위해, 위의 스크립트를 실제로 실행하는 방법을 안내해 드립니다.

셸을 열고 psql을 실행합니다.

  • 단일 컨테이너:

    cd /var/discourse
    ./launcher start app   ## 이미 실패한 재빌드가 있었던 경우에만 필요
    ./launcher enter app
    su -c 'psql discourse' postgres
    
    
  • 두 컨테이너 구성:

    cd /var/discourse
    ./launcher enter data
    su -c 'psql discourse' postgres
    
    

discourse=# 프롬프트가 표시되어야 합니다. 확실하지 않다면 \conninfo를 실행해 보세요.

스크립트 실행.

프롬프트에 nat님의 위 게시물DO $$ ... $$; 블록 전체를 붙여넣고 Enter 키를 누르세요. 성공적으로 실행되면 다음과 같은 알림이 출력됩니다:

NOTICE:  Renamed resenha_rooms to voice_rooms
NOTICE:  Renamed resenha_room_memberships to voice_room_memberships
...

대신 예외가 발생하면(예: “Both Resenha and Voice tables exist. Nothing was changed.”), 작업을 중단하고 메시지를 여기에 다시 붙여넣어 주세요. 해당 경우 스크립트는 의도적으로 안전하게 설계되어 있어 아무것도 변경하지 않습니다.

종료 및 재빌드.

\q
exit

그 후 호스트로 돌아와서:

./launcher rebuild app          # 단일 컨테이너
./launcher rebuild web_only     # 두 컨테이너 구성 (물론 bootstrap을 통해서도 가능)

재빌드가 두 번 필요할 수 있습니다. 첫 번째 재빌드는 halfway 적용된 마이그레이션 상태를 마무리하고, 두 번째 재빌드가 깨끗하게 완료됩니다.