有一套web系统,会部署到不同的服务器上分别运行,这套系统类似于市面上的OA系统一样, OA开发商会给不同的企业客户部署一套独立的互不关联的系统,我维护的这套系统也差不多,分别被部署在互不关联的服务器上,当然,这些系统的代码是同一套,功能也都是相同的。
前两天,有客户反馈,他们系统的某个功能无法正常使用。我开始排查问题,发现部署在其它服务器的系统这个功能都是正常的,唯独这个客户的系统存在问题。而据我所知,这套系统功能上对于所有客户都是一视同仁的,是不存对于不同客户有不同功能的情况,因为部署在所有服务器上的代码是同一份。
刚开始以为问题是代码不同步导致的, 后来反复确认出问题的那套系统的代码的确是最新。可为什么大家的代码都是一样的偏偏就它有问题呢? 而出现的这个问题是纯业务逻辑上的问题,跟服务器环境是不相关的。
反复查看代码, 反复检查配置文件,反复在开发环境中调试,始终找不出个所以然来, 百思不得其解。
最终我不得不祭出只有在尝试了所有方法后依然无法奏效万不得已才会去使用的杀手锏:线上调试。
我登上服务器,编辑代码文件,在我认为容易定位到问题所在的代码位置加上打印数据的语句, 然后运行出问题的功能,观察出问题的数据。在这里我要感谢运维,感谢PHP,没有他们的帮助,我还要绕个大圈圈才能干这事。
然后以我观察到的数据为线索, 一步步的向上追踪问题代码, 最终发现, 在某一个很深的角落里, 静静的躺着这样一段代码
if($_SERVER["SERVER_NAME"] == "192.168.110.233" || $_SERVER["SERVER_NAME"] == "){ //问题系统消失的功能的代码 }