v3.0.3 업그레이드 중 런타임 오류 발생

현재 버전 3.0.1에서 3.0.3으로의 새로운 보안 및 버그 수정 릴리스에 대한 ‘원클릭 업그레이드’ 이메일 알림에 방금 응답했습니다.

초기 Docker Manager 업그레이드는 문제없이 진행되었습니다(업그레이드 웹 페이지의 업그레이드 진행 상황 보고서에 따르면). 그러나 이후 '모두 업그레이드’를 클릭하여 새 버전이 사용 가능한 것으로 표시된 나머지 Discourse 구성 요소를 업그레이드하려고 했을 때 실패하여 사이트가 오프라인 상태가 되었습니다.

이상하게도, 이미 별도로 업그레이드된 직후임에도 불구하고 후속 업그레이드 진행 상황 보고서 창에서 다시 Docker Manager가 언급되고 있으며, 이번에는 '업그레이드 실패’와 'RuntimeError’가 보고되었습니다.

Digital Ocean 드롭렛에 설치된 Ruby 버전이 구버전(v3.1, v3.2가 아님)이었기 때문에 발생한 것이라고 해석하는 것이 맞나요? 만약 그렇다면, 이전 업데이트에서는 문제가 없었으므로 업데이트 노트에 이러한 새로운 종속성이 언급되었기를 바랐습니다. 그렇지 않다면 원클릭 설치 프로그램이 이를 더 우아하게 처리했어야 하지 않나요?

아래는 해당 후속 업그레이드 진행 상황 보고서 창에 포함된 내용입니다.

