TODO: 这个文档我会不断更新
PSI作为一款应用,随着时间的过去,会面临如下的挑战:
1、PHP代码如何升级?
2、数据库如何升级?
下面的方法,都是在客户没有自己做修改定制的前提下(客户自己做了修改定制,我基本上就无解)。
1、PHP代码升级,这个容易,下载新PHP代码,再删除原来部署的PHP代码,再部署新版本的PHP代码。
在:\web\Public\Scripts\PSI\Const.js 这个文件中,记录当前PHP代码的版本。在JS中通过PSI.Const.VERSION就能获得。
把PHP代码的版本记录在JS文件中,很奇葩,好吧,我承认。因为当时我决定记录版本信息了,头脑一短路,就选了写代码最方便的方式,存在JS中了。不过考虑到JS代码基本要配合这PHP代码一起用,这样来记录版本,也算马马虎虎。
2、数据升级,是比较麻烦的事情。
2.1 需要记录数据库版本,为此我增加了一个表 t_psi_db_version,具体格式见数据库设计文档,这里不多说,通过这个表,就能获得当前数据库的版本。
2.2 但是这个不够,因为如果t_psi_db_version被破坏,还是会出问题。
2.3 这样追溯下去,总的有个版本号得信任。这个能信任的是\web\Public\Scripts\PSI\Const.js 中记录的版本号。
2.4 取得JS中的PSI.Const.VERSION的值,如果这个值不是预定范围内的值(什么是预定范围内,目前我还没有仔细设计),就根本不让登录界面出现。
2.5 增加一个模块“系统升级”
下面说说,系统升级的升级算法。
假设是四个版本状态:V1、V2、V3、V4
当前PSI.Const.VERSION 的值是 V2
2.5.1 判断数据库是否是V2状态,怎么判断?办法是穷举法。一个表一个表地判断表结构是否正确。
经过穷举法,得出数据库版本如果是V3、V4,那么就不能升级数据库,而是提醒用户PHP代码版本过低。
经过穷举法,得出数据库版本如果是V2,则提示用户不用升级。
经过穷举法,得出数据库版本是V1(当然了,比V1版本更低的V0,也没问题),就可以开始升级。