Jenkins 使用 Docker 构建 Vue 项目(多阶段构建 + 构建产物导出)
在前端项目的构建与部署过程中,使用 Docker 进行隔离式构建可以带来诸多优势,例如:环境一致性、构建可复现、自动化部署等。本文将详细介绍: 如何用 Docker 构建 Vue 项目(dev 模式) 如何导出构建产物到宿主机目录 如何避免缓存导致的构建失败 并附带完整项目配置及一张构建流程图 📈 📁 目录结构概览 项目目录结构如下(简化): vue-proj...
在前端项目的构建与部署过程中,使用 Docker 进行隔离式构建可以带来诸多优势,例如:环境一致性、构建可复现、自动化部署等。本文将详细介绍: 如何用 Docker 构建 Vue 项目(dev 模式) 如何导出构建产物到宿主机目录 如何避免缓存导致的构建失败 并附带完整项目配置及一张构建流程图 📈 📁 目录结构概览 项目目录结构如下(简化): vue-proj...
WebSocket 长连接在生产环境中经常遇到意外断开的问题,主要原因是 Nginx 的默认超时配置。本文总结了 Nginx 配置 WebSocket 的关键要点和最佳实践。 核心问题 Nginx 默认的超时设置会导致 WebSocket 连接在 1-2 小时后自动断开: proxy_read_timeout: 默认 60 秒 proxy_send_timeout: 默认 6...
1. 基本概念区别 Vue插件 (Plugin) 插件是一个全局性的功能扩展包,用于为整个Vue应用添加功能。 组件二次封装 (Component Wrapper) 组件二次封装是对现有组件的再包装,增强或简化其功能。 2. 核心差异对比 维度 Vue插件 组件二次封装 作用范围 ...
Nginx 配置代理 WebSocket 的关键参数解析 在通过 Nginx 转发 WebSocket 请求(如 SignalR 或 Socket.IO)时,常见问题是连接失败或无法升级为 WebSocket 协议。本文将详细解析 WebSocket 代理中几条必不可少的配置项及其原理,帮助你顺利实现转发。 示例配置 location /gateway/ { proxy_pas...
在实际业务开发中,复杂的统计类 SQL 查询常常因为频繁的表连接和聚合操作而导致性能问题。本文通过一个真实场景的 SQL 查询,演示如何通过公共表表达式(CTE)、逻辑拆分与结构优化,有效提升查询性能。 🔍 背景与问题描述 原始 SQL 查询用于统计每个产品在仓库中的各种状态(待入库、已入库、待出库等)下的数量和箱数。由于逻辑复杂,涉及三个表的大量连接与聚合,导致执行缓慢、可维护性差。 ...
在日常的 MySQL 使用过程中,我们有时会发现一种看似反常的现象: SELECT COUNT(*) FROM table; -- 很快 SELECT COUNT(*) FROM table WHERE 条件; -- 很慢 本文以一个实际的案例为切入点,深入分析这种情况发生的原因,并给出优化策略。 🧪 1. 问题背景 我们在一张名为 warehouse_DwTransferWa...
在数据库管理中,查找包含特定值的字符串字段是一项常见需求。(比如数据维护时需要将某个字符串全部替换成另一个字符串,但是已经不记得这个字符串在那个字段)当表和字段数量众多时,手动查询效率低且容易出错。为此,本文介绍一个使用 MySQL 存储过程实现的动态搜索方案,可自动遍历当前数据库中的字符串字段,查找包含指定关键字的记录。 一、需求背景 在管理 prod_warehouse 数据库时,我...
在 ASP.NET Core 中,我们通常可以通过两种方式配置 Kestrel 服务器监听的地址和端口: 在代码中使用 options.Listen(...) 绑定 IP/端口/证书; 或者通过配置文件的 "urls" 键,例如: { "urls": "http://+:80;https://+:443" } 这种方式非常直观,特别适合部署场景,比如在 Docker ...
在国内环境中直接使用 Docker 官方源经常会遇到连接缓慢或失败的问题,因此本文将介绍如何在 Ubuntu 24.04 上通过 国内镜像源 快速且稳定地安装 Docker,并配置加速器。 一、系统准备 更新系统包 sudo apt update sudo apt upgrade -y 可选:卸载旧版本 Docker(如果之前安装过) sudo apt remove do...
在日常开发中,我们经常使用 Stopwatch 来测量代码执行的耗时。然而,在实际测试中,我们可能会遇到一些奇怪的现象,比如我最近遇到的一次实验,结果如下: void Main() { var watch = new Stopwatch(); watch.Start(); var watch2 = new Stopwatch(); watch2.S...