Ghost 5.0 升级到 5.42

距离上次升级 Ghost 已经过去快1年了,上次是 Ghost 5.0 刚发布的时候升级的,这次直接把容器镜像版本改为最新的 5.42 时,报了个错:

ERROR connect ECONNREFUSED 127.0.0.1:3306
connect ECONNREFUSED 127.0.0.1:3306

"Unknown database error"

Error ID:
500

Error Code:
ECONNREFUSED

Error: connect ECONNREFUSED 127.0.0.1:3306
at /var/lib/ghost/versions/5.42.0/node_modules/knex-migrator/lib/database.js:57:19
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1278:16)

重试了几次都不行,在 Ghost 的文档中找了半天也没发现从 5.0 升级到 5.42 中间有什么 Breaking changes。最后从 Ghost 的 Docker 镜像维护仓库找到了相关的 Issue:https://github.com/docker-library/ghost/pull/323

大致原因主要是这样,Ghost 5.0 之后其实是有个 Breaking Change,就是原先数据库是支持 SQLite3 和 MySQL 5的,在 5.0 之后,数据库只支持 MySQL 8了,但是 SQLite3 在开发环境还是支持的。对应的 Docker 镜像,在 5.9 之前,都还是可以继续用之前的 SQLite3的,但是在 5.9 这个版本中,Docker 镜像将默认数据库改为了 MySQL 8,这就导致从低版本升到高于 5.9 版本的镜像之后,数据库会直接找不到。在这个 PR 中,其实给出了一个临时的解决方案,就是在环境变量中加两个变量,就可以继续使用 SQLite3,这两个变量是:

database__client: sqlite3
database__connection__filename: /var/lib/ghost/content/data/ghost.db

添加完之后,容器可以正常升级了。

但,既然官方已经将数据库支持重点改为了 MySQL 8,不怕麻烦的话,也可以升级下数据库。原本准备写个 MySQL 8 的升级教程的,想想不折腾了,我的博客用轻量的 SQLite3 就够了。

您已成功订阅 HADB.ME
真棒!下一步,完成结账以便解锁 HADB.ME
欢迎回来!您已登录成功。
登录失败,请重试。
操作成功!您的账户已全面激活,现在您有所有内容的权限了。
错误!Stripe 结账失败。
成功!您的账单信息已更新。
错误!账单信息更新失败。