버전을 변경하지 않고 Discourse를 재빌드하는 방법은?

app.yml에서 smtp 설정을 업데이트해야 하지만, discourse의 버전은 변경하고 싶지 않습니다.

version 태그를 통해 버전을 지정하면 아래 오류와 함께 재구축이 실패합니다. 현재 2.4.0.beta8 버전을 사용하고 있습니다.

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && find /var/www/discourse ! -user discourse -exec chown discourse {} \+ failed with return #<Process::Status: pid 336 exit 1>
Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"web", "cmd"=>["gem update bundler", "find $home ! -user discourse -exec chown discourse {} \\+"]}
6269af00c2a4671a6fd2cb13a55bd475743205262bae7f483bf468e4dcacbeed
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.

이 문제는 매년 반복적으로 제기되며, howto 주제가 마련되어야 할 것 같습니다. 방금 specific version으로 검색해 보았더니 다음과 같은 결과가 나왔습니다:

네, 여기서는 yml 파일에 버전 태그를 사용하고 있지만, 다시 빌드할 때 오류가 발생합니다.

SMTP 설정만 변경해야 한다면

./launcher destroy app 
./launcher start app

네, 재빌드하지 않아도 yml 파일을 읽는다는 거네요. 괜찮네요. 이 방법으로 시급한 문제는 해결되겠지만, 왜 버전이 작동하지 않는지에 대해서는 여전히 궁금합니다.

“에러”가 발생한다고 말씀하셨죠. 그것은 무언가 잘못했다는 뜻입니다. 제 추측으로는 YML 포맷 오류일 가능성이 높지만, 실제 오류 내용을 모르면 정확히 알 수 있는 방법이 없습니다.

죄송합니다. “위쪽으로 스크롤하여 이전 오류 메시지를 찾아보세요. 오류가 여러 개일 수 있습니다.
./discourse-doctor를 사용하면 문제를 진단하는 데 도움이 될 수 있습니다.”

네, 게시글에서 제가 제공한 정보가 충분히 상세하지 않았다는 점 확인했습니다. yml 파일에 version 태그가 없어도 정상적으로 작동하므로 포맷 오류라고 생각하지 않습니다.

추가 테스트를 해본 결과, 제가 겪은 버그는 10번과 11번 버전에서는 발생하지 않지만, 4번부터 9번 버전에서는 발생했습니다.

출력 결과에서 발견할 수 있는 오류는 두 가지뿐이며, 이는 예상된 오류라고 생각합니다:

2020-02-22 10:42:33.410 UTC [62] postgres@postgres ERROR:  database "discourse" already exists

2020-02-22 10:42:33.533 UTC [73] postgres@discourse ERROR:  role "discourse" already exists

10번 버전의 릴리스 노트를 확인해 보았지만, 이와 관련된 수정 사항에 대한 언급은 찾지 못했습니다.

문제가 수정되었다는 점은 좋은 일입니다. 또한 SMTP 설정에 대한 우회 방법 덕분에(월요일에 테스트할 예정입니다. 주말에는 프로덕션 서버를 건드리고 싶지 않아서요) 제가 급하게 처리할 사항은 없지만, 테스트에서 포착되지 않는 알려지지 않은 오류가 존재하고, 해당 오류가 의도적인 변경이 아닌 우연한 수정으로 해결되었다면 다시 발생할 수 있는지 아는 것이 좋을 것 같습니다. 앞으로 version 기능이 얼마나 안정적으로 유지될 수 있을지 알고 싶습니다.

아래는 v2.4.0.beta9를 대상 버전으로 실행했을 때의 출력 결과 덤프입니다.
dump_disco_version_error.txt (127.5 KB)

드디어 시간을 내서 테스트해 봤는데, 작동하지 않았습니다. 앱이 시작될 때 올바른 비밀번호가 출력되는 것을 볼 수 있지만, 이메일은 여전히 액세스 거부 오류로 실패합니다.

음. 분명 예전에는 잘 동작했었는데. 설정 파일에 반영되지 않는 다른 설정들도 몇 가지 봤어요. 이게 버그로 간주되는지는 잘 모르겠네요.

아직 구버전을 사용 중이라 최신 버전에서는 동작할 수도 있고, 동작하지 않을 수도 있습니다. 제가 발견한 내용을 공유하기 위해 업데이트를 남겼습니다.

다시 이 문제를 들여다볼 이유가 생겼는데, 내 생각에는 브랜치에는 버전이 작동하지만 태그에는 작동하지 않는 것 같습니다. 런처가 먼저 모든 태그를 가져오지 않기 때문이라고 추측하지만, 정확히는 알지 못합니다. 런처 스크립트를 편집할 수 있는 방법이 있을까요?

드디어 무엇이 잘못되었는지 파악했습니다. discourse_docker 저장소와 discourse 저장소가 서로 의존하고 있기 때문에, 특정 버전의 discourse는 discourse_docker 저장소의 특정 버전으로만 설치할 수 있습니다. 불행히도 discourse_docker 저장소에는 태그가 없어서, 특정 버전을 설치하기 위해 어떤 sha를 사용해야 하는지 찾는 것이 쉽지 않습니다. 적어도 결론을 내릴 수 있어서 다행입니다. 앞으로 설치를 할 때 이 내용을 메모해 두겠습니다.