********************************************************
*** Please be patient, next steps might take a while ***
********************************************************
Cycling Unicorn, to free up memory
Restarting unicorn pid: 575
Waiting for Unicorn to reload.
Waiting for Unicorn to reload..
Waiting for Unicorn to reload...
Waiting for Unicorn to reload....
Waiting for Unicorn to reload.....
Waiting for Unicorn to reload......
Waiting for Unicorn to reload.......
Waiting for Unicorn to reload........
Waiting for Unicorn to reload.........
Using net-protocol 0.2.1
Fetching addressable 2.8.4
Installing addressable 2.8.4
Using aws-sigv4 1.5.0
Using openssl-signature_algorithm 1.3.0
Using sprockets 3.7.2 from https://github.com/rails/sprockets (at 3.x@f4d3dae)
Using request_store 1.5.1
Using message_bus 4.3.2
Using pry 0.14.2
Fetching rack-mini-profiler 3.1.0
Installing rack-mini-profiler 3.1.0
Fetching rack-protection 3.0.6
Installing rack-protection 3.0.6
Using ecma-re-validator 0.4.0
Using faraday 2.7.4
Using image_optim 0.31.3
Using logstash-logger 0.26.1
Using mini_racer 0.6.3
Using mini_suffix 0.3.3
Using omniauth 1.9.2
Using uglifier 4.2.0
Using web-push 3.0.0
Using sidekiq 6.5.8
Using redis-namespace 1.10.0
Using net-http 0.3.2
Using oauth-tty 1.0.5
Using snaky_hash 2.0.1
Using activesupport 7.0.4.3
Fetching sass-embedded 1.62.0 (x86_64-linux-gnu)
Installing sass-embedded 1.62.0 (x86_64-linux-gnu)
Using rqrcode 2.1.2
Using rss 0.2.9
Fetching tzinfo-data 1.2023.3
Installing tzinfo-data 1.2023.3
Using unf 0.1.4
Using unicorn 6.1.0
Fetching loofah 2.20.0
Installing loofah 2.20.0
Using ruby-readability 0.7.0
Using sanitize 6.0.1
Using net-imap 0.3.4
Using net-pop 0.1.2
Using net-smtp 0.3.3
Using css_parser 1.14.0
Using aws-sdk-core 3.130.2
Using cose 1.3.0
Using pry-byebug 3.10.1
Using pry-rails 0.3.9
Using json_schemer 0.2.23
Using faraday-retry 2.1.0
Using oauth2 1.4.11
Using rtlcss 0.2.0
Using rails-dom-testing 2.0.3
Using globalid 1.1.0
Using activemodel 7.0.4.3
Using mini_scheduler 0.15.0
Using oauth 1.1.0
Using dartsass-ruby 3.0.1
Using rails-html-sanitizer 1.5.0
Fetching mail 2.8.1
Installing mail 2.8.1
Using aws-sdk-kms 1.56.0
Using aws-sdk-sns 1.53.0
Using actionview 7.0.4.3
Using activejob 7.0.4.3
Using active_model_serializers 0.8.4
Using activerecord 7.0.4.3
Using omniauth-oauth2 1.7.3
Using omniauth-oauth 1.2.0
Using aws-sdk-s3 1.114.0
Using actionpack 7.0.4.3
Using actionview_precompiler 0.2.3
Using discourse-seed-fu 2.3.12
Using omniauth-facebook 9.0.0
Using omniauth-github 1.4.0
Using omniauth-google-oauth2 0.8.2
Using omniauth-twitter 1.4.0
Using actionmailer 7.0.4.3
Using railties 7.0.4.3
Using sprockets-rails 3.4.2
Using dartsass-sprockets 3.0.0
Using lograge 0.12.0
Fetching rails_failover 1.0.0
Installing rails_failover 1.0.0
Using rails_multisite 4.0.1
Fetching puma 6.2.2
Installing puma 6.2.2 with native extensions
Using bootsnap 1.16.0
Using rbtrace 0.4.14
Bundle complete! 136 Gemfile dependencies, 174 gems now installed.
Gems in the groups 'test' and 'development' were not installed.
Bundled gems are installed into `./vendor/bundle`
$ yarn install --production
yarn install v1.22.19
[1/5] Validating package.json...
[2/5] Resolving packages...
[3/5] Fetching packages...
[4/5] Linking dependencies...
warning " > @mixer/parallel-prettier@2.0.3" has unmet peer dependency "prettier@^2.0.0".
warning "eslint-config-discourse > eslint-plugin-lodash@7.1.0" has unmet peer dependency "lodash@>=4".
[5/5] Building fresh packages...
$ yarn --cwd app/assets/javascripts $(node -e 'if(JSON.parse(process.env.npm_config_argv).original.includes(`--frozen-lockfile`)){console.log(`--frozen-lockfile`)}')
yarn install v1.22.19
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
warning " > babel-plugin-debug-macros@0.4.0-pre1" has unmet peer dependency "@babel/core@^7.0.0".
warning "workspace-aggregator-61483bea-5d74-44aa-a245-abffc0a6319e > discourse > @uppy/aws-s3@3.0.6" has incorrect peer dependency "@uppy/core@^3.1.2".
warning "workspace-aggregator-61483bea-5d74-44aa-a245-abffc0a6319e > discourse > @uppy/aws-s3-multipart@3.1.3" has incorrect peer dependency "@uppy/core@^3.1.2".
warning "workspace-aggregator-61483bea-5d74-44aa-a245-abffc0a6319e > discourse > @uppy/xhr-upload@3.1.1" has incorrect peer dependency "@uppy/core@^3.1.2".
[4/4] Building fresh packages...
success Saved lockfile.
$ patch-package
patch-package 6.5.1
Applying patches...
@ember/jquery@2.0.0 ✔
virtual-dom@2.1.1 ✔
Done in 23.96s.
Done in 40.79s.
$ LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all
Discourse requires Ruby 3.2 or above
Unable checkout compatible plugin versions
$ SKIP_POST_DEPLOYMENT_MIGRATIONS=1 bundle exec rake multisite:migrate
Discourse requires Ruby 3.2 or above
Docker Manager: FAILED TO UPGRADE
#<RuntimeError: RuntimeError>
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:202:in `run'
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:101:in `upgrade'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:19:in `block in <main>'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `fork'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `<main>'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/commands/runner/runner_command.rb:43:in `load'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/commands/runner/runner_command.rb:43:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/command/base.rb:87:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/command.rb:48:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/commands.rb:18:in `<main>'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bootsnap-1.16.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bootsnap-1.16.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
bin/rails:18:in `<main>'
Spinning up 1 Unicorn worker(s) that were stopped initially

Putty를 사용하여 사이트를 재구성하는 단계를 진행할 예정이지만, 설치 프로그램에 버그가 있을 수 있으므로 위 내용을 보고합니다.

저도 비슷한 현상을 겪고 있습니다. 현재 포럼에서는 아무 반응도 없네요 . . .

내일 졸리지 않을 때 더 자세히 알게 되겠죠. 아마 이건 "동의합니다"라는 뜻이겠네요.

-Walker

새로운 버전의 Docker 이미지를 가져와야 합니다.

참고로, 해당 에러는 3.1.0.beta4 이상에서만 발생하며, 3.0.3 stable에서는 발생하지 않습니다.

Docker 매니저가 업그레이드를 할 수 없다는 사실을 알아야 하는 것 같네요, 맞죠? 업그레이드 후에는 커맨드라인으로 재빌드를 요구해야 합니다. 얼마 전에 커밋에서 버전 업데이트를 본 것 같은데, 제가 잘못 본 것 같네요.

그래서 다음을 실행해야 합니다.

./launcher rebuild app

