Ruby 업데이트가 안 되어 ./launcher rebuild app이 계속 실패합니다

안녕하세요,

최근 Docker Discourse가 설치된 서버 이미지를 마이그레이션했습니다.

모든 것을 실행하는 데는 문제가 없는데, SSL 인증서를 다시 발급해야 합니다.

기존 서버에 SSL이 구성되어 있었기 때문에 이 가이드의 제안을 따르며
./launcher rebuild app을 실행하고 있습니다.

그러면 Docker가 여러 항목을 가져오고 업데이트합니다. 현재 이미지는 Discourse 2.6.0.beta3 - https://github.com/discourse/discourse version 29f7e0689f61c5d85960a88f741ac3abced12d3e입니다.

처음 실행했을 때 Postgres 업그레이드 메시지가 표시되어 지시대로 ./launcher rebuild app을 다시 실행했습니다.

이제 매번 실패하는데, 설치된 Ruby 버전이 부족하다는 오류 때문이라고 생각합니다.

ERROR:  Error installing bundler:
	bundler-2.5.3 requires Ruby version >= 3.0.0. The current ruby version is 2.7.2.137.

전체 출력은 다음과 같습니다.

FAILED

--------------------

Pups::ExecError: cd /var/www/discourse && gem install bundler --conservative -v $(awk '/BUNDLED WITH/ { getline; gsub(/ /,""); print $0 }' Gemfile.lock) failed with return #<Process::Status: pid 304 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 install bundler --conservative -v $(awk '/BUNDLED WITH/ { getline; gsub(/ /,\"\"); print $0 }' Gemfile.lock)", "find $home ! -user discourse -exec chown discourse {} \\+"]}

2ad07f29ace1b5396d9944fc4fc5a1ec712727280e8bb3df760367d08bfe6a25

** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.

Docker가 필요에 따라 Ruby 버전을 업데이트할 거라고 생각했는데, 그렇지 않나요?

컨테이너에 수동으로 로그인하여 RVM을 설치하고 Ruby v3+를 활성화해 보았지만 여전히 같은 오류가 발생합니다.

이 시점에서 다소 막막한데, 설치된 버전이 너무 오래되어 ./launcher로 업그레이드할 수 없는 건지 궁금합니다.

어떤 조언이라도 감사하겠습니다!

참고로, 이것이 에러의 전부는 아닙니다. 실제 에러 메시지는 더 위에 있습니다.

새 이미지를 기준으로 표준 설치를 수행하는 것을 권장합니다.

제이, 그게 유일한 방법일까 봐 걱정했어요

어쨌든 방법을 찾아서 데이터베이스를 복사해서 모든 것이 사라지지 않기를 바랄 수밖에 없을 것 같아요

apt upgrade를 사용하여 모든 패키지를 업데이트해 보세요.

그렇게 어렵지 않습니다. 백업을 만들거나 rsync로 Discourse 사이트를 다른 VPS로 이동하기를 수행하면 됩니다. 기존 사이트는 그대로 유지되므로 잃을 것이 전혀 없습니다. 가장 안전한 진행 방법입니다.

서버의 Ubuntu 버전까지 포함해 업데이트할 수 있는 모든 것을 업데이트했고, ruby v3.1이 실행 중임을 확인했습니다.

문제는 컨테이너에 필요한 ruby 버전이 docker에 의해 제어되는 것 같고, 이 버전을 업데이트하는 방법을 찾지 못한다는 점입니다.

결국 깨끗한 버전을 설치하고 3.3.0.beta3-dev를 구동하는 데는 성공했습니다.

하지만 기존 사이트의 백업을 복원했을 때 올바르게 복원되지 않은 것 같고, 현재 로그인 페이지가 작동하지 않습니다. 로그인/가입 버튼을 클릭할 때마다 JS 콘솔에 Discourse is not defined 오류가 발생합니다. 버전 차이가 크기 때문에 2.6.0 백업을 깨끗한 3.3.0 설치 환경으로 복원하는 것이 간단하지 않다고 추정합니다.

모든 것을 새 서버로 이전하는 작업이 제게는 작동하지 않고 있으며, 이 루비 오류가 매번 작업을 방해하기 때문에 ./launcher rebuild app를 실행할 수 없습니다.

이처럼 큰 버전 업그레이드를 진행하는 경우 테마가 손상되었을 가능성이 높습니다. 안전 모드(Safe mode)를 시도해 보세요.

기술적으로 3.3.0은 아직 없으며, 아직 베타 버전 테스트를 진행 중입니다.

정보 주셔서 감사합니다. 불행히도 /safe-mode에 접근하려고 하면 다시 /login URL로 리다이렉트됩니다.

재설치를 시도하고 처음부터 다시 시작해 보겠습니다.

저는 공식 discourse 이미지를 사용했지만, 베타 버전이든 아니든 상관없이 최신 버전만 설치되는 것 같습니다. 안정 버전이나 특정 버전을 지정할 수 있는 방법이 있을까요?

네, 가능합니다. 다운그레이드는 불가능하기 때문에, Discourse를 빌드하기 전에 새로 설치할 때 app.yml 파일을 편집해야 합니다. GitHub에서 태그를 선택하세요. 저는 과거에 최신 버전으로 업그레이드하기 전에 구버전으로 복원해야 했던 적이 있어서 이 작업을 수행한 적이 있습니다.

이제 업그레이드하기 전에 문제가 발생할 것에 대비하여 정상 작동 중인 버전의 이미지를 백업해 둡니다.

감사합니다, 도움 주셔서 감사합니다!

좋은 소식은 app.yml 파일을 수정하여 discourse_docker와 discourse의 이전 버전을 설치하는 방법을 알아냈다는 것입니다.

나쁜 소식은 설치 막바지에 또 다른 오류에 직면했다는 것입니다.

--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake themes:update assets:precompile' failed with return #<Process::Status: pid 14351 exit 1>
Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"assets_precompile", "cmd"=>["su discourse -c 'bundle exec rake themes:update assets:precompile'"]} 

이 부분은 좀 더 자세히 살펴봐야 할 것 같습니다. 컨테이너 내부의 Ruby/Rails와 관련된 문제인 것 같습니다.

https://forum.example.com/login?safe_mode=no_themes%2Cno_plugins를 시도해 보세요.