记我的踩坑经历,愿你引以为戒,不会遇到

来源:互联网 发布:购物中心数据采集 编辑:程序博客网 时间:2024/04/30 14:22

记我的踩坑经历,愿你引以为戒,不会遇到

今天去客户那边部署新版本的程序,结果踩到了一个“坑”,愿你引以为戒,今后不会遇上。

 

坑一:

事情是这样的,今天去客户那边部署。备份旧版本,备份旧数据,上传新版本,修改数据库,一切顺利,最后启动新版本......报错?!再来启动新版本.....依旧报错。诺,就是下面这个样子:


我当时看到2处的提示就一头雾水了,还专门看了看,确实打包进去了怎么会说找不到程序入口了呢你说是吧。后来请求同事协助了一下,我猜它是根据1处的提示联想到了会不会是jre版本的问题。

然后他让我检查一下我自己开发环境(也就是打包程序的地方)的jre版本:


我一看真的不一样,然后就换成jre6重新打包,上传,启动......成功!

原来问题出在我开发环境的jre版本跟客户的生产环境的不一样。可能是当初开发的时候改了一下eclipse中的引用吧。

所以开发前,首先要做的就是统一版本!!!切记。不要轻易更改自己的引用!!!切记。

说起这一类的坑——“A/情况下还好好的,怎么到了B/情况下就不行了呢”我还真踩过不少呢。

坑二:

For example,我遇到过一次在eclipse中启动还好好的,怎么到了服务器上就不行了的问题。最后找了半天才查出来原因。事情是这样的。

我的eclipse中设置好了断点,我一行一行代码地跟,发现没有问题,能出来预期的效果。但是当我将程序部署到测试服务器上的时候就发现客户端打印输出报错,愣是说XX文件找不到!我清楚地记得当时我的同事拧着眉毛微张着嘴,半天憋出一句“这不是在这儿呢吗”。那天我们仨一直捣鼓到夜里十二点,还是最后我们领导说了一句“是不是咱们调用的方式有问题啊,客户端怎么可以直接访问服务端的配置文件和代码呢。是不是应该服务端启动一个web服务,然后客户端去调用这个服务,让服务端来访问这个配置文件并执行代码呢”。最后一想,那个一直报错说找不到的文件还的确是在服务器上呢。而且客户端真的不可以直接执行服务器上的代码对不对?对!随后,问题解决。你想啊,你在eclipse环境将程序启动起来,客户端、服务端都是部署在你本机上的,当然客户端能找到那个配置文件了啊,但是到了服务器上,客户端就在客户机上了,而配置文件到了服务器上了,可不是就.......

那天我们仨凌晨才回家,希望看到这里的你能引以为戒啊。类似的坑很久之前还遇到过呢。

坑三:

记得那是一段js代码,点击按钮之后,后台执行一段代码操作数据库里的数据,而前端的js负责取出数据的最新状态进而做出反应。说到这里可能你已经猜到怎么回事了。

我在页面上怎么点都出不来效果,但是在js上打了断点一行一行代码地执行就没有问题啊。反反复复几次都找不到原因,然后一次偶然,手点“下一行”快了点,发现调试情况下也出了问题。这才想到:是数据不“同步”的问题吧。

你想啊,在正常情况下,页面上点击了按钮后,js代码被触发,去到数据库里读取数据,可这时候后台代码还没那么迅速呢,也就是说最新数据还没写到数据库呢,你前段js怎么可能拿到最新数据呢?!而在调试状态下,js卡在那里一段时间,就是在被卡着的这段时间里,后端代码将数据写进了数据库里,当然能出来预期效果了

坑四:

接下来要说的这个坑到现在我都没明白过来是怎么回事。这个坑的现象是这样的,我和合作方的工程师要进行数据的收发,数据是JSON格式的,然后呢,我传给他的几个附件文件(byte[]格式)也要放在这个JSON串里给我传过来。然后听我说神奇的事情啊,我这边实体转JSON用的是alibaba.XXX.json这个工具类。部署之前做测试没有问题,那边可以接受并解析,但是到了用户那边部署到生产环境就发现不行!最后我这边也赶紧换了文件转字符串的方法。

其实这件事给我一个启发,尽量用相同的转换、解析方法。但是当初这个坑的原因,至今我不明白。

坑五:

还是上头“坑四”中提到的那件事。我这边给人家发送json串的时候,需要将文件先用base64将字节流转成字符串,我可以先在客户端直接转然后发到服务端,也可以在服务端进行转换。然后高潮来了,我在自己本机上跑没问题,但是部署到服务器上发现,如果base64的使用放在服务端会报错说找不到该类,而放到客户端就没问题。最后发现是服务器上jre版本跟我的不一样所致。

 

 

总结:

很感谢今天写了这篇文章,让我发现了规律。当我们嚷嚷着A/情况下还好好的,怎么到了B/情况下就不行了呢”的时候应该明白,其实是因为AB两处/情况的确有差别!要想让程序好好地跑,不是光代码一模一样就行的,还需要环境一样。环境!环境!环境!当你再遇上类似事件的时候,要多想想是不是有哪里不一样。

 

 

附:

 

1、

2、客户端与服务端通信可以使用webService


0 0
原创粉丝点击