감사합니다 - 네, PuTTY를 통해 재빌드했을 때 문제가 해결되었습니다.

네, 꽤 최근에 발생한 일입니다. Update minimum image version for Ruby 3.2 (#176) · discourse/docker_manager@7e7b6b5 · GitHub

해당 요구사항이 충족되지 않으면 Docker Manager가 커맨드 라인 재빌드를 요청해야 합니다. :thinking:

그러면 어떤 버그나 회귀 문제가 있는 건가요? 하지만 여러분이 그 부분을 확인하고 있을 거라고 생각합니다. Docker Manager가 성공할 수 없다는 사실을 인지하지 못한다면 버그로 보입니다.

해당 버전들을 확인해 주시겠어요? 아래 게시물에서 @RGJ님이 말씀하셨듯이, 안정 버전은 Ruby 3.2가 필요하지 않으므로 안정 분기에서 업그레이드할 때 그런 오류가 표시되지 않아야 합니다.

혹시 v3.1.0.beta1(또는 그보다 오래된 버전)에서 v3.1.0.beta4로 업그레이드를 시도해 보신 건가요?

문제는 Discourse v3.1.0.beta1 및 이전 버전에서 docker_manager를 오래된 버전으로 고정(pinning)하고 있다는 점입니다. 다음과 같은 내용을 보실 수 있을 것입니다.

v3.1.0.beta4로 업그레이드하려면 Ruby 3.2가 필요하지만, 아직 Ruby 3.2가 포함되어 있지 않은 Docker 이미지를 실행 중일 가능성이 있습니다. 오래된 docker_manager는 이것이 괜찮다고 판단하여 UI에서 업그레이드를 허용하지만, 실제로는 CLI 재빌드를 요청해야 하는 상황입니다.

현재 문제를 재현하는 과정에 있습니다. 수정 방법은 고정된 버전을 변경하여 CLI 재빌드를 요청하도록 하는 것일 것으로 생각합니다. 수정 방법을 찾아보겠습니다…

어제 테스트를 통과한 두 사이트에서 이 문제를 확인했습니다. 어떤 버전에서 업그레이드했는지는 정확히 모르겠습니다. 더 구체적인 데이터를 제공하지 못해 죄송합니다.

업그레이드가 완료되었는지 지금은 확신할 수 없습니다. 하지만 3.0.1 베타 버전에서 업그레이드를 진행했을 가능성이 높습니다. ** 수정 ** - 3.10 베타가 아닙니다.

잠깐. 3.1 베타에서 3.0.3 안정판으로 업그레이드할 수 없나요?

네, 버전이 또 바뀌었지만, 저는 3.0.1(아마도 베타 버전일 수 있음)에서 3.0.3 스테이블로 업그레이드를 시도했던 것 같습니다. 당시에는 3.0.3이 가장 최신 스테이블 옵션으로 보였거든요. 그 시도가 실패한 후 PuTTY로 재빌드했을 때, 결과적으로 의도했던 3.0.3 버전을 건너뛰고 실제로는 3.1.0 베타 4가 설치되어 있는 것을 확인했습니다.

네, 실패했습니다. 3.1 베타 버전에서 3.0 안정화 버전으로 전환할 수 없기 때문입니다.

3.1 베타 버전에서 시작한 것이 아닙니다. 3.0.1 베타 버전에서 시작했습니다.

3.01은 존재하지 않으며, 3.0.1 또는 3.1.0 중 하나입니다.
하지만 크게 중요하지 않습니다. 3.1.0 beta4로 업그레이드하려고 하셨기 때문에 이런 상황이 발생했습니다.

제가 말하려는 핵심은 이겁니다. 저는 3.0.1 베타 버전에서 시작했고, 이메일로 받은 원클릭 업그레이드 알림은 3.0.3 안정판으로의 업그레이드였는데, 이 업그레이드가 실패했습니다. 그 시점에는 3.1.0 베타 버전으로 전환할 수 있는 옵션이 제공되지 않았습니다.

문제의 일부는 ‘광고된’ 3.0.3 안정판이 아니라, 업데이트 도구가 3.1.0 베타 버전을 설치하려고 시도한 것 때문일 수 있습니다.

어쨌든, 제가 알고 있는 바로는 현재 3.1.0 베타 버전이 설치되어 있는 이유는 PuTTY를 통해 재구성을 수행했기 때문인데, 이 과정에서 최신 안정판이 아닌 최신 베타 버전이 가져와졌기 때문입니다.

FIX: Update compatibility file for v3.1.0.beta1 and below - Pull Request #178%EC%9D%B4 - discourse/docker_manager - GitHub 병합되는 대로 근본 원인이 수정될 것입니다.