DuplicateColumn 및 multisite:migrate 실패

2.9.0.beta2에서 2.9.0.beta4로 업그레이드하는 과정에서 PG::DuplicateColumn: ERROR: column "bookmarkable_id" of relation "bookmarks" already exists라는 오류 메시지와 함께 실패했습니다. Recovering from failed/partially applied upgrade 에 있는 조언 덕분에 다시 온라인으로 복구를 했습니다. 이 문제는 (Docker화된) 멀티사이트 설치와 관련이 있는 것 같아 새로운 주제를 시작합니다.

문제는 multisite:migrate가 이전 마이그레이션의 일부로 이미 실행된 동일한 마이그레이션을 다시 실행하려는 것 같습니다. 그 결과 PG::DuplicateColumn: ERROR: column "bookmarkable_id" of relation "bookmarks" already exists 오류가 발생했습니다. 오류 메시지 기준으로 보아 다형성(polymorphic) 북마크 기능, DEV: Re-add polymorphic bookmark columns - Pull Request #16261 - discourse/discourse - GitHub 과 관련이 있을 수 있습니다 (@martin 님에게 알림).

문제를 겪은 후 제가 취한 즉각적인 임시 조치는 다음과 같습니다:

  1. 설정 파일 containers/web_only.yml에서 - exec: cd /var/www/discourse && sudo -E -u discourse bundle exec rake multisite:migrate 라인을 주석 처리했습니다.
  2. 북마크와 관련된 (부분적으로 적용된?) 마이그레이션을 수동으로 제거했습니다: ./launcher enter data를 실행하고 psql을 사용해 두 Discourse 데이터베이스에 로그인한 후 ALTER TABLE bookmarks DROP COLUMN bookmarkable_id, DROP COLUMN bookmarkable_type;를 실행했습니다.
  3. 다시 빌드를 실행했습니다: ./launcher rebuild web_only 2>&1

multisite:migrate가 실행되지 않았기 때문에 지금 놓치고 있을 수 있는 것이 있을까요? 의견이 있으면 감사하겠습니다. 두 사이트 모두 정상적으로 작동하는 것 같습니다. :crossed_fingers:

1개의 좋아요

그렇다면 저는 다른 업그레이드를 실행해서 문제가 해결되었는지 확인해 보겠습니다.

왜 그렇게 하려는 건지 혹시 의견이 있으신가요? 아니면 멀티사이트 마이그레이션을 실행할 때 무엇을 기대해야 하는지에 대한 조언을 주실 수 있을까요? 솔직히, 이해하지 못하는 스크립트를 실행하는 걸 꺼려하는 편입니다. :slightly_smiling_face:

적어도 어떻게 고치는지 대략은 알고 계실 테니까, 다음에 업그레이드할 때면(나처럼 기억력이 없다면) 완전히 잊어버리실 거예요. 이 문제를 해결한 다른 사용자들도 같은 경험을 한 것 같아서, 제 생각에는 제대로 작동할 거라고 꽤 확신합니다.

1개의 좋아요

맞는 말씀입니다. 원래 있던 컬럼을 제거하기 위해 post-migrate를 실행한 적이 없는 것 같네요. 해당 컬럼은 DEV: Re-add polymorphic bookmark columns - Pull Request #16261 - discourse/discourse - GitHub 에서 제가 제거했습니다. discourse/db/migrate/20220322024216_add_bookmark_polymorphic_columns.rb at 037172beaae0743176eee653bd2cd4cd1ce5c7e9 · discourse/discourse · GitHub 에서 컬럼을 다시 추가하기 전에 존재 여부를 확인해야 할 것 같아, 이를 위해 커밋을 생성하겠습니다.

도움이 될 커밋을 방금 병합했습니다:

4개의 좋아요