升级至v3.5.3之后管理员页面出现异常

从v3.5.2版本升级到v3.5.3之后,管理员页面出现异常

且报如下错误

loader.js:247 Uncaught (in promise) Error: Could not find module discourse/admin/models/admin-plugin imported from discourse/plugins/docker_manager/discourse/models/repo
at loader.js:247:1
at a (loader.js:258:1)
at s.findDeps (loader.js:168:1)
at a (loader.js:262:1)
at s.findDeps (loader.js:168:1)
at a (loader.js:262:1)
at requireModule (loader.js:24:1)
at n.i [as getRoute] (index.ts:121:18)
at p._getQPMeta (index.ts:101:20)
(anonymous) @ loader.js:247
a @ loader.js:258
(anonymous) @ loader.js:168
a @ loader.js:262
(anonymous) @ loader.js:168
a @ loader.js:262
requireModule @ loader.js:24
i @ index.ts:121
_getQPMeta @ index.ts:101

禁用插件之后正常了,但无法定位是哪个插件出现了问题,可以帮忙看下吗

安全模式下“禁用非官方客户端插件自定义”时问题仍然存在,但“禁用所有客户端插件自定义”时就正常了

3.5.3 不再受支持。请参阅 https://releases.discourse.org

1 个赞

正如内特所说,那是一个非常旧的版本了。 也许可以尝试使用命令行更新。

1 个赞

请问建议升级到哪个版本呢?跨太多版本升级会不会有更多兼容性问题?

升级到2026.1.1之后直接失败了

1 个赞

请检查您的 /logs 以获取可疑消息。

2 个赞

如果网络升级失败,您需要以 root 用户身份登录 ssh 并执行命令行升级。

你能尝试一下如上回复中建议的命令行重建吗?这可能会解决问题,我从未见过版本跳跃导致的问题……

1 个赞

请问具体是哪个命令呢?我的服务是打包成docker镜像,然后部署在远程服务器的k8s集群中的。使用的是web_only方式部署。

另外管理员页面出现错误时,有如下报错:

转到您安装 Discourse 的位置并输入 ./launcher rebuild app —— 无论 discourse_docker 在哪里。我相信 /var/discourse 是放置该脚本的“推荐”位置,但对您来说可能有所不同。

那是不受支持的。你需要做些什么来加载最新的镜像。你需要迁移数据库。通常升级多个版本没有问题。

3 个赞

看起来是迁移数据库失败了。报了下面这个错。

TOP => db:migrate => assets:precompile:asset_processor │
│ full trace by running task with --trace) │
│ executing /etc/runit/1.d/00-ensure-links │
│ executing /etc/runit/1.d/01-cleanup-web-pids │
│ executing /etc/runit/1.d/anacron │
│ executing /etc/runit/1.d/cleanup-pids │
│ stale PID files │
│ executing /etc/runit/1.d/copy-env │
│ runsvdir, PID is 1126 │
│ aborted! │
│ pnpm -C=frontend/asset-processor node build.js (Discourse::Utils::CommandError) │
│ Failed to switch pnpm to v10.28.0. Looks like pnpm CLI is missing at “/home/discourse/.local/share/pnpm/.tools/pnpm/10.28.0/bin” or is incorrect │
│ /home/discourse/.local/share/pnpm/.tools/pnpm/10.28.0/bin/pnpm EACCES

我查看具体的pnpm路径时发现路径是存在的,但是pnpm.cjs文件没有执行权限,导致错误。

drwxrwxrwx root root /
drwxr-xr-x root root home
drwxr-x— discourse discourse discourse
drwxr-x— discourse discourse .local
drwxr-x— discourse discourse share
drwxr-x— discourse discourse pnpm
drwxr-x— discourse discourse .tools
drwxr-x— discourse discourse pnpm
lrwxrwxrwx discourse discourse 10.28.0 → 10.28.0_tmp_9_0
drwxr-x— discourse discourse 10.28.0_tmp_9_0
drwxr-x— discourse discourse bin
lrwxrwxrwx discourse discourse pnpm → ../node_modules/pnpm/bin/pnpm.cjs
drwxr-x— discourse discourse ..
drwxr-x— discourse discourse node_modules
drwxr-x— discourse discourse pnpm
drwxr-x— discourse discourse bin
-rw-r----- discourse discourse pnpm.cjs

后来我在镜像中使用corepack预安装了对应版本的pnpm之后,数据库迁移成功了。现在服务已经正常了。

1 个赞