部署React+FastAPI应用至Heroku时遭遇uvicorn命令未找到错误
部署React+FastAPI前后端分离应用到Heroku时uvicorn命令找不到的问题
错误日志
2024-02-27T15:49:03.606270+00:00 heroku[web.2]: Starting process with command `uvicorn main:app --host=0.0.0.0 --port=${PORT:-5000}` 2024-02-27T15:49:05.246060+00:00 app[web.2]: /bin/bash: line 1: uvicorn: command not found 2024-02-27T15:49:05.330951+00:00 heroku[web.2]: Process exited with status 127 2024-02-27T15:49:05.374072+00:00 heroku[web.2]: State changed from starting to crashed
相关配置文件
Procfile
web: uvicorn main:app --host=0.0.0.0 --port=${PORT:-5000}
main.py核心代码
import os from typing import List, Optional from fastapi import FastAPI, Request from fastapi.responses import StreamingResponse from fastapi.middleware.cors import CORSMiddleware from pydantic import BaseModel import openai from openai import OpenAIError from dotenv import load_dotenv load_dotenv() app = FastAPI() app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) ... 其他代码 ... if __name__ == '__main__': import uvicorn uvicorn.run(app, host='0.0.0.0', port=5000)
requirements.txt
openai==1.10.0 fastapi==0.104.1 pydantic==2.4.2 pydantic_core==2.10.1 typing_extensions==4.5.0 python-dotenv==1.0.0 requests==2.30.0 urllib3==2.0.2 uvicorn==0.23.2 yarl==1.9.2 Werkzeug==2.0.1 gunicorn==21.2.0
问题背景
本地运行正常,部署到Heroku时仅安装了React依赖,未安装Python依赖,出现uvicorn命令找不到的错误。
解决建议
确保Heroku识别Python环境
Heroku通过根目录下的requirements.txt和Procfile判定Python应用身份。如果之前仅部署前端,需重新提交包含这两个文件的完整代码到Git仓库,触发Heroku的Python依赖安装流程。改用Python模块方式启动uvicorn
修改Procfile,通过Python模块调用uvicorn,避免环境路径问题:web: python -m uvicorn main:app --host=0.0.0.0 --port=${PORT:-5000}检查部署流程与构建包
- 确认
requirements.txt未被.gitignore忽略,已提交至Git。 - 查看Heroku部署日志,确认是否存在
Installing dependencies from requirements.txt步骤。若没有,需添加Python和Node.js构建包:
可通过heroku buildpacks:add heroku/python heroku buildpacks:add heroku/nodejsheroku buildpacks命令查看已安装的构建包。 - 前后端同仓部署时,在前端
package.json中添加heroku-postbuild脚本处理前端构建:"scripts": { "build": "react-scripts build", "heroku-postbuild": "npm install && npm run build" }
- 确认
切换为gunicorn管理进程
生产环境推荐用gunicorn搭配uvicorn worker,稳定性更高,也能规避命令路径问题,修改Procfile为:web: gunicorn main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind=0.0.0.0:${PORT:-5000}
内容的提问来源于stack exchange,提问作者logisticregress
相关产品推荐
相关产品推荐

