跨平台发布:隐藏的 BT 数据库被打包进了安装包
【摘要】 做跨平台发布,最容易出事的不是编译,而是"发布清单算错了什么"。本文记录我一个下载器项目的真实事故:运行期生成的 BT 完成度数据库,因为藏在隐藏文件里没清掉,被发布脚本当成程序文件下发给所有用户。
一、背景:发布靠脚本算清单
下载器的 Windows 版目录 dist\windows\ 里,除了引擎和界面,还有一些运行期文件。发布时一个 Python 脚本(make_release.py)会扫描目录、生成"需要下发的文件清单"。
二、事故:v1.0.22 发现清单凭空多了文件
某次发版,清单里突然多出两个文件:.torrent.db 和 .torrent.bolt.db。追查发现,它们是 BT 功能运行期生成的完成度数据库,存在于 dist\windows\bt-store\ 下。
问题链:
- 这两个文件是隐藏文件(还有
-shm/-wal伴随文件); - 打包前清理用了普通的
rm -f *,删不掉隐藏文件,所以它们残留在dist\windows; make_release.py没排除它们,把它们当成程序文件算进了更新清单;- 结果:这些用户根本不该拿到的运行期数据库,被推给了所有更新用户。
三、修复
make_release.py增加排除规则,显式跳过bt-store下的运行期文件;- 打包目录本身在打包前,用"能删隐藏文件"的方式清干净,不留隐患。
四、顺带一个相关坑:引擎 / 界面版本要对齐
这类下载器如果做热更新,曾出现过"只换引擎、没换界面"导致旧界面因缺少令牌被 401 挡在门外的情况。鉴权契约一变,引擎和界面必须同版本一起发,别依赖热更新长期混跑。
五、给做发布流水线的教训
- 发布清单要显式排除运行期生成文件,不要默认"全目录下发";
- 清理步骤必须用能处理隐藏文件的命令;
- 热更新涉及鉴权 / 协议契约改动时,强制同版本发布;
- 发版检查单里加一条"清单 diff 人工过一眼",能拦掉大部分这类事故。
【总结】 编译只保证"能跑",发布保证"发出去的东西是对的"。清单 diff 这道关,省不得。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)