luxaritas
(Jonathan Romano)
3월 24, 2022, 9:25오후
1
Discourse 인스턴스를 업그레이드하려고 했으나, 몇 가지 문제로 인해 일부 적용된 상태로 실패한 것 같습니다. ./launcher rebuild app을 실행하면 다음과 같은 오류 메시지가 표시되며, 이는 이미 (일부) 적용된 마이그레이션을 가리킵니다:
I, [2022-03-24T21:13:16.043071 #1] INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:
PG::DuplicateColumn: ERROR: column "bookmarkable_id" of relation "bookmarks" already exists
이 상황에서 복구할 방법이 있는지(아니면 아예 새로 설치해야 하는지) 조언을 주시면 감사하겠습니다. 감사합니다!
pfaffman
(Jay Pfaffman)
3월 24, 2022, 9:28오후
2
다음 명령을 실행하면
./launcher start app
이전 컨테이너를 시작할 수 있습니다. 이렇게 하면 다시 복구됩니다.
luxaritas
(Jonathan Romano)
3월 24, 2022, 9:29오후
3
네, 그 부분은 알고 있습니다(그리고 그렇게 했습니다) - 하지만 업그레이드와 관련하여 다음 단계가 무엇인지 궁금합니다.
pfaffman
(Jay Pfaffman)
3월 24, 2022, 9:33오후
4
아. 그러면 도움이 안 됐네
저도 비슷한 문제를 겪었지만, 제 해결책이 당신에게 도움이 될 것 같지는 않아요.
app.yml 파일에 SKIP_POST_DEPLOYMENT_MIGRATIONS가 설정되어 있지 않나요? 만약 설정되어 있다면, 이 값을 0으로 설정하고 데이터베이스를 마이그레이션한 후 다시 빌드해야 하지만, 당신의 문제는 그게 아닐 것 같아요.
pfaffman
(Jay Pfaffman)
3월 24, 2022, 9:39오후
6
그렇게 생각했어요. 그래서 특정 지점에서 현재 지점으로 마이그레이션할 수 있는 능력과 관련된 실제 문제가 있을 수 있습니다. 하지만 그런 일은 일어나서는 안 됩니다.
undasein
(Andres Garrido)
3월 31, 2022, 1:55오후
7
이것을 확인해 보세요:
Sorry. I’m on my phone and not quite thinking well enough to explain…
After the start app
su - postgres
psql discourse
And then the
drop table discourse_reactions_reactions ;
And then type exit or control-d a few times to get out of everything
에러를 일으키던 테이블들을 하나씩 비웠습니다(결국 7개였습니다). 에러 없이 앱을 다시 빌드할 수 있을 때까지 그렇게 했죠.
당신의 경우, 문제는 컬럼인 것 같습니다:
PG::DuplicateColumn: ERROR: column "bookmarkable_id" of relation "bookmarks" already exists
어느 테이블에 속하는지 찾아서 비울 수 있도록 하거나, 해당 컬럼을 단순히 삭제하는 것이 좋을 것입니다.
부분적으로 마이그레이션을 수행할 때, 해당 테이블들이 이미 생성되어 있어 다시 생성할 수 없고 에러가 반환되는 것 같습니다. 이 과정에서 에러가 발생하지 않도록 조건문을 추가할 수 있지 않을까요? (저는 전문가가 아닙니다) @pfaffman
pfaffman
(Jay Pfaffman)
3월 31, 2022, 3:32오후
8
맞는 말인 것 같습니다, @undasein .
bookmarks 테이블에서 bookmarkable_id 컬럼을 제거하고 싶으신 것 같습니다. 먼저 다음과 같이 컨테이너에 접속한 후 postgres로 진입하세요:
cd /var/discourse
./launcher enter app
su - postgres
psql
그런 다음 아래 명령을 실행하면 됩니다:
ALTER TABLE bookmarks
DROP COLUMN bookmarkable_id
DROP COLUMN bookmarkable_type;
하지만 포럼이 실행 중이라면 데이터베이스만 백업하는 것도 나쁘지 않은 방법입니다. 포럼이 실행 중이지 않다면, 위 enter app 명령 이후에 discourse backup으로 백업할 수 있습니다.
저도 같은 문제가 발생합니다! 이게 올바른 해결 방법인가요?
pfaffman
(Jay Pfaffman)
3월 31, 2022, 11:08오후
10
그렇게 추측했어요. 한번 시도해보고 알려주세요.
저는 디스커스(Forum software)에 익숙하지 않습니다.
@sam 앞으로 어떻게 진행해야 할지 아이디어가 있으신가요? 표준 설치와 업그레이드가 악몽 같은 일이었습니다.
위 방법으로 이 문제를 해결하는 것이 올바른 방법인가요?
감사합니다.
불행히도 작동하지 않았습니다. 여전히 다음과 같은 오류가 발생합니다.
PG::DuplicateColumn: ERROR: column "bookmarkable_id" of relation "bookmarks" already exists
위 명령어 이후에 추가로 실행해야 할 작업이 있었나요?
ALTER TABLE bookmarks
DROP COLUMN bookmarkable_id
DROP COLUMN bookmarkable_type;
도움 주셔서 감사합니다.
Benjamin_D
(Benjamin Decotte)
4월 2, 2022, 5:56오전
13
닉, 안녕하세요.
이 문제를 재현해 보고 있는데, 현재 인스턴스의 커밋은 무엇인가요?
아래 커밋으로 시도해 볼 수 있습니다:
version: cd7ce52138bed391d5efc56366e7a6517a6079e7
app.yml 파일에 이 커밋을 사용하세요. 이 커밋은 10일 전 것으로, 비슷한 문제가 있었던 커밋을 되돌린 직후의 상태입니다.
벤, 안녕하세요.
이 작업을 수행하기 위한 명령어를 순서대로 알려주실 수 있을까요?
업데이트 같은 건 쉽게 할 수 있지만, 이렇게 문제가 생긴 건 처음이라 솔직히 제 역량 범위를 벗어나서 좀 당황스럽네요 ㅎㅎ
Benjamin_D
(Benjamin Decotte)
4월 2, 2022, 10:10오전
15
./launcher start app를 실행하고 https://your.domain/admin에서 설치된 버전을 확인해 주시겠어요? 그러면 제가 사용자님의 단계를 다시 추적해 볼 수 있습니다. 어떤 플러그인을 사용하고 계신가요?
Ben님, 안녕하세요.
설치된 버전: 2.9.0.beta2
(5374e587a3 )
설치된 플러그인:
discourse-reactions
docker_manager
styleguide
감사합니다.
Nick
Benjamin_D:
./launcher start app
./launcher start app
-bash: ./launcher: No such file or directory
그래서 몇 가지 Ubuntu 업데이트가 있다는 걸 알아차렸고, 서버의 모든 것이 최신 상태가 되도록 업데이트했습니다.
다시 시도해 봤는데도 여전히
PG::DuplicateColumn: ERROR: column "bookmarkable_id" of relation "bookmarks" already exists
pfaffman
(Jay Pfaffman)
4월 2, 2022, 8:47오후
20
이것은 가능성이 높은 해결책으로 보입니다. 이 버전으로 업그레이드한 후 현재 버전을 설치할 수 있을지도 모르겠네요. 그런 식으로 진행하는 것이 제 생각에는 합리적으로 들립니다.