在ubuntu20.04+系统部署VUE及Django项目的过程记录——以腾讯云为例
目录
- 1. 需求
- 2. 项目准备
- 3. VUE CLI项目部署
- 3.1 部署前的准备
- 3.1.1 后端通信路由修改
- 3.1.2 导航修改
- 3.2 构建项目
- 3.3 配置nginx代理
- 4. 后端配置
- 4.1 其他依赖项
- 4.2 单次执行测试
- 4.3 创建Systemd 服务文件
- 4.4 配置 Nginx 作为反向代理
- 5. 其他注意事项
1. 需求
近期做一些简单工程开发基本都采用的VUE-Django框架,需要部署在单位服务器或腾讯云服务器,步骤稍微有些杂,容易忘,每次都得问LLM,故做此记录,以供参考。
2. 项目准备
如何创建VUE及Django项目,此博客不做阐述。
3. VUE CLI项目部署
3.1 部署前的准备
将本地写的vue cli项目整个打包到服务器。
3.1.1 后端通信路由修改
我这里用的是VUE CLI
。在.vue
文件中,若有前后段数据传输或函数调用,一定记得在script
中把路由该一下,不能是本地的127.0.0.1
,若服务器地址是43.***.**.63
,则需要换成这个地址,最好直接用域名。
例如:
const response = await fetch('http://127.0.0.1:8000/api/journal/');
就需要改为:
const response = await fetch('https://i...s.cn/api/journal/');
8000 被移除,因为 Nginx 通常会配置为监听 80 (HTTP) 或 443 (HTTPS) 端口,并将请求代理到后端的 8000 端口。如果你的服务器配置了 HTTPS,应使用 https://。
可以导航到相应的目录下,执行以下代码查看哪些文件包含127.0.0.1
grep -rl '127.0.0.1' .
如果使用诸如const response = await axios.get('/api/email/history')
就不会有这个问题。
3.1.2 导航修改
找到vue cli项目根目录下的vue.config.js
文件,如下:
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({transpileDependencies: true,devServer: {port: 8080},// 新增:配置 htmlWebpackPlugin 的选项chainWebpack: config => {config.plugin('html').tap(args => {args[0].title = '标题'; // 设置网页标题return args;});},publicPath: '/xb/' // 添加这一行
})
需要新增 publicPath: '/xb/'
找到文件/src/router/index.js
,底部添加:
const router = createRouter({history: createWebHistory('/xb/'),routes
})
找到文件src/main.js
找到设置 Axios baseURL 的行:
查找类似 axios.defaults.baseURL = 'http://43.×××.××.63'
的代码。
修改为正确的 HTTPS 地址和域名:
// 推荐使用域名并确保协议是 https
axios.defaults.baseURL = 'https://i...s.cn'
执行npm run build
.
3.2 构建项目
在VUE CLI目录下执行npm run build
构建项目,会生成dist
目录。
3.3 配置nginx代理
在路径/etc/nginx/sites-available
下新建一个配置文件,如果不新建可以都写在default
中,但太多容易乱。更推荐新建一个。
比如,我新建了一个i...s.cn
(我的域名),然后写入配置:
# HTTP Redirect for i...s.cn
server {listen 80;listen [::]:80;server_name i...s.cn www.i...s.cn;return 301 https://$host$request_uri;
}# HTTPS Configuration for i...s.cn
server {listen 443 ssl http2;listen [::]:443 ssl http2;server_name i...s.cn www.i...s.cn;ssl_certificate /www/server/panel/vhost/cert/i...s.cn/fullchain.pem;ssl_certificate_key /www/server/panel/vhost/cert/i...s.cn/privkey.pem;# 1. i...s.cn 官方网站根目录root /www/wwwroot/i...s.cn;index index.html index.htm index.php;# 2. pdf_download 配置(在该域名下的其他目录网站)location /pdf_download/ {alias /www/wwwroot/i...s.cn/pdf_download/;index dashboard.html;autoindex off;}# 3. vue 应用配置 (部署在 /xb/ 路径下)location /xuebao/ {alias /www/wwwroot/i...s.cn/xb/vue/dist/;index index.html index.htm;try_files $uri $uri/ /xb/index.html;}# 处理官方网站根路径和其他未匹配的路径location / {try_files $uri $uri/ /index.php?$args;}# 处理 PHP 文件请求 (如果官方网站需要)location ~ \.php$ {include snippets/fastcgi-php.conf;fastcgi_pass unix:/tmp/php-cgi-80.sock; # 请确认此路径是否正确fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}# 访问和错误日志access_log /var/log/nginx/i...s.cn.access.log;error_log /var/log/nginx/i...s.cn.error.log;
}
}
因为是新建的配置文件,需要执行
sudo ln -s /etc/nginx/sites-available/i...s.cn /etc/nginx/sites-enabled/i...s.cn
以及重启nginx
sudo nginx -t
、sudo systemctl reload nginx
重启之后,访问相应URL,前端页面显示正常。
若要关闭nginx服务,执行sudo systemctl stop nginx
4. 后端配置
这里后端采用的是django,django环境安装不再赘述。
这里需要注意,在正式配置后端之前,一定要在django项目的settings.py中修改以下配置:
- DEBUG = False
- ALLOWED_HOSTS添加自己的域名
4.1 其他依赖项
这里的HTTP服务器我选择Gunicorn。
若没有执行pip install gunicorn
4.2 单次执行测试
可先单独执行django,确保没有因为环境问题造成的bug。
切换到django目录下,执行gunicorn --bind 127.0.0.1:8000 qk.wsgi:application
看到类似以下信息,则没有问题:
gunicorn --bind 127.0.0.1:8000 qk.wsgi:application
[2025-04-16 22:02:35 +0800] [2812697] [INFO] Starting gunicorn 23.0.0
[2025-04-16 22:02:35 +0800] [2812697] [INFO] Listening at: http://127.0.0.1:8000 (2812697)
[2025-04-16 22:02:35 +0800] [2812697] [INFO] Using worker: sync
[2025-04-16 22:02:35 +0800] [2812698] [INFO] Booting worker with pid: 2812698
ctrl+c
停止手动运行的Gunicorn。
4.3 创建Systemd 服务文件
这是让 Django (通过 Gunicorn) 在后台运行、开机自启、并在失败时自动重启的关键。
sudo nano /etc/systemd/system/自定义命名.service
粘贴配置以下内容
[Unit]
Description=gunicorn daemon for qk Django project
After=network.target # 表示在网络可用后启动[Service]
# === 修改为你运行代码的用户和组 ===
User=ubuntu # 创建的专用用户
Group=ubuntu # 用户同名组# === 修改为你的 Django 项目根目录 ===
WorkingDirectory=/www/wwwroot/....# === 修改为你的 Python 环境中 gunicorn 和 python 的绝对路径 ===
ExecStart=/home/ubuntu/anaconda3/envs/ser/bin/gunicorn --workers 3 --bind 127.0.0.1:8000 qk.wsgi:application \--access-logfile /var/log/gunicorn/gunicorn-qk-access.log \--error-logfile /var/log/gunicorn/gunicorn-qk-error.logRestart=always # 如果服务退出,总是尝试重启
RestartSec=10 # 重启前等待 10 秒
KillSignal=SIGQUIT # 使用 SIGQUIT 平滑关闭 Gunicorn
TimeoutStopSec=5 # 等待 5 秒后强制关闭
PrivateTmp=true # 使用私有临时目录[Install]
WantedBy=multi-user.target # 表示服务应该在多用户模式下启用
!!注意,不要有行末注释,我这里是为了解释,配置文件删掉#,不然后续会报错!!
User / Group: 运行 Gunicorn 进程的用户和组。非常重要! 确保这个用户对项目目录 (WorkingDirectory) 和虚拟环境有读取权限,并且对日志目录 (如果使用) 有写入权限。ubuntu 和 www-data 是常见的选择,但最好使用权限受限的专用用户。
修改好配置文件之后,执行:
- 重新加载 Systemd 配置: 让 Systemd 读取你新创建的服务文件。
sudo systemctl daemon-reload
- 启动Gunicorn服务:
sudo systemctl start 自定义.service
- 检查服务状态:
sudo systemctl status gunicorn-qk.service
若出现Active: active (running) since Wed 2025-04-16 22:16:16 CST; 28s ago
即为成功
如果失败,可检查日志错误信息。sudo journalctl -u gunicorn-qk.service -n 50 --no-pager
- 设置开机自启动
sudo systemctl enable gunicorn-qk.service
4.4 配置 Nginx 作为反向代理
Django 需要写进 Nginx 的配置文件。Gunicorn 服务正在监听 127.0.0.1:8000,这个地址只能从服务器内部访问。 VUE 前端通过公网 IP 发送请求。Nginx 需要知道:当收到指向 /api/ 的请求时,应该将这个请求转发给内部运行在 127.0.0.1:8000 的 Gunicorn 服务。
需要在/etc/nginx/sites-available/i...s.cn
文件的 server { … } 块(监听 443 端口的那个)中添加或修改一个 location /api/ { … } 块。
location /api/ {proxy_pass http://127.0.0.1:8000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
5. 其他注意事项
- 关于嵌套/嵌入式前端应用部署
- 问题:当一个预构建的前端应用(应用 B)被嵌入到另一个前端应用(应用 A)的子目录下时,应用 B 内部引用的静态资源(JS, CSS)路径可能因部署路径改变而失效 (404)。
- 解决:必须为嵌入的应用(应用 B)在其构建配置中明确指定最终的、绝对的部署路径(例如,如果应用 A 在 /app-a/,应用 B 在其下,则路径为 /app-a/app-b/),然后重新构建应用 B。将新构建的产物替换应用 A 中的旧版本(public中),并(如果需要)重新构建应用 A。
- 关于前端 API 请求 URL
- 问题:在 HTTPS 页面中硬编码使用 HTTP 协议或 IP 地址的 API 请求 URL,会导致 “Mixed Content” 安全错误或请求失败。直接在组件中写死 URL 也容易出错且不利于维护。
- 解决:确保所有 API 请求均使用正确的协议 (通常是 HTTPS) 和主机名 (域名)。最佳实践是配置并统一使用一个全局 HTTP 请求库实例(如 Axios),为其设置正确的 baseURL (包含协议和域名),然后在组件代码中仅使用相对路径(如 /api/data)发起请求。
- 如何更新服务(在修改代码后):
- 后端 (Django/Gunicorn): 修改 Python 代码 (如 views.py, models.py, settings.py) 后,重启 Gunicorn 服务:
sudo systemctl restart gunicorn-qk.service
,gunicorn-qk.service
是自定义的名字。 - 前端 (VUE): 修改前端源代码 (如 .vue, .js, .css) 后,需要重新构建项目,并将新生成的 dist 文件部署:
npm run build
(Nginx 通常不需要重启或重新加载,因为它会自动提供 dist 目录下的新文件。只有在修改 Nginx 配置文件本身时才需要 sudo systemctl reload nginx)
- 后端 (Django/Gunicorn): 修改 Python 代码 (如 views.py, models.py, settings.py) 后,重启 Gunicorn 服务:
- 查看日志命令
-
后端 (Django/Gunicorn):查看 Gunicorn 错误日志 (主要看 Python/Django 错误):
sudo tail -n 50 /var/log/gunicorn/gunicorn-qk-error.log # 实时查看: sudo tail -f /var/log/gunicorn/gunicorn-qk-error.log
-
查看 Gunicorn 访问日志 (看哪些请求到了后端):
sudo tail -n 50 /var/log/gunicorn/gunicorn-qk-access.log # 实时查看: sudo tail -f /var/log/gunicorn/gunicorn-qk-access.log
-
查看 Systemd 服务日志 (看服务启动/停止状态):
sudo journalctl -u gunicorn-qk.service -n 50 --no-pager # 实时查看: sudo journalctl -u gunicorn-qk.service -f
-
前端 (VUE / Nginx):查看 VUE 运行时错误 (JS 错误): 在浏览器开发者工具 (F12) 的 “Console” (控制台) 查看。查看 Nginx 错误日志 (Nginx 配置、权限错误):
sudo tail -n 50 /var/log/nginx/insightlens.cn.error.log # 实时查看: sudo tail -f /var/log/nginx/insightlens.cn.error.log
-
查看 Nginx 访问日志 (看浏览器请求记录,包括静态文件和 API 代理):
sudo tail -n 50 /var/log/nginx/insightlens.cn.access.log # 实时查看: sudo tail -f /var/log/nginx/insightlens.cn.access.log
-
- 取消systemctl自启动:
关闭自启动:sudo systemctl disable gunicorn-qk.service
停止当前服务并防止它因被kill
而重启:
不要直接用kill
命令。应该使用systemd
的命令来停止它:
sudo systemctl stop gunicorn-qk.service
相关文章:
在ubuntu20.04+系统部署VUE及Django项目的过程记录——以腾讯云为例
目录 1. 需求2. 项目准备3. VUE CLI项目部署3.1 部署前的准备3.1.1 后端通信路由修改3.1.2 导航修改 3.2 构建项目3.3 配置nginx代理 4. 后端配置4.1 其他依赖项4.2 单次执行测试4.3 创建Systemd 服务文件4.4 配置 Nginx 作为反向代理 5. 其他注意事项 1. 需求 近期做一些简单…...
解决前端vue项目在linux上,npm install,node-sass 安装失败的问题
Unable to save binary /var/lib/jenkins/workspace/xxx/node_modules/node-sass/vendor/linux-x64-72 : Error: EACCES: permission denied, mkdir ‘/var/lib/jenkins/workspace/x/node_modules/node-sass/vendor’ 这个是node-sass安装失败导致的。 #将npm的默认仓库更改为…...
FPGA_YOLO(四)用HLS实现循环展开以及存储模块
Vivado HLS(High-Level Synthesis,高层次综合)是赛灵思(Xilinx)在其 Vivado 设计套件 中提供的一款工具,用于将 高级编程语言(如 C、C、SystemC) 直接转换为 硬件描述语言࿰…...
用户组与用户
用户组管理: 创建用户组: groupadd 用户组名 删除用户组: groupdel 用户组名 用户管理: 创建用户 useradd [-g -d] 用户名 -g:指定用户的组 -d:指定用户的home路径,如果不加上&…...
npm install 报错常见的解决方法
npm install 报错的情况有很多种,每种错误的具体解决方案也有所不同。这里我将汇总一些常见的npm install报错及其解决办法: 1. 下载速度慢/网络问题 解决办法:更换npm包的镜像源至国内镜像,如淘宝npm镜像:npm confi…...
暂存一下等会写
#include<easyx.h> IMAGE SNOW 图形变量 struct MOVE生存结构体 {int x0;int y0; bool livefalse;}; initgraph(800, 800);初始化图形界面 MOVE snowflake[5000];目标数量 loadimage(&SNOW, "snow.png");加载图片 BeginBatchDraw(); 开始批量绘图。…...
C语言 —— 指尖跃迁 刻印永恒 - 文件操作
目录 1. 什么是文件 1.1 程序文件 1.2 数据文件 1.3 文件名 2. 二进制文件和文本文件 3. 文件的打开与关闭 3.1 流和标准流 3.2 文件指针 3.3 文件的打开与关闭 fopen fclose 4. 文件的顺序读写 4.1 fgetc和fputc fgetc fputc 4.2 fgets和fputs fgets fputs…...
第二章 DQL查询语句
第一章:基础查询 一、SELECT 语句 作用 SELECT 语句用于从数据库中选取数据。 结果被存储在一个结果表中,称为结果集。 语法 SELECT column1, column2, … FROM table_name; 与 SELECT * FROM table_name; 参数说明: column1, column2, …...
系统与网络安全------弹性交换网络(1)
资料整理于网络资料、书本资料、AI,仅供个人学习参考。 Trunk原理与配置 Trunk原理概述 Trunk(虚拟局域网中继技术)是指能让连接在不同交换机上的相同VLAN中的主机互通。 VLAN内通信 实现跨交换的同VLAN通信,通过Trunk链路&am…...
有哪些哲学流派适合创业二
好的,让我们更深入地探讨如何将哲学与数学深度融合,构建一套可落地的创业操作系统。以下从认知框架、决策引擎、执行算法三个维度展开,包含具体工具和黑箱拆解: 一、认知框架:用哲学重构商业本质 1. 本体…...
Python(18)Python中JSON的妙用:详解序列化与反序列化原理及实战案例
目录 一、背景:为什么Python需要JSON?二、核心技术解析:序列化与反序列化2.1 核心概念2.2 类型映射对照表 三、Python操作JSON的四大核心方法3.1 基础方法库3.2 方法详解1. json.dumps()2. json.loads()3. json.dump()4. json.load() 四、实战…...
Nautilus 正式发布:为 Sui 带来可验证的链下隐私计算
作为 Sui 安全工具包中的强大新成员,Nautilus 现已上线 Sui 测试网。它专为 Web3 开发者打造,支持保密且可验证的链下计算。Nautilus 应用运行于开发者自主管理的可信执行环境(Trusted Execution Environment,TEE)中&a…...
投资理财_从0到1:如何用1000元开启你的二级市场投资之旅?
投资理财_从0到1:如何用1000元开启你的二级市场投资之旅? 一、前言:投资不是赌博,而是科学与艺术的结合1.1 为什么学习二级市场投资?1.2 本篇博客的目标 二、投资的基本概念:先搞清楚“玩的是什么”2.1 二级…...
有没有适合企业用的局域网即时通讯聊天工具?
随着信息安全问题的日益凸显,用户对于即时通讯工具的安全性与隐私保护提出了更高的要求。 强大的即时通讯能力 BeeWorks提供了专业的IM即时通讯能力,支持多种消息类型,包括文字、语音、图片和文件等,满足不同场景下的沟通需求。…...
Web3技术如何提升用户数据保护
在这个信息爆炸的时代,用户数据保护已成为全球关注的焦点。Web3 技术,作为下一代互联网的代表,以其去中心化、安全性和用户主权等特点,为用户数据保护提供了新的解决方案。本文将探讨 Web3 技术如何提升用户数据保护。 去中心化存…...
CANoe自动化测试用例log保存(专栏:车载网络诊断测试攻略从零开始搭建一个UDS诊断自动化测试CANoe工程)
文章目录 前言实现思路以及对应的CAPL代码1.获取cfg工程路径2.获取系统时间3.html报告路径4.log路径5.保存报告6.用例示例在汽车电子系统的开发与测试中,CANoe作为主流的仿真测试工具,其自动化测试用例生成的Log是问题追溯、合规审计和数据分析的核心依据。然而,许多团队因日…...
理解 results = model(source, stream=True) 的工作原理和优势
1. 核心概念解析 (1) streamTrue 的作用 生成器模式:当处理视频或图像序列时,streamTrue 会将结果包装成一个 生成器(Generator),逐帧生成 Results 对象,而不是一次性返回所有结果。内存优化:…...
# 手写数字识别:使用PyTorch构建MNIST分类器
手写数字识别:使用PyTorch构建MNIST分类器 在这篇文章中,我将引导你通过使用PyTorch框架构建一个简单的神经网络模型,用于识别MNIST数据集中的手写数字。MNIST数据集是一个经典的机器学习数据集,包含了60,000张训练图像和10,000张…...
ios app的ipa文件提交最简单的方法
ipa文件是ios的app打包后生成的二级制文件,在上架app store connect或做testflight测试的时候,它提示我们需要使用xcode、transporter或xcode命令行等方式来上传。 而xcode、transporter或xcode命令行的安装都需要使用mac电脑,假如没有mac电…...
与/或形演绎推理——基于王永庆著《人工智能原理与方法》的深度解析
前文,我们已经写了两种演绎推理:自然演绎推理和归结演绎推理。 自然演绎推理:自然演绎推理——基于王永庆著《人工智能原理与方法》的深度解析-CSDN博客 归结演绎推理:归结演绎推理——基于王永庆著《人工智能原理与方法》的深度…...
【Qt】Qt 按钮控件详解,PushButton,RadioButton,CheckBox,ToolButton
🍑个人主页:Jupiter. 🚀 所属专栏:QT 欢迎大家点赞收藏评论😊 目录 📚按钮类控件🍑Push Button 🥥Radio Buttion🍃click, press, release, toggled 的区别🍁…...
跨平台开发选Java还是C?应用场景与性能深度对比
🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:AI 【前言】 在计算机技术快速发展的今天,跨平台开发已经成为众多开发者的核心需求。Java和C作为两种历史悠…...
Node.js 的定义、用途、安装方法
关于 Node.js 的定义、用途、安装方法,以及为什么不能使用 DOM、BOM 和与浏览器不同的顶级对象的简明总结: 💡 一、Node.js 的定义 Node.js 是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境,它让 JavaScript 不再局限于浏览…...
5、Props:组件间的密语——React 19 数据传递全解
一、密语启封:咒语学徒的困惑 "教授,我的魔法傀儡为什么总是不听指令?"年轻的学徒举着发光的魔杖,组件树中的傀儡们却像打人柳一样混乱。"记住,艾薇,"赫敏的魔杖在空中划出金色数据流…...
LangGraph中预构件,creat_react_agent的实现流程
LangGraph Prebuilt Agent 流程图 本文档展示了LangGraph的prebuilt模块中Agent的实现流程,重点是create_react_agent函数构建的代理系统流程和结构。 ReAct Agent构建流程 #mermaid-svg-ubcEEuBeApApT624 {font-family:"trebuchet ms",verdana,arial,s…...
python-将文本生成音频
将文本生成音频通常需要结合 文本转语音(TTS,Text-to-Speech) 工具或库来实现,比如 Google TTS (gtts)、Amazon Polly、Microsoft Azure TTS 等。 一、使用 Google TTS (gtts) 将文本生成音频 gtts 是一个简单易用的 Python 库&a…...
【虚幻C++笔记】接口
目录 概述创建接口 概述 简单的说,接口提供一组公共的方法,不同的对象中继承这些方法后可以有不同的具体实现。任何使用接口的类都必须实现这些接口。实现解耦解决多继承的问题 创建接口 // Fill out your copyright notice in the Description page o…...
白酒制造主数据管理全链路解析:业务重塑与AI赋能
作为中国消费领域的支柱产业之一,白酒行业在消费升级、渠道多元化的浪潮下,企业正面临库存积压、串货乱价、质量追溯难等核心痛点。如何通过主数据管理实现业务全链路的标准化与智能化,已成为行业数字化转型的关键命题。 01政策背景与行业现…...
Java与C在典型场景下的性能对比深度剖析
🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:AI 【前言】 在计算机编程领域,Java和C语言都是举足轻重的编程语言。Java以其跨平台性、自动内存管理和丰富…...
基于springboot+vue的数码产品抢购系统
开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9 系统展示 系统首页 商品信…...
芯片封装制造技术分析
封装技术正由单一防护功能向集成化系统发展,核心需统筹电气参数、热耗散能力与生产成本之间的关系。 一、技术定义与基础功能 芯片封装指通过特定制程将半导体晶片封装于保护结构内的技术,核心作用包括: 环境隔离:阻隔机械冲击、…...
Linux:Makefile
编译器gcc 使用方式:gcc [ 选项 ] 要编译的⽂件 [ 选项 ] [ ⽬标⽂件 ] 编译分为以下几个步骤: 1.预处理(进⾏宏替换) 预处理功能主要包括宏定义,⽂件包含,条件编译,去注释等。 预处理指令是以#号开头的代码⾏。 实例: gcc –E hello.c –o hello…...
下篇:《高阶排序算法:分治思想与性能突破》
个人主页:strive-debug 1. 堆排序(Heap Sort) - **核心思想**:利用 **大根堆(升序)** 或 **小根堆(降序)** 进行选择排序。 - **关键步骤**: 1. **建堆**(…...
5G时代,视频分析设备平台EasyCVR实现通信基站远程安全便捷管控
一、背景介绍 随着移动通信行业的快速发展,各大运营商不断建设越来越多的无人值守通信基站。这些基站大多位于偏远地区,人烟稀少且交通不便,给日常维护带来了许多不便。特别是安装在空旷地带的基站设备,如空调、蓄电池等…...
第 4 篇:Motion 拖拽与手势动画(交互篇)—— 打造直觉化交互体验
Framer Motion 的拖拽与手势系统让实现复杂交互变得异常简单。本文将深入解析核心 API,并通过实战案例演示如何创造自然流畅的交互体验。 🧲 拖拽动画基础 1. 启用拖拽 使用 drag 属性即可开启拖拽能力。支持的值有:true(全方向…...
TDengine 语言连接器(R语言)
简介 R 语言是一种用于统计分析、绘图和数据挖掘的编程语言和软件环境 。 TDengine 支持 R 语言访问 TDengine 数据库,通过 R 语言中的 RJDBC 库可以使 R 语言程序支持访问 TDengine 数据。 以下是安装过程、配置过程以及 R 语言示例代码。 安装过程 在开始之前&…...
Vue Router(3)- 历史记录模式、路由元信息
历史记录模式 Vue Router 支持多种历史管理模式,主要区别在于 URL 的表现形式和页面刷新/直接访问时的处理方式。 如果需要最好的兼容性或没有服务器配置权限,使用 Hash 模式 如果需要干净的 URL 并能配置服务器,使用 History 模式ÿ…...
android studio 运行java main报错
运行某个带main函数的java文件报错 Could not create task :app:Test.main(). > SourceSet with name main not found. 解决办法:在工程的.idea/gradle.xml 文件下添加: <option name"delegatedBuild" value"false" /&g…...
TDengine 3.3.6.3 虚拟表简单验证
涛思新出的版本提供虚拟表功能,完美解决了多值窄表查询时需要写程序把窄表变成宽表的处理过程,更加优雅。 超级表定义如下: CREATE STABLE st01 (ts TIMESTAMP,v0 INT,v1 BIGINT,v2 FLOAT,v3 BOOL) TAGS (device VARCHAR(32),vtype VARCHAR(…...
什么是进程?
目录 冯诺依曼体系 操作系统(OperatorSystem) 设计OS的目的 进程 task_struct 操作 /proc文件夹 父子进程 创建子进程 了解进程之前,我们先说说冯诺依曼体系结构,这是计算机硬件方面的知识。 冯诺依曼体系 我们常见的计算机,如笔记…...
mysql备份存储过程、函数和事件
背景 今天还原mysql数据库备份发现,数据库中没有存储过程和函数,虽然不推荐研发使用数据库的函数、存储过程,但还是免不了有人偶尔使用,所以整理备份和还原策略。 数据库备份 mysqldump -u user -p --routines --triggers --ev…...
【正点原子STM32MP257连载】第五章 ATK-DLMP257B文件系统简介 #文件系统 #SSH
1)实验平台:正点原子ATK-DLMP257B开发板 2)浏览产品:https://www.alientek.com/Product_Details/135.html 3)全套实验源码手册视频下载:正点原子资料下载中心 文章目录 第五章 ATK-DLMP257B文件系统简介5.1…...
实战5:Python使用循环神经网络生成诗歌
实战5:Python使用循环神经网络生成诗歌 使用依赖加载数据词典构建和文本预处理总代码 在我们学习了课程8后,我们在实战练习一个例子。 你的主要任务:学习如何使用简单的循环神经网络(Vanilla RNN)生成诗歌。亚历山大谢…...
【网络安全】谁入侵了我的调制解调器?(二)
文章目录 针对 TR-069 协议 REST API 的攻击思路攻击百万台调制解调器意外发现 Cox 后端 API 的授权绕过漏洞确认我们能够进入任何人的设备访问和更新任何Cox商业客户账户通过泄露的加密密钥覆盖任何人的设备设置执行对任何调制解调器的命令影响最后想说阅读本文前,请先行浏览…...
当纺织车间遇上“数字魔法”--天拓四方飞鸟物联平台+边缘计算采集网关的智造革命
在传统印象里,纺织车间总是机器轰鸣、纱线纷飞,工人穿梭其间手动调整参数,次品率全凭经验“拿捏”。但如今,某纺织龙头企业的智能工厂里,一台台纺织机像被施了“聪明咒”,自己会“说话”、会“思考”&#…...
基于PLC的停车场车位控制系统的设计
2.1 设计目标 本课题为基于PLC的停车场车位控制系统来设计,在此将功能确定如下: 针对8个车位的停车场进行设计将停车场分为入口处,车位处、以及出口处三个部分;每个车位都有指示灯指示当前位置是否空闲,方便司机查找空…...
ios接入穿山甲【Swift】
1.可接入的广告,点击右下角查看接入文档 https://www.csjplatform.com/union/media/union/download/groMore 2.进入接入文档,选择最新版本进行接入 pod Ads-CN-Beta,6.8.0.2pod GMGdtAdapter-Beta, 4.15.22.0pod GDTMobSDK,4.15.30pod KSAdSDK,3.3.74.0p…...
【iOS】OC高级编程 iOS多线程与内存管理阅读笔记——自动引用计数(二)
自动引用计数 前言ARC规则所有权修饰符**__strong修饰符**__weak修饰符__unsafe_unretained修饰符__autoreleasing修饰符 规则属性数组 前言 上一篇我们主要学习了一些引用计数方法的内部实现,现在我们学习ARC规则。 ARC规则 所有权修饰符 OC中,为了处…...
智能语音识别+1.2用SAPI实现文本转语音(100%教会)
欢迎来到智能语音识别系列的第二篇文章. 上一篇文章的地址在这:智能语音处理1.1下载需要的库(100%实现)-CSDN博客 想必上一篇的操作(文本转语音)已经成功实现了 接下来,我们要学习用SAPI技术去实现文本转语音 一.简单介绍SAPI技术 SAPI是架构在COM基础上的,微软…...
Unity导出微信小游戏后无法调起移动端输入框
参考官方demo 参考demo https://gitee.com/wechat-minigame/minigame-unity-webgl-transform/tree/main/Demo/API_V2 里面有对输入文本框适配的处理方法,还有一些其他功能展示 1 使用Unity打开/Demo/API目录,API示例开发版本为Unity 2022.3.14f1。 2 若…...