项目运行问题总结


一、依赖安装

问题:运行 python start_server.py 报错 No module named 'uvicorn'

原因:没装依赖

解决pip install -r requirements.txt

为什么:项目依赖 FastAPI、Celery、Redis 等第三方库,不安装就无法运行


二、.env 配置文件

问题:服务启动时显示"未设置 doubao_API_KEY"

原因aaa.env 文件名不对,代码读取的是 .env

解决ren aaa.env .env

为什么:项目代码里写死了读取 .env 文件,不是 aaa.env


三、Redis 连接

问题WinError 10061 由于目标计算机积极拒绝

原因:Redis 容器没启动,或端口没映射

解决:Docker 启动 Redis 容器 docker run -d -p 6379:6379 redis

为什么:项目用 Redis 存任务状态,不启动就连接不上


四、RabbitMQ 认证

问题ACCESS_REFUSED - Login was refused

原因:RabbitMQ 里有用户和虚拟主机,但没配置权限

解决

docker exec -it rabbitmq rabbitmqctl add_user lingyan lingyan123
docker exec -it rabbitmq rabbitmqctl add_vhost lingyan_vhost
docker exec -it rabbitmq rabbitmqctl set_permissions -p lingyan_vhost lingyan ".*" ".*" ".*"

为什么:代码里配置的是 amqp://lingyan:lingyan123@localhost:5672/lingyan_vhost,必须创建对应的用户和虚拟主机并授权


五、Celery Worker 队列监听

问题:任务进入队列了,但 Worker 不处理

原因:Worker 没指定监听哪个队列,而队列名是动态生成的(带 server_a 后缀)

解决:启动时指定队列 celery -A src.celery_app worker --queues=webly_queue_server_a

为什么get_queue_name() 函数会根据 SERVER_ID 生成完整队列名,Worker 必须监听对应的队列


六、Windows Celery 进程池权限问题

问题:Worker 报 PermissionError: [WinError 5] 拒绝访问

原因:Windows 上 billiard 多进程池有权限 bug

解决:用 solo 模式 celery -A src.celery_app worker --pool=solo

为什么:solo 模式是单进程,不依赖 billiard 的多进程机制,避免了 Windows 权限问题


完整启动流程

1. Docker 启动 Redis       →  docker run -d -p 6379:6379 redis
2. Docker 启动 RabbitMQ    →  docker run -d -p 5672:5672 -p 15672:15672 rabbitmq:management
3. 配置 RabbitMQ 用户/权限  →  三条 rabbitmqctl 命令
4. 启动 API 服务           →  python start_server.py
5. 启动 Worker             →  celery -A src.celery_app worker --pool=solo --queues=webly_queue_server_a
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