From e962798f4637273d519d60053304425c9733e823 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 30 Jan 2026 03:51:01 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20Linux=20watch=20?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E5=AE=9A=E4=BD=8D=E4=BB=93=E5=BA=93=E6=A0=B9?= =?UTF-8?q?=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/watch-adminapi-forlinux.sh | 37 ++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/scripts/watch-adminapi-forlinux.sh b/scripts/watch-adminapi-forlinux.sh index 23ba2d9..d2c9fca 100755 --- a/scripts/watch-adminapi-forlinux.sh +++ b/scripts/watch-adminapi-forlinux.sh @@ -5,7 +5,6 @@ set -euo pipefail trap 'echo "发生错误:${BASH_COMMAND}" >&2' ERR script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -repo_root="$(cd "${script_dir}/.." && pwd)" container_name="${CONTAINER_NAME:-takeout.api.admin}" docker_network="${DOCKER_NETWORK:-web_apps}" @@ -16,11 +15,35 @@ nuget_volume="${NUGET_VOLUME:-takeout-nuget}" project_path="${PROJECT_PATH:-src/Api/TakeoutSaaS.AdminApi/TakeoutSaaS.AdminApi.csproj}" environment="${ASPNETCORE_ENVIRONMENT:-Development}" +repo_root="${REPO_ROOT:-}" +if [ -z "${repo_root}" ]; then + candidate_dir="${script_dir}" + for _ in 0 1 2 3 4 5; do + if [ -f "${candidate_dir}/${project_path}" ]; then + repo_root="${candidate_dir}" + break + fi + + if [ -f "${candidate_dir}/AdminApi/${project_path}" ]; then + repo_root="${candidate_dir}/AdminApi" + break + fi + + candidate_dir="$(cd "${candidate_dir}/.." && pwd)" + done +fi + +if [ -z "${repo_root}" ] || [ ! -f "${repo_root}/${project_path}" ]; then + echo "未找到 AdminApi 仓库根目录(缺少 ${project_path}),请设置 REPO_ROOT 或在包含 AdminApi 目录的父级目录中运行该脚本。" >&2 + exit 1 +fi + echo "工作目录:${repo_root}" echo "使用 SDK 镜像:${sdk_image}" echo "容器:${container_name} 端口:${host_port}:${container_port} 网络:${docker_network}" +echo "项目:${project_path} 环境:${environment}" -# Ensure network exists (so it can talk to other services like postgres/redis on the same network). +# 1. (空行后) 确保 network 存在(用于连接同网络内的 postgres/redis 等依赖) if [ -n "${docker_network}" ]; then if ! docker network inspect "${docker_network}" >/dev/null 2>&1; then echo "Docker network 不存在,正在创建:${docker_network}" @@ -28,13 +51,13 @@ if [ -n "${docker_network}" ]; then fi fi -# Persist NuGet cache across container restarts to speed up restore/build. +# 2. (空行后) 持久化 NuGet 缓存,加速 restore/build if ! docker volume inspect "${nuget_volume}" >/dev/null 2>&1; then echo "NuGet volume 不存在,正在创建:${nuget_volume}" docker volume create "${nuget_volume}" >/dev/null fi -# Replace existing container (if any). +# 3. (空行后) 替换旧容器(如存在) if docker ps -a --format '{{.Names}}' | grep -qx "${container_name}"; then echo "发现旧容器,正在移除:${container_name}" docker rm -f "${container_name}" >/dev/null @@ -55,9 +78,9 @@ docker run -d --name "${container_name}" \ -e ASPNETCORE_ENVIRONMENT="${environment}" \ -e ASPNETCORE_URLS="http://+:${container_port}" \ -e DOTNET_USE_POLLING_FILE_WATCHER=1 \ + -e DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER=1 \ "${sdk_image}" \ - dotnet watch --project "${project_path}" run + dotnet watch --project "${project_path}" run --no-launch-profile echo "已启动。查看日志:docker logs -f ${container_name}" -echo "Swagger:http://localhost:${host_port}/swagger" - +echo "Swagger:http://localhost:${host_port}/api/docs (兼容入口 /swagger)"