从 2.9.0.beta14 升级到 3.1.0.beta 失败

我每个月都会进行升级,总是先在几个开发系统上进行,然后再在生产环境中进行。

在本月的升级过程中,升级在第一个开发系统上失败了。docker_manager 升级正常,但 discourse 升级失败,出现以下错误:

抱歉,升级 Discourse 时出错。请检查下面的日志。

Discourse 应用已完全无法访问(它显示“糟糕”的 500 错误页面)。

屏幕上的日志包含以下内容:

********************************************************
*** 请耐心等待,下一步可能需要一些时间 ***
********************************************************
正在循环 Unicorn,以释放内存
正在重启 unicorn pid: 50
等待 Unicorn 重新加载。
等待 Unicorn 重新加载..
等待 Unicorn 重新加载...
等待 Unicorn 重新加载....
等待 Unicorn 重新加载.....
等待 Unicorn 重新加载......
等待 Unicorn 重新加载.......
等待 Unicorn 重新加载........
等待 Unicorn 重新加载.........
等待 Unicorn 重新加载..........
等待 Unicorn 重新加载...........
正在停止 7 个 Unicorn 工作进程,以释放内存
正在停止作业队列以回收内存,主进程 pid 为 4069
$ cd /var/www/discourse && git fetch --tags --force && git reset --hard HEAD@{upstream}
来自 https://github.com/discourse/discourse
 t [tag update]            latest-release -> latest-release
 * [new tag]               v2.8.14        -> v2.8.14
 * [new tag]               v3.0.0         -> v3.0.0
HEAD is now at 666536cbd1 DEV: Prefer \A and \z over ^ and $ in regexes (#19936)
$ bundle install --deployment --jobs 4 --without test development
[已弃用] `--deployment` 标志已被弃用,因为它依赖于在 bundler 调用之间记住状态,而 bundler 在未来版本中将不再这样做。请改用 `bundle config set --local deployment 'true'`,并停止使用此标志。
[已弃用] `--without` 标志已被弃用,因为它依赖于在 bundler 调用之间记住状态,而 bundler 在未来版本中将不再这样做。请改用 `bundle config set --local without 'test development'`,并停止使用此标志。
Bundler 2.3.13 正在运行,但您的 lockfile 是使用 2.4.1 生成的。正在安装 Bundler 2.4.1 并使用该版本重新启动。
正在从 https://rubygems.org/ 获取 gem 元数据。
正在获取 bundler 2.4.1
正在安装 bundler 2.4.1
[已弃用] `--deployment` 标志已被弃用,因为它依赖于在 bundler 调用之间记住状态,而 bundler 在未来版本中将不再这样做。请改用 `bundle config set --local deployment 'true'`,并停止使用此标志。
[已弃用] `--without` 标志已被弃用,因为它依赖于在 bundler 调用之间记住状态,而 bundler 在未来版本中将不再这样做。请改用 `bundle config set --local without 'test development'`,并停止使用此标志。
正在从 https://rubygems.org/ 获取 gem 元数据.........
正在获取 https://github.com/rails/sprockets
web-push-3.0.0 需要 ruby 版本 >= 3.0,这与当前版本 2.7.6 不兼容
Docker Manager: 升级失败
#<RuntimeError: RuntimeError>
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:209:in `run'
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:93:in `upgrade'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:19:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/fork_tracker.rb:20:in `block in fork'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/fork_tracker.rb:18:in `fork'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/fork_tracker.rb:18:in `fork'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `<main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/commands/runner/runner_command.rb:43:in `load'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/commands/runner/runner_command.rb:43:in `perform'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/command/base.rb:87:in `perform'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/command.rb:48:in `invoke'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/commands.rb:18:in `<main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.15.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.15.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
bin/rails:18:in `<main>'
正在启动最初停止的 7 个 Unicorn 工作进程

我以前从未遇到过升级错误,所以我不知道接下来该怎么做。如果这发生在生产环境中,我该怎么办?

2 个赞

我建议你检查一下你运行的是什么版本的操作系统(发行版):有可能是版本太旧,没有 ruby 3,这就是问题所在。

编辑:等等,我不确定我是否会混淆。对于生产环境,所有操作都在 Docker 容器内进行,该容器应具有所有正确的版本。你是否有其他类型的设置?

2 个赞

供参考,开发人员框是 Ubuntu 20.04 LTS。我认为生产环境是 22.04 LTS。

但是,我从未在操作系统上安装过 Ruby。我认为所有这些都在 Docker 容器中自动完成。

更正:生产环境也在 20.04 LTS 上。

1 个赞

是的,抱歉,我想我弄混了。进行命令行升级是很常见的——你试过吗?

cd /var/discourse
git pull
./launcher rebuild app
6 个赞

如果那些是开发安装,它们将不能代表生产环境的 docker 安装。您的开发环境有一个旧版本的 ruby (2.7),而 Discourse 最近在镜像中已升级到 3.1。

谢谢!重新构建应用程序似乎奏效了。我在另一个开发系统上尝试此操作,然后再修补生产环境。

为了说清楚,我说的“开发”仅仅是指它们就像生产环境一样,只不过是在内部开发系统上。

1 个赞

通过 bash 升级是否解决了问题?

1 个赞

是的!它在开发系统和生产系统上都奏效了。谢谢!

3 个赞

我的生产环境也出现了这种情况。

从 2.9.0.beta14 (2b9fa41a6e) 到 3.1.0.beta1

Fetching gem metadata from https://rubygems.org/.........
Fetching https://github.com/rails/sprockets
web-push-3.0.0 requires ruby version >= 3.0, which is incompatible with the
current version, 2.7.6
Docker Manager: FAILED TO UPGRADE
#<RuntimeError: RuntimeError>
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:209:in `run'
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:93:in `upgrade'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:19:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/fork_tracker.rb:20:in `block in fork'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/fork_tracker.rb:18:in `fork'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/fork_tracker.rb:18:in `fork'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `<main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/commands/runner/runner_command.rb:43:in `load'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/commands/runner/runner_command.rb:43:in `perform'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/command/base.rb:87:in `perform'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/command.rb:48:in `invoke'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/commands.rb:18:in `<main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.15.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.15.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

通过 :point_up: 解决

cd /var/discourse
git pull
./launcher rebuild app

谢谢

这里也有同样的问题,升级失败并导致论坛出现 500 错误。老实说,我相当惊讶这个问题已经持续了 3 天。

无论如何,我现在正在运行 CLI 重建,希望它能成功。如果不行,我先拍了 VM 快照,因为我妈妈没生出傻瓜。

这篇文章 来看,他们将 ruby 升级到了 3.0,这完全破坏了 Web 升级。不幸的是,软件仍然允许用户尝试,然后你就会看到你的主机能多快地提供 HTTP 500 错误。

编辑:CLI 重建确实成功了,谢天谢地!

相关错误:

Fetching gem metadata from https://rubygems.org/.........
Fetching https://github.com/rails/sprockets
web-push-3.0.0 需要 ruby 版本 >= 3.0,这与当前版本 2.7.6 不兼容
Docker Manager: 升级失败
#<RuntimeError: RuntimeError>
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:209:in `run'
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:93:in `upgrade'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:19:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/fork_tracker.rb:20:in `block in fork'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/fork_tracker.rb:18:in `fork'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/fork_tracker.rb:18:in `fork'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `<main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/commands/runner/runner_command.rb:43:in `load'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/commands/runner/runner_command.rb:43:in `perform'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/command/base.rb:87:in `perform'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/command.rb:48:in `invoke'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/commands.rb:18:in `<main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.15.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.15.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
bin/rails:18:in `<main>'
2 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.