首页 > 其他分享 >Bug 解决 | 本地项目上线后出现错误

Bug 解决 | 本地项目上线后出现错误

时间:2024-07-30 09:29:39浏览次数:10  
标签:上线 差异 环境 问题 本地 比如 Bug

目录

一、前言

二、原因分析

1、本地代码误发线上

2、环境差异

3、配置差异

4、资源路径差异

5、API 接口差异

6、用量差异


一、前言

大家好,我是小洪爱分享。在开发上线项目的过程中,我们经常会遇到一种让人头疼的情况。那就是开发好的项目功能明明在本地运行和测试都没问题,但一旦上线运行,就出现各种问题,导致上线后还要回滚代码到正常的版本。

导致这种情况的原因实在是太多了,比如环境、依赖、配置、编码粗心、开发流程不规范等等,缺乏经验的情况下,想第一次就正常上线成功,还是挺难的。

但是正所谓 “吃一堑长一智”,出了问题就要想办法预防和解决,所以我写下这篇文章,给大家分享导致本地项目上线后出问题的经典原因和解决方案,希望能帮大家后续开发上线项目时,少踩一些坑。

大家看看下面这些情况,说的是不是你!搞不好都能全中!(反正我朋友都干过哈哈)


二、原因分析

1、本地代码误发线上

这个问题本质上是由于粗心导致的,很多同学为了自己本地开发方便,可能写了一些模拟数据、特殊逻辑(比如不判断用户权限),但是最后上线前不检查,就直接把特殊逻辑发到线上了,导致各种各样 “哭笑不得” 的问题。

这里有 2 种预防方式:

        1)使用 CR(Code Review)机制,在自己的代码发布前,由同事或上级来检查代码,从而提前发现一些问题。

        2)不要写仅本地可用的代码、尽量不写和环境有关的特殊逻辑,保证自己写的每行代码都是可发布上线的

虽然这个问题可以预防,但是无法根治,因为人本身就是最大的 Bug,一个再牛的人也可能会犯一些小错误。

2、环境差异

很多时候,同一套代码换一个环境可能就跑不通了。比如操作系统、网络连通、依赖服务、依赖版本、防火墙安全设置等等的差异。

举个典型的例子,本地的数据库新增了字段,测试通过了;结果上线前忘了在线上数据库同步新增字段,就导致数据库相关功能崩掉。

要解决这个问题,最好的办法就是尽量保证本地环境和线上环境一致,比如使用 Docker 容器等虚拟化技术来模拟线上环境运行。或者在正式上线前,通过测试环境、预发布环境来测试部署,降低环境差异的风险。

此外还有个建议,对于核心项目,团队内最好能整理出一个规范的部署文档、明确定义项目运行的环境,保证团队成员都能提前知晓这些信息并正确配置环境。

3、配置差异

由于本地和线上的环境可能存在差异,我们适用于本地的项目配置文件不一定适用于线上。

比如 Java 项目的 application.yml 文件,一般会定义项目启动的端口、依赖的数据库服务配置、cookie 配置等。如果在配置文件中指定项目在 8080 端口启动,你自己的电脑上运行可能没问题,但为啥发到线上就运行不起来或无法访问呢?

大概率是因为线上服务器的 8080 端口已经被其他人占用了;或者没有给该端口开启防火墙,导致无法访问。

为了解决这个问题,通常我们会分别为本地和线上指定不同的配置,比如区分 application-dev.yml 、application-prod.yml 等,不同的环境加载不同的配置文件。

还可以使用一些可视化的配置管理工具(比如 Apollo、Nacos),让管理员统一在工具上发布不同环境的配置,并通过工具校验配置并记录变更,减少人工导致的配置差错。

4、资源路径差异

如果你的项目中引用了本地文件(比如 C 盘的 xxx.txt),那么上线后大概率会报错。因为线上的服务器并没有该路径、或者在该路径下没有文件。

为了解决这个问题,建议大家尽量使用相对路径去加载资源;或者使用集中的分布式文件系统、对象存储服务等,给每个资源一个统一确定的标识(比如网址),保证各机器上都能用相同的路径找到该资源。

5、API 接口差异

这个问题更多地是出现在前端。一般情况下,前端本地调试时请求的是后端的开发服务,而上线后请求的是线上服务。不仅请求的路径不同的,还可能出现跨域问题,导致接口请求失败、无法登录等问题。

所以尽量保证开发和线上接口的路径规范一致,对于跨域问题可以使用 Nginx 网关的反向代理功能统一解决。

另外,在企业开发中,一般开发环境和线上环境的网络是隔离的。如果你的代码依赖一些第三方接口,一定要注意接口的网络连通性、接口的性能差异等问题,提前做好相关的测试。

还有一种情况,在使用有回调功能的第三方服务(比如公众号开发)时经常会出现,那就是忘记了修改第三方服务的回调地址。而且这种错误不好排查,因为你能请求通别人的服务,只不过别人的服务通知不到你罢了。所以要格外留意这种情况。

6、用量差异

这是所有上线出 Bug 的情况中,我个人认为最高级的了,而且很难绝对避免。

由于本地、测试等非线上环境,通常比线上真实业务的数据量、调用量、负载压力小很多,所以很多问题不到线上很难发现。

比如你开发自测时,可能用单线程跑的好好的,结果一上线,有 10 个线程同时请求,服务就挂了、或者数据就不一致了。

