无法更新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 进行升级?

非常感谢任何建议!

只是说明一下,这不是错误,实际的错误会出现在上面。

2 个赞

我建议从一个新映像开始,然后执行标准安装。

1 个赞

谢谢 Jay,我担心这可能是唯一可行的方法

我猜我只需要找到一种方法,并希望我能复制数据库,这样就不会丢失所有东西了。

尝试使用 apt upgrade 更新所有软件包

这并不难。你可以做一个备份,或者使用 rsync 将 Discourse 站点迁移到另一台 VPS。你没有什么可失去的,因为你现有的站点会保持不变。这是最安全的前进方式。

1 个赞

我已经更新了我能更新的一切,包括服务器的 Ubuntu 版本,并确认我正在运行 ruby v3.1。

问题是我怀疑是容器所需的 ruby 版本,而这由 docker 控制,我似乎无法更新它。

我已经成功安装了一个干净的版本并使其运行起来 3.3.0.beta3-dev

但是,当我恢复旧站点的备份时,它看起来没有正确恢复,现在登录页面无法正常工作。查看 JS 控制台,每当我单击登录/注册按钮时,都会出现 Discourse is not defined 错误。我估计由于版本差异很大,因此无法将 2.6.0 的备份简单恢复到干净的 3.3.0 安装版本

将所有内容迁移到新服务器对我来说行不通,因为我无法在不每次都因这个 ruby 错误阻止我的情况下运行 ./launcher rebuild app

如果您要进行如此大的版本升级,很有可能您的主题已损坏。请尝试安全模式。

3 个赞

严格来说,3.3.0 还没有正式发布,我们仍在进行 Beta 测试。

1 个赞

感谢提供的信息,但不幸的是,当我尝试访问 /safe-mode 时,它只会重定向回 /login URL。\n\n我想我会尝试重新安装并重新开始。

我确实使用了官方的 discourse 镜像,但我猜那只会安装最新版本,不管是不是 beta 版。或者有什么方法可以指定一个稳定版或特定版本吗?

可以。在构建 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

2 个赞