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