Files
asd-backend/deploy.sh
Milky0217 61b1174b30 fix: 统一字段命名为 camelCase 并修复详情 API
- models.rs: 将 inspectiontype/assignmentnumber 的 serde rename 改为
  inspectionType/assignmentNumber,与前端 TypeScript 接口保持一致
- models.rs: 为 WeatherDataBrief 添加 isFavorite 字段支持
- models.rs: WeatherData.is_favorite 添加 skip_deserializing 避免 POST
  请求解析失败,同时使用 default 处理数据库 NULL 值
- handlers/weather.rs: get_weather_details 支持 string 和 number 类型的
  id 参数解析
- IMPROVEMENTS.md: 新增第十三章记录本次对话经验(serde 配置、config
  路径解析、TOML 结构等)
2026-04-17 20:47:00 +08:00

93 lines
2.5 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
PROJECT_NAME="rust-backend"
REMOTE_USER="root"
REMOTE_HOST="1panel-server"
APP_ENV="${1:-production}"
# 根据环境选择远程目录和服务
case "${APP_ENV}" in
development)
REMOTE_DIR="/root/rust/rust_backend_dev"
SERVICE_NAME="rust-backend-dev.service"
;;
production)
REMOTE_DIR="/root/rust/rust_backend"
SERVICE_NAME="rust-backend.service"
;;
*)
echo "无效的环境: ${APP_ENV}"
echo "支持的環境: development, production"
exit 1
;;
esac
log_info() {
echo -e "\033[32m[INFO]\033[0m $1"
}
log_error() {
echo -e "\033[31m[ERROR]\033[0m $1" >&2
exit 1
}
check_dependencies() {
local deps=("cargo" "rsync" "ssh")
for cmd in "${deps[@]}"; do
if ! command -v "$cmd" &> /dev/null; then
log_error "依赖命令 '$cmd' 未找到,请先安装。"
fi
done
log_info "所有依赖项检查通过。"
}
build_project() {
log_info "开始编译项目 (release模式),环境=${APP_ENV}..."
if APP_ENV="${APP_ENV}" cargo build --release; then
log_info "项目编译成功。"
else
log_error "项目编译失败!"
fi
}
upload_binary() {
local binary_path="./target/release/${PROJECT_NAME}"
if [ ! -f "$binary_path" ]; then
log_error "编译产物未找到: $binary_path"
fi
log_info "正在上传二进制文件到 ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}..."
rsync -avzP --progress "$binary_path" "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/"
log_info "文件上传成功。"
}
upload_config() {
log_info "正在上传配置文件到 ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/config/..."
rsync -avzP --progress ./config/ "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/config/"
log_info "配置文件上传成功。"
}
restart_remote_service() {
log_info "正在重启远程服务 '${SERVICE_NAME}'..."
if ssh "${REMOTE_USER}@${REMOTE_HOST}" "systemctl restart ${SERVICE_NAME}"; then
log_info "远程服务重启成功。"
else
log_error "远程服务重启失败!请检查服务状态和日志。"
fi
}
main() {
log_info "========== 开始部署 (环境: ${APP_ENV}) =========="
log_info "远程目录: ${REMOTE_DIR}"
log_info "服务名称: ${SERVICE_NAME}"
check_dependencies
build_project
upload_binary
upload_config
restart_remote_service
log_info "========== 部署完成! =========="
}
main