因此,我已经知道了如何编写一个fastAPI,并且我已经准备好将我的脚本部署到与fastAPI (https://fastapi.tiangolo.com/)一起工作的heroku,但是问题是,当我向heroku发出请求时,它将返回:
<html>
<head>
<title>Internal Server Error</title>
</head>
<body>
<h1><p>Internal Server Error</p></h1>
</body>
</html>这意味着脚本是打开的,但我看不到错误,在本地,我会说,它工作得很好。
但是,我无法看到任何日志中的问题所在,但我的问题可能是,我不确定我的procfile是否正确,因为我根本没有编辑它,而且我在这方面非常新,我在这里是想问我如何能够在heroku运行我的快速文件脚本?
我所知道的是,要能够运行脚本,您必须使用命令uvicorn main:app --reload,如果您这样做,它将不能工作,py main.py,我做错了什么?
发布于 2019-12-18 21:52:20
我已经测试了您的设置,经过一些检查(以前从未使用过Heroku ),我猜您的uvicorn从未绑定到指定的端口(heroku命令heroku local是否适合您?)
你的过程文件可能是这样的;
web: uvicorn src.main:app --host=0.0.0.0 --port=${PORT:-5000}本例假设您的源代码位于一个名为“src”的子文件夹中,其中有一个空的__init__.py (指示一个Python模块,您可能希望将src添加到PYTHONPATH中,参见app.json)和包含您的want应用程序的main.py;
import socket
import sys
from fastapi import FastAPI
app = FastAPI()
hostname = socket.gethostname()
version = f"{sys.version_info.major}.{sys.version_info.minor}"
@app.get("/")
async def read_root():
return {
"name": "my-app",
"host": hostname,
"version": f"Hello world! From FastAPI running on Uvicorn. Using Python {version}"
}发布于 2020-08-15 15:48:49
答案是正确的,但是在生产运行中使用FastAPI作为WSGI与ASGI workers一起运行是一个更好的选择,这就是为什么,我为这个问题运行了一个基准,下面是结果。
Gunicorn和Uvicorn工人
Requests per second: 8665.48 [#/sec] (mean)
Concurrency Level: 500
Time taken for tests: 0.577 seconds
Complete requests: 5000
Time per request: 57.700 [ms] (mean)纯Uvicorn
Requests per second: 3200.62 [#/sec] (mean)
Concurrency Level: 500
Time taken for tests: 1.562 seconds
Complete requests: 5000
Time per request: 156.220 [ms] (mean)如您所见,、RPS(每秒请求)、和每个请求的响应时间都有很大的差异。
过程文件
与Uvicorn工人在一起
web: gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app纯乌维辛
web: uvicorn main:app --workers 4发布于 2020-01-27 11:55:52
还可以将FastAPI配置为在Gunicorn上运行,并将uvicorn作为辅助进程。下面是您可以保存在Heroku用来启动和运行应用程序的Procfile中的命令行。下面的命令将在3个辅助进程上旋转应用程序
web: gunicorn -w 3 -k uvicorn.workers.UvicornWorker main:app有关详细的一步一步的视频,您可以访问本视频教程,其中详细介绍了如何从6分钟内在Heroku上部署FastAPI。创建和部署基于Heroku的FastAPI的详细演练。
https://stackoverflow.com/questions/59391560
复制相似问题