105 lines
3.6 KiB
Python
105 lines
3.6 KiB
Python
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) |