Nocobase在本地源码编译后多版本管理存在的两个问题

#工作笔记#

nocobase接触比较早了,但在工作上没有深度用起来,处于了解阶段并没有深入研究。

现在有个需求,希望将部分业务部门的Excel手工账转移到系统中,想到了用nocobase来实现。

nocobase官网版本更新比较快,本地在不断尝试时就产生了多版本pm2管理以及启动的问题,下面展开记录。

一、用pm2管理并启动nocobase

先看下本地pm2可以执行文件的版本情况,nocobase已经有四个版本:

bash 复制代码
hehe@ubuntu2404:$ sudo find / -name "pm2" -type f -executable 2>/dev/null
/usr/lib/node_modules/pm2/bin/pm2
/usr/lib/node_modules/pm2/pm2
/home/hehe/nocobase-1.6.36/node_modules/pm2/bin/pm2
/home/hehe/nocobase-1.6.36/node_modules/pm2/pm2
/home/hehe/nocobase-1.7.0/node_modules/pm2/bin/pm2
/home/hehe/nocobase-1.7.0/node_modules/pm2/pm2
/home/hehe/nocobase-2.0.0-a51/node_modules/pm2/bin/pm2
/home/hehe/nocobase-2.0.0-a51/node_modules/pm2/pm2
/home/hehe/nocobase-2.0.0-alpha.70/node_modules/pm2/bin/pm2
/home/hehe/nocobase-2.0.0-alpha.70/node_modules/pm2/pm2

因为当pm2在启动单个版本的nocobase项目时,并没有多大问题,最多是pm2 list时名称显示为index,比如下面这样:

刚进入nocobase-2.0.0-a51目录,启动应用后,name显示也没有问题,因为生成ecosystem.config.js文件内容时,就定义了name是nocobase20,这都没问题

bash 复制代码
hehe@ubuntu2404:~/nocobase-2.0.0-a51$ pm2 start ecosystem.config.js
[PM2][WARN] Applications nocobase20 not running, starting...
[PM2] App [nocobase20] launched (1 instances)
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name               │ mode     │ ↺    │ status    │ cpu      │ memory   │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0  │ nocobase20         │ fork     │ 0    │ online    │ 0%       │ 29.6mb   │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘

接下来当我们pm2 list或者save去看的时候,name就变了。

bash 复制代码
hehe@ubuntu2404:~/nocobase-2.0.0-a51$ pm2 list
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name               │ mode     │ ↺    │ status    │ cpu      │ memory   │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0  │ index              │ fork     │ 0    │ online    │ 0%       │ 231.6mb  │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘

为什么会这样呢?几十次实验下来,你会发现当执行 pm2 list 或 pm2 save 时,PM2 会从 dump.pm2 加载旧配置,覆盖当前运行的进程配置。

我这里的情况更特殊,因为pm2就存在6.0.5和6.0.14两个版本,

/home/hehe/nocobase-2.0.0-a51/node_modules/pm2/bin/pm2的版本是6.0.5

/home/hehe/nocobase-2.0.0-alpha.70/node_modules/pm2/bin/pm2的版本6.0.14

当我从nocobase-2.0.0-a51切换到nocobase-2.0.0-alpha.70目录,分别启动应用时,哪怕先停止2.0.0-a51的应用,再启动2.0.0-alpha.70时,第二个name就变成index了,然后再去看/home/hehe/.pm2/dump.pm2的文件内容时,name就是index (哭笑不得)。

这时候比如我手动修改/home/hehe/.pm2/dump.pm2的文件内容,将name改成nocobase2070,到版本目录下,执行下面命令并启动应用后,再pm2 list时,结果也会显示nocobase2070。

bash 复制代码
pm2 start ecosystem.config.js

这样看似没有问题,如果再尝试换个版本,问题又重复显现了,所以直觉就是pm2在应用多版本管理上是有问题的。

因为不管同时启动多个应用,只有一个PM2 的 dump.pm2文件来管理所有的应用,所以结论就是不支持按项目隔离配置。

假设pm2有类似python中的虚拟环境(如venv)管理项目依赖和环境隔离,说不定也可以解决这个问题。

接下来怎么解决呢?既然pm2不支持也搞不定多版本,就还是用Systemd服务的方式来启动不同版本的应用呗,还能怎么办。

二、当nocobase从本地的2.0.0-a51版本切换到2.0.0-alpha.70时又遇到问题(哭!!!)

一种方式是升级,因为是开源,没有买商业插件(支持平滑升级),so...

另一种就是全新安装了,我就是这样,不同的版本在不同的目录,db也配置不同的数据库,基本上都正常。

但是问题往往发生在自己偷懒或者有奇思妙想(神经错乱)时,上面说的没有问题是指应用启动都正常,访问都正常,此时最大的问题是,如果每个版本都有数据了,希望数据也跟着版本走,怎么办?

一种方式是每个版本启动后,在线的数据导入导出呗,或者离线数据备份后,数据库的数据导入导出呗,我没试,肯定可以,需要解决的就是表字段对齐,约束和一致性解决,都是伤神的事情;

另一种方式,就是直接用之前的数据库,我就是这样折腾出毛病的,2.0.0-alpha.70用了2.0.0-a51的pg库(跟哪种数据库没关系即使mysql或者sqlite、sqlserver也一样),好家伙启动了,端口也改了,访问提示提示column "renameMode" does not exist,这不就悲催了,偷懒没偷成呗

接下来怎么折腾呢?我还没想好,写个工具吧,看怎么解决db平滑升级,毕竟没钱么。有钱的还是可以支持官网买商业插件来解决。

如果有买了商业插件的伙伴也欢迎分享记录一下告诉我,等我有钱了,就买(真的)。

相关推荐
是个西兰花1 小时前
Linux:深入解析Linux线程原理与实现
linux·运维·c++·线程·互斥锁
运维大师2 小时前
【Linux运维极简教程】07-磁盘管理与LVM
linux·运维·服务器
乖巧的妹子2 小时前
刷题总结知识
linux·服务器·windows
拳里剑气3 小时前
Linux:基础IO
linux·运维·服务器·io
峥嵘life3 小时前
Andorid 打开热点,关闭有线网,ifconfig卡死分析解决
java·服务器·网络
小小龙学IT3 小时前
Day 2-3:Linux 文件与目录操作
linux
三8443 小时前
基本Linux命令总结
linux·运维·服务器
隔壁阿布都3 小时前
ClickHouse完整指南
服务器·数据库·clickhouse
hehelm4 小时前
AI 大模型接入 SDK —项目概述
linux·服务器·网络·数据库·c++
mounter6254 小时前
跨越鸿沟:从内核驱动开发到超大规模云端生产环境的思考
linux·驱动开发·linux kernel·kernel