import uvicorn import logging import sys import os from app.utils.config import get_settings, validate_api_key, validate_qcloud_config from app.database import engine def check_dependencies(): """检查依赖项是否正确安装""" try: import dashscope print(f"已加载 DashScope 版本: {getattr(dashscope, '__version__', '未知')}") except ImportError as e: print(f"错误: 无法导入 dashscope 模块: {str(e)}") print("请确保已正确安装 dashscope: pip install -U dashscope") return False try: from qcloud_cos import CosConfig print("已加载腾讯云 COS SDK") except ImportError as e: print(f"警告: 无法导入腾讯云 COS SDK: {str(e)}") print("腾讯云 COS 相关功能可能无法使用") print("请确保已正确安装: pip install -U cos-python-sdk-v5 qcloud-python-sts") try: import sqlalchemy print(f"已加载 SQLAlchemy 版本: {sqlalchemy.__version__}") import pymysql print(f"已加载 PyMySQL 版本: {pymysql.__version__}") except ImportError as e: print(f"错误: 无法导入数据库模块: {str(e)}") print("请确保已正确安装: pip install -U sqlalchemy pymysql") return False return True def check_database_connection(): """检查数据库连接""" try: settings = get_settings() # 尝试连接数据库 with engine.connect() as connection: print(f"成功连接到数据库: {settings.db_name}") return True except Exception as e: print(f"警告: 无法连接到数据库: {str(e)}") print("请确保MySQL服务已启动,并且数据库配置正确") print("您可以使用以下命令创建数据库:") settings = get_settings() print(f"CREATE DATABASE {settings.db_name} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;") print(f"GRANT ALL PRIVILEGES ON {settings.db_name}.* TO '{settings.db_user}'@'%' IDENTIFIED BY '{settings.db_password}';") print("FLUSH PRIVILEGES;") # 询问是否继续 if input("是否继续启动应用程序?(y/n): ").lower() not in ["y", "yes"]: return False return True if __name__ == "__main__": try: # 检查依赖项 if not check_dependencies(): sys.exit(1) # 验证API密钥是否配置 validate_api_key() # 验证腾讯云配置 try: validate_qcloud_config() print("腾讯云COS配置已验证") except ValueError as e: print(f"警告: {str(e)}") print("腾讯云COS相关功能可能无法正常使用,但应用程序将继续启动") # 检查数据库连接 if not check_database_connection(): sys.exit(1) # 获取配置 settings = get_settings() # 配置日志级别 log_level = getattr(logging, settings.log_level.upper(), logging.INFO) logging.basicConfig(level=log_level) # 启动服务器 print(f"启动服务,访问地址: http://{settings.host}:{settings.port}") uvicorn.run( "app.main:app", host=settings.host, port=settings.port, reload=settings.debug, log_level=settings.log_level.lower() ) except Exception as e: logging.error(f"启动失败: {str(e)}") if hasattr(e, "__traceback__"): import traceback traceback.print_exception(type(e), e, e.__traceback__) exit(1)