部署方式 | How to Deploy
使用一键部署脚本 | Using zealot-docker on-click install (Default)
部署版本 | Version
nightly (Default)
反代服务 | Reverse Proxy
kong-2.8.1
已阅读文档 | Read the document
描述 | Description
/api/app/latest 接口获取更新版本存在较大问题,不能正确获取最新版本,经过排查定位到以下代码。
|
def find_since_version(bundle_id, release_version, build_version) |
|
releases.where("release_version >= '#{release_version}'") |
|
.where("build_version > '#{build_version}'") |
|
.where(bundle_id: bundle_id) |
|
.order(id: :desc) |
|
end |
具体表现如下:
数据库认为版本号“1.0.10” 小于 “1.0.2” 大于 “1.0.1”。
SQL语句: select '1.0.10' > '1.0.1';
结果:t (true)
SQL语句: sselect '1.0.10' > '1.0.2';
结果:f (false)
同时 build_version 的比较也存在类似问题;
SQL语句: select '10' > '1';
结果:t (true)
SQL语句: sselect '10' > '2';
结果:f (false)
根本原因是postgres的字符串比较问题,导致/api/app/latest 产生了一些莫名其妙的Bug。
两种修复方案:
- postgres 安装pg_semver 扩展,以支持semver数据类型,修改release_version为semver类型,修改build_version为int类型。
- 将build_version字段数据类型改为int,修改build_version查询条件为>=, 并且去掉查询中release_version 的 where条件,仅比较 build_version 字段。
个人建议使用第二种方案进行修复,相比第一种较为简单,同时只根据build_version进行版本更新判断并无不妥, 毕竟build_version 只能为数字,且只能增大不能减小。
问题日志 | Relevant log output
No response
部署方式 | How to Deploy
使用一键部署脚本 | Using zealot-docker on-click install (Default)
部署版本 | Version
nightly (Default)
反代服务 | Reverse Proxy
kong-2.8.1
已阅读文档 | Read the document
描述 | Description
/api/app/latest 接口获取更新版本存在较大问题,不能正确获取最新版本,经过排查定位到以下代码。
zealot/app/models/channel.rb
Lines 31 to 36 in 42094ec
具体表现如下:
数据库认为版本号“1.0.10” 小于 “1.0.2” 大于 “1.0.1”。
SQL语句: select '1.0.10' > '1.0.1';
结果:t (true)
SQL语句: sselect '1.0.10' > '1.0.2';
结果:f (false)
同时 build_version 的比较也存在类似问题;
SQL语句: select '10' > '1';
结果:t (true)
SQL语句: sselect '10' > '2';
结果:f (false)
根本原因是postgres的字符串比较问题,导致/api/app/latest 产生了一些莫名其妙的Bug。
两种修复方案:
个人建议使用第二种方案进行修复,相比第一种较为简单,同时只根据build_version进行版本更新判断并无不妥, 毕竟build_version 只能为数字,且只能增大不能减小。
问题日志 | Relevant log output
No response