好的,这是我们如何修复它的方法(这不适合胆小的人)
- 将 Ubuntu 升级到支持 Docker 20+ 的版本
我们在 Ubuntu 16,我必须至少升级到 Ubuntu 20,所以我们升级了两次
RELEASE_UPGRADER_ALLOW_THIRD_PARTY=1 do-release-upgrade
- 到达 Ubuntu 20 后,我们必须更新 Docker,Ubuntu 拒绝自行更新。
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 将仓库添加到 Apt 源:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
- 这将我们带到了 Docker 28
- 然后运行
./launcher rebuild app
- 这会将您的 PostgreSQL 从 13 升级到 15,请参阅:
PostgreSQL 15 update - 数据库成功升级后,运行
./launcher rebuild app
- 这会产生一个关于缺少列的错误
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse ERROR: column "require_message" does not exist at character 72
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse STATEMENT: SELECT id, name, name_key, description, notify_type, auto_action_type, require_message, applies_to, position, enabled, score_type FROM "flags" ORDER BY "flags"."position" ASC
** PLUGIN FAILURE **
由于在插件初始化期间出现此错误,您无法启动 Discourse:
PG::UndefinedColumn: ERROR: column "require_message" does not exist
LINE 1: ..._key, description, notify_type, auto_action_type, require_me...
^
- 此时无法启动容器,所以我去了 app.yml 并禁用了所有插件,然后再次运行重建
- 应用程序最终重建成功,然后我能够进入 rails 控制台手动添加上述列。
./launcher enter app
rails db
ActiveRecord::Base.connection.execute("ALTER TABLE flags ADD COLUMN require_message BOOLEAN DEFAULT FALSE;")
exit
exit
- 列存在后,我回到 app.yml 并启用了所有插件,然后再次进行重建
- 重建成功……我们上线了!
感谢 @pfaffman 在周末的及时回复。我们将创建一个新的更新的 Droplet 并迁移过去。这本应是通过 Web 界面进行快速的就地升级。但我想脚本没有测试 Docker 的兼容性。当它升级 Discourse Docker 时,它抛出了不兼容的 Docker 错误。
这完全是我们的错,因为我们还在使用非常旧的 Ubuntu 16 版本,稳定系统的优点和缺点之一是它倾向于长期存在。