# main.py import sys import os from pathlib import Path # 添加项目根目录到Python路径 project_root = Path(__file__).parent.parent src_root = Path(__file__).parent sys.path.insert(0, str(project_root)) sys.path.insert(0, str(src_root)) # 确保当前工作目录是项目根目录 os.chdir(project_root) # 打印调试信息 print(f"项目根目录: {project_root}") print(f"Python路径: {sys.path}") print(f"当前工作目录: {os.getcwd()}") # 测试导入配置模块 try: from config.settings import settings print("[OK] 配置模块导入成功") except ImportError as e: print(f"[FAIL] 配置模块导入失败: {e}") # 列出当前目录内容 print("当前目录内容:") for item in os.listdir('.'): print(f" - {item}") # 列出config目录内容 if os.path.exists('config'): print("config目录内容:") for item in os.listdir('config'): print(f" - {item}") raise from fastapi import FastAPI from fastapi.staticfiles import StaticFiles from fastapi.templating import Jinja2Templates import asyncio from api.routes import router from api.auth_routes import router as auth_router from api.inventory import inventory_router from utils.logger import setup_logging from database.init_db import init_database setup_logging() app = FastAPI( title="Gemold - 模具制造管理系统", description="模具制造行业综合管理平台,包含模具分析、进销存管理等功能", version="4.0.0" ) # 启动时初始化数据库和RustFS @app.on_event("startup") async def startup_event(): """应用启动时初始化数据库和RustFS""" # 初始化数据库 success = await init_database() if success: print("[OK] 数据库初始化成功") else: print("[FAIL] 数据库初始化失败,服务将继续运行但数据库功能不可用") # 初始化RustFS连接 try: from storage.rustfs_storage import rustfs_manager from config.settings import settings await rustfs_manager.connect( endpoint=settings.RUSTFS_ENDPOINT, access_key=settings.RUSTFS_ACCESS_KEY, secret_key=settings.RUSTFS_SECRET_KEY, timeout=settings.RUSTFS_TIMEOUT ) print("[OK] RustFS连接成功") except Exception as e: print(f"[FAIL] RustFS连接失败: {e}") print("[WARN] 文件上传功能将不可用,但其他功能正常") # 创建必要目录 UPLOAD_DIR = Path("uploads") UPLOAD_DIR.mkdir(exist_ok=True) TEMPLATES_DIR = Path("templates") TEMPLATES_DIR.mkdir(exist_ok=True) STATIC_DIR = Path("static") STATIC_DIR.mkdir(exist_ok=True) HTML_OUTPUT_DIR = Path("html_output") HTML_OUTPUT_DIR.mkdir(exist_ok=True) # 挂载静态文件 import os # 使用当前工作目录下的static文件夹 static_dir = os.path.join(os.getcwd(), "static") app.mount("/static", StaticFiles(directory=static_dir), name="static") # 挂载HTML输出目录 html_output_dir = os.path.join(os.getcwd(), "html_output") app.mount("/html", StaticFiles(directory=html_output_dir), name="html") app.include_router(auth_router) app.include_router(inventory_router) app.include_router(router, prefix="/api") @app.get("/health") @app.post("/health") async def health(): from database.database import db_manager return { "status": "healthy", "service": "gemold", "version": "4.0.0", "database_connected": db_manager.is_connected } @app.get("/") async def root(): from fastapi.responses import FileResponse return FileResponse(os.path.join(os.getcwd(), "static", "index.html")) @app.get("/moldinsight") async def moldinsight(): from fastapi.responses import FileResponse return FileResponse(os.path.join(os.getcwd(), "static", "index.html")) @app.get("/inventory") async def inventory(): from fastapi.responses import FileResponse return FileResponse(os.path.join(os.getcwd(), "static", "index.html")) @app.get("/users") async def users(): from fastapi.responses import FileResponse return FileResponse(os.path.join(os.getcwd(), "static", "index.html")) if __name__ == "__main__": import uvicorn from config.settings import settings print("启动 Gemold 模具制造管理系统 v4.0...") print(f"访问 http://localhost:{settings.PORT}") print("功能模块:") print(" - 首页仪表盘") print(" - 用户管理") print(" - MoldInsight 模具分析") print(" - 进销存管理") uvicorn.run( "main:app", host=settings.HOST, port=settings.PORT, reload=True )