还有你在开发自测时,可能系统压力很小,数据库、Redis 都跑的很开心。结果一上线,百万个用户一人存个数据,你的数据存储服务就都爆满了。

为了防止这些用量差异带来的问题,我们开发测试过程中不能只是简单地测试功能是否可用,还要使用 JMeter 等专业的压力测试工具,来验证系统的性能、稳定性和可用性。

再扩展一点,即使项目刚上线的时候没问题,也不代表一直没问题。比如外卖系统,一般中午饭点是流量的高峰,可能在这个时候系统扛不住了会崩掉,但其他时候都是正常的。所以对于用户量和规模较大的项目,我们要结合具体的业务和用户使用情况来分析,并采用不同的策略(比如流量的削峰填谷)来优化系统。

另外,大公司有的时候还会搞故障演练,就是故意模拟给你的系统制造故障,看看它多久能恢复。这样真出了事也能很快地处理,不至于被说 “降本增笑” 了。


OK,以上就是本期分享,不知道上面的坑大家踩过几个呢?

下次你认识的人或同事如果出现了上面的问题,请务必把这篇文章转给他看!

希望对大家有所帮助,关注我!不定期分享有用干货!!!

如果有疑问的可以评论提出来~

标签:上线,差异,环境,问题,本地,比如,Bug
From: https://blog.csdn.net/weixin_48916444/article/details/140787604

相关文章

  • Bug 解决 | 项目启动失败
    目录一、前言二、项目启动失败的原因1、代码一致2、环境一致3、依赖一致5、其他因素三、推荐的解决方案一、前言想必所有学编程的同学以及在工作上都遇到过这样一个问题:把别人的代码或项目拉取到自己的电脑上,然后按照别人提供的步骤去启动项目。结果当你自信满满地......
  • 如何在本地设置深度学习中心
    我真的需要在我的电脑上设置一个深度学习中心。我运行的是13900k、4080S和32GB6400MTRam,我知道我想要训练/建模什么,但是看在上帝的份上,我无法在我的个人计算机上设置它。我运行的是Win10,仅供参考。预先感谢尝试了通常的Anaconda安装、Python安装、nVidiacuDNN和T......
  • 【ollama】手把手教你布置本地大语言模型 以及各种常见用途#如何加载guff模型到ollama
    ollama介绍Ollama是一个开源框架,专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计。以下是其主要特点和功能概述:简化部署:Ollama目标在于简化在Docker容器中部署大型语言模型的过程,使得非专业用户也能方便地管理和运行这些复杂的模型。轻量级与可扩展:作为轻量级......
  • 测试需求、测试用例、bug的关系
    测试需求和测试用例、缺陷报告的关系?测试的基本流程:获取测试需求--编写测试计划--制定测试方案--设计和开发测试用例--执行测试--提交缺陷--测试分析和评审--测试总结--准备下一版本的测试获取测试需求是测试工作的重点,也是第一步。通过需求的分析,了解和掌握测试的方向和内容。......
  • 人工智能|利用人工智能自动找bug
    简介在程序员编程的过程中,产生Bug是一件稀松平常的事情,以前在编码的过程中提前找出Bug,需要通过单元测试、CodeReview等各种方式。当今,人工智能技术的发展给软件开发和测试带来了许多机会。利用人工智能技术,可以开发出自动化的bug检测工具,从而提高软件质量和可靠性。除了Bug......
  • OpenFeign的bug汇总
    报错:Requestmethod‘POST‘notsupported解决:@RequestMapping(method=RequestMethod.GET,value="/risk/queryAll")@FeignClient(value="risk-service",configuration=RiskClientFallbackFactory.class)publicinterfaceRiskClient{......
  • 基于funasr+pyaudio实现电脑本地麦克风实时语音识别项目语音转文本python实现
    【框架地址】https://github.com/modelscope/FunASR【简单介绍】FunASR是一个功能全面的语音识别工具包,支持多种预训练模型的推理和微调,提供高精度和高效能的语音识别服务。结合PyAudio库,可以实现电脑本地麦克风实时语音识别项目。该项目首先通过PyAudio库捕获麦克风输入的......
  • 如何将本地时区的时间转换为特定时区的时间?
    我想在埃里温时间08:00执行该函数,但默认情况下它将在当地时间08:00执行,具体取决于服务器的位置。将来,我的服务器将多次移动到世界不同的地方,因此我需要配置所有内容,以便该功能在埃里温时间08:00准确执行if__name__=="__main__":schedule.every().day.at('08:00')......
  • 干货!全网最权威最全面介绍网络短剧上线资质以及备案流程
    今天,小编给大家详细梳理汇总一个全网最权威最全面的介绍网络微短剧上线所需要的资质,以及短剧备案流程到底是怎么样的?100%内行人实战总结的干货,希望对广大短剧从业者有所帮助。一、从事网络微短剧需要哪些资质?1、广播电视节目制作经营许可证(必备)根据《广播电视节目制作经营管......
  • 加载本地图片的方法
    文章目录1.概念介绍2.实现方法2.1主要步骤2.2注意事项3.示例代码4.内容总结我们在上一章回中介绍了"如何加载网络图片"相关的内容,本章回中将介绍如何加载本地图片.闲话休提,让我们一起TalkFlutter吧。1.概念介绍我们在上一章回中介绍的内容与图片有关,本......