项目发布中奇葩问题总结

最近一直忙于上个项目的发布上线 也没空做别的 另外一个版本的开发计划又延期了
本次发布后出现了不少问题 处理的焦头烂额 都是些看了很懵 又很奇葩的问题
写个记录方便以后回忆吧


关于Https 和 http 交叉请求 问题

最近新上线的项目直接使用了 Https 来访问 之前项目都是配置的可以同时使用 https 或者 http 来请求也一直没有注意这个问题(平时访问我们自己的站点我都是直接用的http 捂脸~) 这次发现有好多 Mixed Content 的报错 原因就是直接从 Https 页面下去加载 Http的资源 这里主要是调用接口 报错内容如下

1
Mixed Content: The page at 'https://xxxx1' was loaded over HTTPS, but requested an insecure resource 'http://api.xx.com'. This request has been blocked; the content must be served over HTTPS.

现在知道了问题原因 来说下解决办法
1.比较彻底的办法就是使相关的站点全部升级 Https 当然这里处理起来可能会因为各种因素比较费时费力 但是是比较彻底的一种办法(本次我们就这样处理的 所有的 API 项目 全部升级 Https)

2.第二种解决办法就是在 <head> 代码中增加 如下代码

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

他的作用是在我们的 Https 的页面中 如果发现 存在 Http 的资源 会自动替换成 Https 的请求来加载 【并不太推荐这个 浏览器支持不是很好】

关于部分链接呗 Abp 广告拦截插件拦截

这里要说一个问题了 就是项目上线后 某位同事访问测试了下 然后发现页面中有个报错 仔细看了下是有一个接口请求报错了

然后我复查了下接口 怀疑是否是接口报错了 然后发现接口 一切正常 并没有什么问题 找另外同事访问也是正常 唯独这一位同事会报错

后来仔细看了下 接口的 请求状态 发现是 net::ERR_BLOCKED_BY_CLIENT

通常这种问题是由于服务器中缺少文件或者url拼写错误 在请求不丢失的边缘 有其他什么东西阻止了请求。

可以阻止请求的东西就很多了 比如传输之间的网络传输层,代理服务器或者路由器 当然还有个最坑爹的玩意 就是被浏览器扩展插件阻止了请求 比如 AdBlock Plus 这样的 广告拦截器

最后一番排查 果然这位同事在 chrome 浏览器中 安装了 AdBlock Plus 但是为什么这个广告拦截器只拦截了这一个接口请求地址呢 经过同事提醒 最后发现 是接口名字出了问题 简直要笑死自己 来看下接口名字

https://api.x.x.com/advertisement/list

这个接口的作用是用来加载公司设置的广告列表的 我直接使用了 advertisement 这个词来命名接口 翻译过来就是 广告 的意思 然后直接被

AdBlock Plus 给拦截了 无奈 为了防止还有用户是安装了 该插件的 修改了下接口的名字 问题解决 所以以后命名的时候还是需要多多注意下~

关于合并代码个别文件权限问题

这是一个很诡异的问题 遇见了好几次了 有点莫名其妙 就是在我们项目准备发布的接口 准备去合并代码 然后提交发布了

但是合并的时候发现有一个文件提示权限又问题 忘记截图报错内容了,但是一番查看 文件权限并没有问题 也不存在别的编辑器打开当前文件占用问题

后来问了某位 高玩 给了个建议 把当前系统打开的所有编辑器IDE都关闭掉 然后重新合并,提交成功了

至今也不知道什么鬼原因 只知道这样可以解决 也是笑哭自己!

关于Laravel-Redis访问不了问题

这也是一个奇葩的问题

问题描述:

【Lumen项目】在做微信js授权的时候 想缓存那个 ticket 的值,然后想直接存到 Redis

本地开发一帆风顺 然后提交测试环境准备测试的时候 直接报错502

最后定位到问题是 Redis 的连接出了问题 但是看 Redis 的连接配置并没有什么问题

.env 文件中

本地的Redis配置参数

1
2
3
4
#redis配置
REDIS_HOST=192.168.1.80
REDIS_PORT=6379
REDIS_PASSWORD=Gundam

然后测试环境的Redis配置 【测试环境是没有设置密码的】

1
2
3
4
#redis配置
REDIS_HOST=192.168.1.80
REDIS_PORT=6379
REDIS_PASSWORD=

乍一看没啥毛病啊 郁闷了半天 找了好几个同事看也没啥问题 最后试了下把密码也做掉了 然后报错信息出来了

AUTH failed: ERR Client sent AUTH, but no password is set [tcp://192.1.1.1:6379]

问题就出在坑爹的没密码上 照常没有密码就没有呗 但是如果你配置了参数 REDIS_PASSWORD 就必须给他一个值 默认下没有这个配置参数的时候底层链接Redis的时候他会填上一 null 值 而我的配置文件中 设置了 REDIS_PASSWORD 但是却没有给他值 所以底层连接 Redis的时候加载了配置文件 带入这个进去就报错了

解决办法 在没有密码的时候设置null即可 REDIS_PASSWORD=null

至此本次项目中几个问题都解决了

继续努力~


-------------The End-------------