从烂摊子到能跑,我折腾“亚洲之子”官网的血泪史
刚过完年,我屁股还没坐热,老李就一个电话打过来,声音都带着颤抖,说他们那个重要的“亚洲之子”官网彻底崩了。服务器那边死活连不上,页面一片空白,客户急得快跳脚。他求我赶紧远程帮他看看,人情债难还,我只好硬着头皮接了这活儿。
我一登录上去,瞬间就明白了为啥会崩。这玩意儿简直是个古董。系统还在跑着老掉牙的PHP 5.6版本,数据库是十年前的MySQL 5.0。我决定不能在烂泥地里原地打转,第一步必须是迁移。
发现与迁移:老代码的陷阱
我先找了个新的CentOS 7服务器,准备重新搭一套干净的LNMP环境。这倒不是难事,难的是把那堆代码扒下来。
我把代码一拉,简直头皮发麻。这哪里是代码,这就是一堆堆砌的垃圾。整个项目没有配置文件,所有的数据库连接信息,包括密码,都直接硬编码写在文件头部。我心想这帮人胆子真大,也不怕被人拖库。
- 第一坑:数据库导出的折腾。
- 第二坑:路径大小写。
为了把老数据库导出来,各种字符集乱码,折腾了我大半天。我发现原始表结构命名极不规范,为了兼容,我不得不把新MySQL的环境设置调到最低要求,免得它跟我抬杠。
我把代码扔进新的Linux服务器里,页面还是报错。仔细一看日志,原来是原始程序员在Windows环境下开发的,路径大小写根本不注意。比如文件里引用的是“*”,但实际文件是“*”。Linux环境可不惯着你,直接给我判死刑。我当时就想骂人,蹲在电脑前,一行一行地用查找替换功能,把所有引用路径的大小写问题全部掰过来,足足花了四个多小时。
最扯的发现:资源分割
等主体代码总算跑起来了,我发现页面还是缺胳膊少腿,很多图片和附件都不见了。我打电话问老李,这原始程序到底是谁写的?老李说,这是他表弟刚毕业时随便弄的。我当时就想拉黑他。
深入查看代码后,我发现最扯淡的事情来了:网站的图片资源和附件,居然是放在另一个独立的FTP服务器上的!而且那个FTP服务器的密码还过期了。
为了找回那个过期密码,我浪费了一个小时去登录老李表弟的邮箱,然后手动重置了FTP密码。登录进去一看,几百个零散的文件,乱七八糟地堆在一起。我没办法,只能全部手动打包,然后拖到新服务器里,统一放到了一个固定的资源文件夹下,并且把代码里的FTP路径引用全部改成了本地相对路径。这操作简直就是给一个快要死的人做器官移植,但又不能让他死。
实现:虽然丑,但能用
我忙活到晚上两点多,终于把所有问题都堵上了。按下回车键,页面终于完完整整地跳了出来。虽然它的底层架构还是那个烂架构,代码还是那个又臭又长的老代码,但至少它活过来了,能正常对外提供服务了。
我给老李发了个截图,告诉他网站能用了,但是我也撂了狠话:这个烂摊子必须得重写,不然下次再崩,我是绝对不会再伺候的。这回的实践记录让我深刻体会到,有些时候,修旧真的不如建新,接手别人的屎山代码,才是真正的噩梦。