refactor: 统一路由参数格式为花括号并更新部署说明
将路由参数从 `:id` 和 `:key` 格式统一为 `{id}` 和 `{key}` 格式
更新 build.sh 脚本以优先使用实际 .env 文件,并同步更新部署说明文档
This commit is contained in:
@ -32,11 +32,11 @@ cp "$BACKEND_DIR/target/release/qiandao" "$BUNDLE_DIR/backend/"
|
|||||||
mkdir -p "$BUNDLE_DIR/frontend"
|
mkdir -p "$BUNDLE_DIR/frontend"
|
||||||
cp -r "$FRONTEND_DIR/dist" "$BUNDLE_DIR/frontend/"
|
cp -r "$FRONTEND_DIR/dist" "$BUNDLE_DIR/frontend/"
|
||||||
|
|
||||||
# 环境变量示例(如存在,优先示例文件,否则复制现有 .env)
|
# 环境变量文件:优先复制实际 .env;若不存在则用 .env.example 作为 .env
|
||||||
if [[ -f "$ROOT_DIR/.env.example" ]]; then
|
if [[ -f "$ROOT_DIR/.env" ]]; then
|
||||||
cp "$ROOT_DIR/.env.example" "$BUNDLE_DIR/backend/.env.example"
|
|
||||||
elif [[ -f "$ROOT_DIR/.env" ]]; then
|
|
||||||
cp "$ROOT_DIR/.env" "$BUNDLE_DIR/backend/.env"
|
cp "$ROOT_DIR/.env" "$BUNDLE_DIR/backend/.env"
|
||||||
|
elif [[ -f "$ROOT_DIR/.env.example" ]]; then
|
||||||
|
cp "$ROOT_DIR/.env.example" "$BUNDLE_DIR/backend/.env"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 生成部署说明
|
# 生成部署说明
|
||||||
@ -46,7 +46,7 @@ cat > "$BUNDLE_DIR/README_DEPLOY.md" << 'EOF'
|
|||||||
## 内容结构
|
## 内容结构
|
||||||
- backend/: 后端二进制与环境变量
|
- backend/: 后端二进制与环境变量
|
||||||
- qiandao: 后端二进制
|
- qiandao: 后端二进制
|
||||||
- .env 或 .env.example: 环境变量文件
|
- .env: 环境变量文件(若为空,请复制并编辑)
|
||||||
- frontend/: 前端静态资源
|
- frontend/: 前端静态资源
|
||||||
- dist/: 生产构建后的静态文件
|
- dist/: 生产构建后的静态文件
|
||||||
|
|
||||||
@ -54,6 +54,8 @@ cat > "$BUNDLE_DIR/README_DEPLOY.md" << 'EOF'
|
|||||||
```bash
|
```bash
|
||||||
cd backend
|
cd backend
|
||||||
chmod +x ./qiandao
|
chmod +x ./qiandao
|
||||||
|
# 如需自定义端口或数据库,修改 .env 或以环境变量覆盖:
|
||||||
|
# SERVER_ADDR=0.0.0.0:3001 DATABASE_URL=... JWT_SECRET=... ./qiandao
|
||||||
./qiandao
|
./qiandao
|
||||||
```
|
```
|
||||||
后端默认监听端口:`3001`
|
后端默认监听端口:`3001`
|
||||||
@ -82,11 +84,11 @@ server {
|
|||||||
```
|
```
|
||||||
|
|
||||||
## 环境变量
|
## 环境变量
|
||||||
将 `.env` 放在 `backend/` 目录或系统环境中。确保配置正确的 MySQL、Redis、JWT 等。
|
将 `.env` 放在 `backend/` 目录或系统环境中。确保配置正确的 MySQL、JWT 等。
|
||||||
|
|
||||||
## 注意事项
|
## 注意事项
|
||||||
- 前端构建后产物在 `frontend/dist`,直接静态托管即可。
|
- 前端构建后产物在 `frontend/dist`,直接静态托管即可。
|
||||||
- 后端为单个二进制,无需额外依赖(运行期需 MySQL/Redis 服务)。
|
- 后端为单个二进制,无需额外依赖(运行期需 MySQL 服务)。
|
||||||
- 若需使用 Docker,请联系生成生产用 Dockerfile 与 compose。
|
- 若需使用 Docker,请联系生成生产用 Dockerfile 与 compose。
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
|||||||
@ -29,8 +29,8 @@ async fn main() {
|
|||||||
.route("/", get(root))
|
.route("/", get(root))
|
||||||
.route("/api/attendees", post(routes::create_attendee))
|
.route("/api/attendees", post(routes::create_attendee))
|
||||||
.route("/api/attendees", get(routes::get_attendees))
|
.route("/api/attendees", get(routes::get_attendees))
|
||||||
.route("/api/attendees/:id", get(routes::get_attendee))
|
.route("/api/attendees/{id}", get(routes::get_attendee))
|
||||||
.route("/api/attendees/:id/checkin", post(routes::checkin_attendee))
|
.route("/api/attendees/{id}/checkin", post(routes::checkin_attendee))
|
||||||
.route("/api/attendees/batch-delete", delete(routes::batch_delete_attendees))
|
.route("/api/attendees/batch-delete", delete(routes::batch_delete_attendees))
|
||||||
.route("/api/attendees/batch-reset-checkin", post(routes::batch_reset_checkin))
|
.route("/api/attendees/batch-reset-checkin", post(routes::batch_reset_checkin))
|
||||||
.route("/api/attendees/import", post(routes::import_attendees_from_excel))
|
.route("/api/attendees/import", post(routes::import_attendees_from_excel))
|
||||||
@ -38,8 +38,8 @@ async fn main() {
|
|||||||
.route("/api/auth/register", post(routes::register_user))
|
.route("/api/auth/register", post(routes::register_user))
|
||||||
.route("/api/auth/login", post(routes::login_user))
|
.route("/api/auth/login", post(routes::login_user))
|
||||||
.route("/api/config", get(routes::get_configs))
|
.route("/api/config", get(routes::get_configs))
|
||||||
.route("/api/config/:key", get(routes::get_config))
|
.route("/api/config/{key}", get(routes::get_config))
|
||||||
.route("/api/config/:key", put(routes::update_config))
|
.route("/api/config/{key}", put(routes::update_config))
|
||||||
.layer(CorsLayer::new().allow_origin(Any).allow_methods(Any).allow_headers(Any))
|
.layer(CorsLayer::new().allow_origin(Any).allow_methods(Any).allow_headers(Any))
|
||||||
.with_state(db);
|
.with_state(db);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user