升级到v3.0.3期间发生运行时错误

我刚刚响应了一个“一键升级”的电子邮件通知,将我的当前版本 3.0.1 升级到 3.0.3 的新安全和错误修复版本。

最初的 Docker Manager 升级一切顺利(根据升级网页中的升级进度报告),但当我随后点击“全部升级”来升级显示有新版本可用的其余 discourse 组件时,却失败了,导致我的网站离线。

奇怪的是,在随后的升级进度报告窗口中再次提到了 Docker Manager,尽管它已经单独升级过了——这次报告说它“升级失败”和“RuntimeError”。

我是否正确地认为这是由于我的 Digital Ocean droplet 上安装的 Ruby 版本过旧(v3.1,而不是 v3.2)?如果是这样,我希望更新说明中会提到任何此类新依赖项(以前的更新没有这个问题),如果不是由一键安装程序更优雅地处理的话?

以下是该后续升级进度报告窗口的内容:

********************************************************
*** 请耐心等待,下一步可能需要一段时间 ***
********************************************************
正在循环 Unicorn,以释放内存
正在重启 unicorn pid: 575
等待 Unicorn 重新加载。
等待 Unicorn 重新加载..
等待 Unicorn 重新加载...
等待 Unicorn 重新加载....
等待 Unicorn 重新加载.....
等待 Unicorn 重新加载......
等待 Unicorn 重新加载.......
等待 Unicorn 重新加载........
等待 Unicorn 重新加载.........
正在使用 net-protocol 0.2.1
正在获取 addressable 2.8.4
正在安装 addressable 2.8.4
正在使用 aws-sigv4 1.5.0
正在使用 openssl-signature_algorithm 1.3.0
正在使用 sprockets 3.7.2 来自 https://github.com/rails/sprockets (在 3.x@f4d3dae)
正在使用 request_store 1.5.1
正在使用 message_bus 4.3.2
正在使用 pry 0.14.2
正在获取 rack-mini-profiler 3.1.0
正在安装 rack-mini-profiler 3.1.0
正在获取 rack-protection 3.0.6
正在安装 rack-protection 3.0.6
正在使用 ecma-re-validator 0.4.0
正在使用 faraday 2.7.4
正在使用 image_optim 0.31.3
正在使用 logstash-logger 0.26.1
正在使用 mini_racer 0.6.3
正在使用 mini_suffix 0.3.3
正在使用 omniauth 1.9.2
正在使用 uglifier 4.2.0
正在使用 web-push 3.0.0
正在使用 sidekiq 6.5.8
正在使用 redis-namespace 1.10.0
正在使用 net-http 0.3.2
正在使用 oauth-tty 1.0.5
正在使用 snaky_hash 2.0.1
正在使用 activesupport 7.0.4.3
正在获取 sass-embedded 1.62.0 (x86_64-linux-gnu)
正在安装 sass-embedded 1.62.0 (x86_64-linux-gnu)
正在使用 rqrcode 2.1.2
正在使用 rss 0.2.9
正在获取 tzinfo-data 1.2023.3
正在安装 tzinfo-data 1.2023.3
正在使用 unf 0.1.4
正在使用 unicorn 6.1.0
正在获取 loofah 2.20.0
正在安装 loofah 2.20.0
正在使用 ruby-readability 0.7.0
正在使用 sanitize 6.0.1
正在使用 net-imap 0.3.4
正在使用 net-pop 0.1.2
正在使用 net-smtp 0.3.3
正在使用 css_parser 1.14.0
正在使用 aws-sdk-core 3.130.2
正在使用 cose 1.3.0
正在使用 pry-byebug 3.10.1
正在使用 pry-rails 0.3.9
正在使用 json_schemer 0.2.23
正在使用 faraday-retry 2.1.0
正在使用 oauth2 1.4.11
正在使用 rtlcss 0.2.0
正在使用 rails-dom-testing 2.0.3
正在使用 globalid 1.1.0
正在使用 activemodel 7.0.4.3
正在使用 mini_scheduler 0.15.0
正在使用 oauth 1.1.0
正在使用 dartsass-ruby 3.0.1
正在使用 rails-html-sanitizer 1.5.0
正在获取 mail 2.8.1
正在安装 mail 2.8.1
正在使用 aws-sdk-kms 1.56.0
正在使用 aws-sdk-sns 1.53.0
正在使用 actionview 7.0.4.3
正在使用 activejob 7.0.4.3
正在使用 active_model_serializers 0.8.4
正在使用 activerecord 7.0.4.3
正在使用 omniauth-oauth2 1.7.3
正在使用 omniauth-oauth 1.2.0
正在使用 aws-sdk-s3 1.114.0
正在使用 actionpack 7.0.4.3
正在使用 actionview_precompiler 0.2.3
正在使用 discourse-seed-fu 2.3.12
正在使用 omniauth-facebook 9.0.0
正在使用 omniauth-github 1.4.0
正在使用 omniauth-google-oauth2 0.8.2
正在使用 omniauth-twitter 1.4.0
正在使用 actionmailer 7.0.4.3
正在使用 railties 7.0.4.3
正在使用 sprockets-rails 3.4.2
正在使用 dartsass-sprockets 3.0.0
正在使用 lograge 0.12.0
正在获取 rails_failover 1.0.0
正在安装 rails_failover 1.0.0
正在使用 rails_multisite 4.0.1
正在获取 puma 6.2.2
正在安装 puma 6.2.2(使用原生扩展)
正在使用 bootsnap 1.16.0
正在使用 rbtrace 0.4.14
Bundle 完成!已安装 136 个 Gemfile 依赖项,174 个 gem。
'test' 和 'development' 组中的 Gems 未安装。
Bundled gems 已安装到 `./vendor/bundle`
$ yarn install --production
yarn install v1.22.19
[1/5] 正在验证 package.json...
[2/5] 正在解析包...
[3/5] 正在获取包...
[4/5] 正在链接依赖项...
警告“ > @mixer/parallel-prettier@2.0.3”有未满足的对等依赖项“prettier@^2.0.0”。
警告“eslint-config-discourse > eslint-plugin-lodash@7.1.0”有未满足的对等依赖项“lodash@>=4”。
[5/5] 正在构建新包...
$ 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] 正在解析包...
[2/4] 正在获取包...
[3/4] 正在链接依赖项...
警告“ > babel-plugin-debug-macros@0.4.0-pre1”有未满足的对等依赖项“@babel/core@^7.0.0”。
警告“workspace-aggregator-61483bea-5d74-44aa-a245-abffc0a6319e > discourse > @uppy/aws-s3@3.0.6”有不正确的对等依赖项“@uppy/core@^3.1.2”。
警告“workspace-aggregator-61483bea-5d74-44aa-a245-abffc0a6319e > discourse > @uppy/aws-s3-multipart@3.1.3”有不正确的对等依赖项“@uppy/core@^3.1.2”。
警告“workspace-aggregator-61483bea-5d74-44aa-a245-abffc0a6319e > discourse > @uppy/xhr-upload@3.1.1”有不正确的对等依赖项“@uppy/core@^3.1.2”。
[4/4] 正在构建新包...
成功 保存 lockfile。
$ patch-package
patch-package 6.5.1
正在应用补丁...
@ember/jquery@2.0.0 ✔
virtual-dom@2.1.1 ✔
完成于 23.96s。
完成于 40.79s。
$ LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all
Discourse 需要 Ruby 3.2 或更高版本
无法检出兼容的插件版本
$ SKIP_POST_DEPLOYMENT_MIGRATIONS=1 bundle exec rake multisite:migrate
Discourse 需要 Ruby 3.2 或更高版本
Docker Manager: 升级失败
#<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>'
正在启动 1 个最初停止的 Unicorn 工作进程

