踩坑系列之Spring MVC在windows和linux下的文件路径大小写敏感问题

原创  郑建华   2020-11-18   91人阅读  2 条评论

    近日,碰到了一个非常令人头疼的问题,一度找不到方向,以至于我花费了近两个小时才得以发现原因。不得不说,不冷静和陷入思维定式是解决问题的两大难关

    事情是这样的,原计划当天有事,想早些下班的,所以就提前发送了更新包,而由于实施时间抽不开,临近我原定的下班时间才给更新完成。本以为可以下班走了,结果问题来了。更新的程序其他的都没有问题,唯独有一个菜单,就是打不开页面。因为这该死的责任心,必须搞定才下班才合适。

    心里想着,这个问题应该简单,想快些处理完。第一,先排查本地环境。像此类的问题,第一步就是验证本地有没有问题,确认是不是功能确实没做好。结果,一切运行正常!这下问题就来了,处理问题的习惯导致我,此时已经认定程序没有问题,肯定就是现场环境的问题。第二步,排查现场的问题,直接查看浏览器控制台错误,500错误,这肯定就是后台报错了,接着就去查看日志。

image.png

这是视图解析错误,此时就应该去对照实际目录下有没有这个文件。我也是这样去做的,可就坏在我没有仔细看,而是直接将路径拷贝回来,直接用idea搜索这个目录。用idea的都知道,这个搜索是会忽略大小写的,自然就给搜到文件了。既然搜到了,我也没有仔细看这个路径了。到了这一步,我已经开始迷茫了,提示的错误就是说视图解析不对,但就是找不到问题。再加上有事着急,就一直没冷静下来。

    接下来的操作,在歧路上越走越远。开始怀疑是不是class有问题,重新更新一下。怀疑index的文件编码是不是不对。都验证过后,甚至将生产环境的程序包拷贝回来到本地运行。结果又正常了!!!这下彻底蒙了。这个时候已经过去大半个小时了。家里人也在催我了,怎么还没到家。就更加着急了。又折腾了一番,将这个解析不了的地址换成一个其他的地址,结果又可以。

    最后没辙了。干脆重新编写路径的常量,重新建页面的目录,名字都重新更改一下。更新上去了,然后就可以了。其实,不到万不得已是真不想这么做,毕竟本地都正常,生产环境不行,肯定是有原因的,要找到问题才甘心。就在我刚用这种挫办法解决了之后,我忽然发现了关键点。这个时候已经过去两个小时了。喜极而泣。

    这个是常量的文件路径:

image.png

    这个是实际的文件夹名称:

image.png

    

    仅仅只是一个S大小写的问题,就浪费了我这么多时间。在未更新前这个菜单是可以正常访问的,而就在这次更新之后就不行了。基于这个点,我寻找了一下原因。想起了上一次更新的时候,同事提交的代码少了个常量没有提交,而当时人又不在,我自己给补充上去了,然后更新到了生成环境,是正常的。而在之后,同事将未提交的代码又给提交上去了,并且提交的常量部分覆盖了我补充的常量。所以,这一次更新的时候就出问题了。这里解释了为何更新前可以,更新后不行。但是,还有个问题,为什么生产环境不行,而本地环境可以呢?

    对比一下,两边的区别。能想到的最大的差别就是,生产环境是linux系统,而本地环境是windows系统。所以,windows系统的文件路径是大小写不敏感的,linux系统是大小写敏感的。

    就这次踩坑记录,做总结一下:

    1、开发程序,涉及到路径的,一定要区分大小写。

    2、排查问题时,尽量以错误描述去寻找问题,如果没找出来,就反复排查。

    3、跳出思维定式,不完全以习惯为导向。

    4、处理问题时,一定要冷静!冷静!冷静!

    5、协调开发,合并代码时一定要注意。


本文地址:https://www.zjh336.cn/?id=2007
版权声明:本文为原创文章,版权归 郑建华 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

 评论列表

  1. 微微一笑抽了筋
    微微一笑抽了筋 【实习生】  @回复

    笑出了声,啊哈哈哈哈哈

  2. 刷百度指数
    刷百度指数 【助理】  @回复

    是什么样的系列呢,还真心不知道