升级旧版 Discourse 时遇到 Ruby 错误

我正在尝试更新一个非常旧的安装。

我开始时是这样做的:

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

然后我收到一个失败的错误,向上滚动日志文件,唯一的错误是这个:

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

我该如何获取新的 Ruby 安装?系统最初是从 Digital Ocean 的 Docker 镜像安装的,并且多年来几乎没有或根本没有升级过。

它运行在 Ubuntu 18.04 上。

我运行了 ./discourse-doctor

然后出现了一个分离头状态,然后重建,然后是相同的 Ruby 错误。

我现在完全迷失了。

关于如何从旧版本升级的任何帮助?

您的容器镜像可能固定在一个非常旧的 Discourse 基础镜像上。

您能否在此处发布(已编辑)的容器配置?

我不知道该怎么做,但从 discourse doctor 的输出中,我发现了这个:
DOCKER VERSION:Docker version 19.03.1, build 74b1e89

而且它是 3 年前创建的。

1 个赞

考虑到主机的使用年限,这里最好的办法可能是备份网站,创建一个新服务器,进行安装,然后将备份恢复到新服务器上。

这比升级现有服务器的工作量要小(而且容易得多)。

2 个赞

但是由于安装失败,我无法运行 Discourse 来进行备份。我可以并且已经拍摄了 DigitalOcean 滴管的快照,但据我所理解,那并不是真正的备份。

应该能够直接运行 ./launcher start app 来重启到旧站点。

1 个赞

尝试了那个,现在出现 502 坏网关问题 :sigh:

1 个赞

我将把旧的 /var/discourse rsync 到新服务器。或者只 containersshared

好吧,我在这方面完全超出了我的能力范围,所以我的解决方案是去市场发布一个付费的“诚聘”广告 :grinning:

2 个赞

如果您有一个包含所有数据的 droplet 快照,是在尝试更新容器之前拍摄的,那么您应该可以从中获取备份。

如果不是,您几乎肯定还是没问题的,但您需要一个熟悉该过程的人来从容器中提取数据,如果您无法让容器重新启动并运行的话。

现在,即使出现“网关错误”,如果您能进入容器,您应该可以运行 discourse backup 来获取您的数据。

4 个赞