Ubuntu 16
点击网页升级,就像我们多次操作的那样。现在失败了,应用程序无法重新构建不支持的 Docker 版本。
有什么想法吗?我可以尝试升级操作系统等等,但今天我没有太多时间。
有办法回退吗?
我尝试将版本设置为旧的哈希值,但在尝试重新构建时立即出现不支持的 Docker 版本
Ubuntu 16
点击网页升级,就像我们多次操作的那样。现在失败了,应用程序无法重新构建不支持的 Docker 版本。
有什么想法吗?我可以尝试升级操作系统等等,但今天我没有太多时间。
有办法回退吗?
我尝试将版本设置为旧的哈希值,但在尝试重新构建时立即出现不支持的 Docker 版本
你不能升级。
我会迁移到一个新的虚拟机并在那里恢复数据库。这样更简单,几乎没有停机时间,如果出了问题,你只需继续使用正常工作的服务器。
哦。抱歉。我没有仔细阅读。
不。你不能回去。
如果你使用docker的安装程序,你也许可以升级docker。
我进行了操作系统升级等操作,并完成了PostgreSQL 15的升级,但现在我当我重建应用程序时,出现了
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse ERROR: 列 "require_message" 不存在,字符 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
** 插件失败 **
由于在插件初始化期间出现此错误,您无法启动Discourse:
PG::UndefinedColumn: ERROR: 列 "require_message" 不存在
LINE 1: ..._key, description, notify_type, auto_action_type, require_me...
^
在我重新构建(Postgres升级后)后出现
执行升级
------------------
分析新集群中的所有行 通过
冻结新集群中的所有行 通过
删除新pg_xact文件夹内的文件 通过
复制旧的pg_xact到新服务器 通过
设置新集群的最旧XID 通过
设置新集群的下一个事务ID和纪元 通过
删除新pg_multixact/offsets中的文件 通过
将旧的pg_multixact/offsets复制到新服务器 通过
删除新的pg_multixact/members中的文件 通过
将旧的pg_multixact/members复制到新服务器 通过
设置新集群的下一个多事务ID和偏移 通过
重置WAL存档 通过
在新集群中设置frozenxid和minmxid计数器 通过
在新集群中还原全局对象 通过
在新集群中还原数据库架构 通过
复制用户关系文件 通过
设置新集群的下一个OID 通过
同步数据目录到磁盘 通过
创建删除旧集群的脚本 通过
检查扩展更新 提示
您的安装中包含应使用ALTER EXTENSION命令更新的扩展。
通过数据库超级用户执行update_extensions.sql文件,将会更新这些扩展。
升级完成
----------------
优化器统计信息不会由pg_upgrade传输。
启动新服务器后,建议运行:
/usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages
运行此脚本将删除旧集群的数据文件:
./delete_old_cluster.sh
-------------------------------------------------------------------------------------
Postgres升级完成
旧的13数据库存放在 /shared/postgres_data_old
要完成升级,可以再次使用:
./launcher rebuild app
有什么我可以做的吗?我不确定为什么会缺少这个列。
是的。有一些关于类似问题的帖子。我认为迁移被撤销了,所以你处于一种不确定的状态。
也许手动添加该列。
我不太确定该怎么做,更具体地说,是关于哪个表格等。是否有相关信息我可以找到。我确实找到了你提到的那篇文章,但没有具体细节。
谢谢你!
我甚至无法挂载数据库到可以添加列的程度。我打算尝试禁用所有插件,看看是否至少能启动容器。
好的,这是我们如何修复它的方法(这不适合胆小的人)
RELEASE_UPGRADER_ALLOW_THIRD_PARTY=1 do-release-upgrade
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
./launcher rebuild app
./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...
^
./launcher enter app
rails db
ActiveRecord::Base.connection.execute("ALTER TABLE flags ADD COLUMN require_message BOOLEAN DEFAULT FALSE;")
exit
exit
感谢 @pfaffman 在周末的及时回复。我们将创建一个新的更新的 Droplet 并迁移过去。这本应是通过 Web 界面进行快速的就地升级。但我想脚本没有测试 Docker 的兼容性。当它升级 Discourse Docker 时,它抛出了不兼容的 Docker 错误。
这完全是我们的错,因为我们还在使用非常旧的 Ubuntu 16 版本,稳定系统的优点和缺点之一是它倾向于长期存在。
很高兴你搞定了!这真是太厉害了!
当你的操作系统已经超过了生命周期 4 年时,你无法进行快速更新。 ![]()
优,学到的教训,再次感谢!
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.