我将通过 Putty 按照步骤重建我的网站,但会报告以上内容,以防安装程序存在错误。

3 个赞

我遇到了类似的情况。论坛目前停滞不前。。。

明天我清醒时会了解更多。我猜这是“附议”。

-Walker

1 个赞

您需要拉取新版本的 Docker 镜像。

顺便说一句 - 该错误仅在 3.1.0.beta4 及更高版本中出现,3.0.3 稳定版中没有

2 个赞

看起来 docker manager 需要知道它不能进行升级,对吧?在升级后,它应该需要一个命令行重建。我记得很久以前在提交中看到过版本号的增加,但我想我错了。

所以你需要

./launcher rebuild app

4 个赞

谢谢 - 是的,当我通过 Putty 重新构建时,问题就解决了。

1 个赞

是的,这发生得很晚。Update minimum image version for Ruby 3.2 (#176) · discourse/docker_manager@7e7b6b5 · GitHub

当不满足该要求时,Docker Manager 应该会提示进行命令行重建。:thinking:

4 个赞

那么,可能存在某个错误或回归?但我猜你们正在检查这个问题。如果 Docker Manager 不知道自己无法成功,那似乎是一个错误。

3 个赞

你能确认一下这些版本吗?正如 @RGJ 在下面的帖子中所说,稳定版本不需要 Ruby 3.2,所以在升级稳定分支时你不应该看到那些错误。

你是否尝试过从 v3.1.0.beta1(或更早的版本)升级到 v3.1.0.beta4?

问题在于,我们为 Discourse v3.1.0.beta1 及更早版本固定了 docker_manager 的旧版本。你会看到类似这样的情况。

升级到 v3.1.0.beta4 需要 Ruby 3.2,但你可能运行的是一个尚未包含 Ruby 3.2 的 Docker 镜像。旧的 docker_manager 认为这没问题,所以它允许你在 UI 中升级,而实际上它应该提示进行 CLI 重建。

我正在尝试重现这个问题。我认为修复方法是更改固定版本,使其提示进行 CLI 重建。我会尝试想出一个解决方案……

2 个赞

我昨天在两个已通过测试的站点上看到了这个。我不确定他们是从哪个版本升级的。抱歉没有提供更多数据。

1 个赞

现在升级已经完成,我不确定了——但我认为我当时是从 3.0.1 beta 升级的,编辑——而不是 3.10 beta。

1 个赞

等等。你不能从 3.1 beta 升级到 3.0.3 stable?

好的,版本又变了,但我很确定我当时是从 3.0.1(可能是 beta 版)升级到 3.0.3 stable,当时这似乎是最新可用的 stable 版本。我看到在那次升级失败并在 Putty 中重建后,结果跳过了预期的 3.0.3 版本,实际安装了一个 3.1.0 beta 4。

是的,那失败了,因为你不能从 3.1 beta 版本升级到 3.0 稳定版本。

我不是从 3.1 beta 开始的。我从 3.0.1 beta 开始。

没有 3.01,要么是 3.0.1,要么是 3.1.0。
但这并不重要。你的情况发生是因为你将要升级到 3.1.0 beta4。

1 个赞

我的观点是——我从 3.0.1 测试版开始,收到的“一键升级”邮件通知是升级到 3.0.3 稳定版——但升级失败了。在那时,我还没有看到升级到 3.1.0 测试版的选项。

也许问题的一部分是,更新程序试图安装 3.1.0 测试版,而不是安装“宣传”的 3.0.3 稳定版?

无论如何,据我所知,我现在安装了 3.1.0 测试版的唯一原因是通过 Putty 重新构建,它拉取了最新的测试版,而不是最新的稳定版。

根本原因将在 FIX: Update compatibility file for v3.1.0.beta1 and below by gschlager · Pull Request #178 · discourse/docker_manager · GitHub 合并后立即修复。

4 个赞