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平滑升级,毕竟没钱么。有钱的还是可以支持官网买商业插件来解决。

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

相关推荐
安科士andxe7 小时前
深入解析|安科士1.25G CWDM SFP光模块核心技术,破解中长距离传输痛点
服务器·网络·5g
小白同学_C10 小时前
Lab4-Lab: traps && MIT6.1810操作系统工程【持续更新】 _
linux·c/c++·操作系统os
今天只学一颗糖10 小时前
1、《深入理解计算机系统》--计算机系统介绍
linux·笔记·学习·系统架构
儒雅的晴天10 小时前
大模型幻觉问题
运维·服务器
通信大师11 小时前
深度解析PCC策略计费控制:核心网产品与应用价值
运维·服务器·网络·5g
不做无法实现的梦~11 小时前
ros2实现路径规划---nav2部分
linux·stm32·嵌入式硬件·机器人·自动驾驶
默|笙13 小时前
【Linux】fd_重定向本质
linux·运维·服务器
叫我龙翔13 小时前
【计网】从零开始掌握序列化 --- JSON实现协议 + 设计 传输\会话\应用 三层结构
服务器·网络·c++·json
陈苏同学13 小时前
[已解决] Solving environment: failed with repodata from current_repodata.json (python其实已经被AutoDL装好了!)
linux·python·conda
“αβ”14 小时前
网络层协议 -- ICMP协议
linux·服务器·网络·网络协议·icmp·traceroute·ping