首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Heroku运行UVICORN?

如何在Heroku运行UVICORN?
EN

Stack Overflow用户
提问于 2019-12-18 11:58:22
回答 5查看 13.6K关注 0票数 23

因此,我已经知道了如何编写一个fastAPI,并且我已经准备好将我的脚本部署到与fastAPI (https://fastapi.tiangolo.com/)一起工作的heroku,但是问题是,当我向heroku发出请求时,它将返回:

代码语言:javascript
运行
复制
<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,我做错了什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-12-18 21:52:20

我已经测试了您的设置,经过一些检查(以前从未使用过Heroku ),我猜您的uvicorn从未绑定到指定的端口(heroku命令heroku local是否适合您?)

你的过程文件可能是这样的;

代码语言:javascript
运行
复制
web: uvicorn src.main:app --host=0.0.0.0 --port=${PORT:-5000}

本例假设您的源代码位于一个名为“src”的子文件夹中,其中有一个空的__init__.py (指示一个Python模块,您可能希望将src添加到PYTHONPATH中,参见app.json)和包含您的want应用程序的main.py

代码语言:javascript
运行
复制
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}"
    }

我已将此示例添加到github中,您可以在赫鲁库上查看该示例(目前)

票数 23
EN

Stack Overflow用户

发布于 2020-08-15 15:48:49

答案是正确的,但是在生产运行中使用FastAPI作为WSGIASGI workers一起运行是一个更好的选择,这就是为什么,我为这个问题运行了一个基准,下面是结果。

Gunicorn和Uvicorn工人

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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工人在一起

代码语言:javascript
运行
复制
web: gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app

纯乌维辛

代码语言:javascript
运行
复制
web: uvicorn main:app --workers 4
票数 29
EN

Stack Overflow用户

发布于 2020-01-27 11:55:52

还可以将FastAPI配置为在Gunicorn上运行,并将uvicorn作为辅助进程。下面是您可以保存在Heroku用来启动和运行应用程序的Procfile中的命令行。下面的命令将在3个辅助进程上旋转应用程序

代码语言:javascript
运行
复制
web: gunicorn -w 3 -k uvicorn.workers.UvicornWorker main:app

有关详细的一步一步的视频,您可以访问本视频教程,其中详细介绍了如何从6分钟内在Heroku上部署FastAPI。创建和部署基于Heroku的FastAPI的详细演练。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59391560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档