上个月接了个 CRM 的小程序单,一万二,工期三周。客户是本地一个做建材的老板介绍的,给他们销售团队内部用。签的时候我还挺得意,因为里面一半的页面是拿 AI 先出的稿,我改改样式、接接接口就能交。说白了这单的利润在我手上,不在代码上。
交付前一天出的事。
测试环境一切正常,一上正式服务器,登录接口就 500。还不是必现,十次里七八次。间歇性的最要命,你根本没法确定自己是不是改对了。
第一反应是客户那边的云数据库,便宜货,我之前被那家坑过一次,连接数稍微一多就抽风。看监控,稳的。
第二反应是服务器配置太低,内存不够。也正常。
这时候我干了一件后来很后悔的事,花两百三买了个报错收集的服务,想着把堆栈抓全。抓是抓到了,一行看不懂的东西,指向的那段代码我反复看了七八遍,逻辑没毛病,本地跑一百遍都没事。
这里其实有个我早该想到的地方——本地跟线上,唯一不一样的就是那个 .env 文件。我知道它不一样,但我一直觉得就几个变量,能出什么事。跑题了说回来,那晚甲方已经催了两回,语气从"麻烦看一下"变成"什么时候能好"。我回今晚一定给你答复。搞到三点,没找着。
第二天早上我把线上的配置文件下下来,跟本地一行一行对。对到第七行,看见变量名后头多了个看不见的东西。是个回车符。
我那台老笔记本上的记事本,不知道什么时候被我拿去改过这个文件,那玩意会自动往行尾插 CRLF。于是本地读的时候,密钥后面就跟着一个回车——线上读到的是对的密钥,本地读到的是"正确密钥+\r"。所以本地永远正常。
删掉,重启服务,好了。
我坐在那盯着屏幕大概两分钟没动。
说这笔账:单子一万二,迟交两天,甲方按合同扣了五百。监控那两百三是白花。熬夜那两天我推掉了一个做官网的小活,那个大概能赚三千。加起来这一回车符,成本四千不到。四千块买我三个晚上,外加甲方那边一点信任。
甲方最后没说重话,就是尾款拖了半个月才结。行吧。
现在所有配置我都不碰记事本了,还加了个格式校验。一万一的单子,谁能想到输在一个我根本看不见的字符上。算了不说了,下午还有个需求要对。