Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Heroku上带有乌龟ORM和FastAPI的SSL错误_Python_Heroku_Fastapi_Tortoise Orm - Fatal编程技术网

Python Heroku上带有乌龟ORM和FastAPI的SSL错误

Python Heroku上带有乌龟ORM和FastAPI的SSL错误,python,heroku,fastapi,tortoise-orm,Python,Heroku,Fastapi,Tortoise Orm,我在Heroku上部署基本的FastAPI/Ortoise ORM应用程序(针对这个问题)时失败了 app/main.py读取 导入操作系统 从fastapi导入fastapi 来自tortoise.contrib.fastapi导入寄存器 app=FastAPI() 乌龟( 应用程序, db_url=os.environ.get(“数据库_url”), 模块={“模型”:[“app.models”]}, generate_schemas=True, add_exception_handlers

我在Heroku上部署基本的FastAPI/Ortoise ORM应用程序(针对这个问题)时失败了

app/main.py
读取

导入操作系统
从fastapi导入fastapi
来自tortoise.contrib.fastapi导入寄存器
app=FastAPI()
乌龟(
应用程序,
db_url=os.environ.get(“数据库_url”),
模块={“模型”:[“app.models”]},
generate_schemas=True,
add_exception_handlers=True,
)
@app.get(“/”)
def main():
返回“OK”
使用
app/models.py

来自陆龟进口车型的

类别测试(models.Model):
通过
Docker
文件是

FROM python:3.8.6-slim-buster

# create directory for the app user
RUN mkdir -p /home/app

# create the app user
RUN addgroup --system app && adduser --system --group app

# create the appropriate directories
ENV HOME=/home/app
ENV APP_HOME=/home/app/web
RUN mkdir $APP_HOME
WORKDIR $APP_HOME

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install system dependencies
RUN apt-get update \
  && apt-get -y install netcat gcc postgresql \
  && apt-get clean

# add app
COPY . .

# install python dependencies
RUN pip install --upgrade pip
RUN pip install -r requirements.txt

# chown all the files to the app user
RUN chown -R app:app $APP_HOME

# change to the app user
USER app

# run gunicorn
CMD gunicorn --bind 0.0.0.0:$PORT app.main:app -k uvicorn.workers.UvicornWorker
requirements.txt

fastapi==0.63.0
tortoise-orm[asyncpg]==0.16.19
uvicorn[standard]==0.13.1
gunicorn=20.0.4
部署后,我得到以下错误(用户和数据库都正常,我已检查)

2021-01-11T19:43:46.029946+00:00 heroku[web.1]:使用命令“/bin/sh-c gunicorn \--bind\0.0.0.0:\51457\app.main:app \-k\uvicorn.workers.UvicornWorker”启动进程`
2021-01-11T19:43:53.752383+00:00 heroku[web.1]:状态从启动更改为启动
2021-01-11T19:43:53.237242+00:00应用程序[web.1]:[2021-01-11 19:43:53+0000][5][INFO]启动gunicorn 20.0.4
2021-01-11T19:43:53.238555+00:00应用程序[web.1]:[2021-01-11 19:43:53+0000][5][INFO]收听地址:http://0.0.0.0:51457 (5)
2021-01-11T19:43:53.238813+00:00应用程序[web.1]:[2021-01-11 19:43:53+0000][5][INFO]使用worker:uvicorn.workers.UvicornWorker
2021-01-11T19:43:53.246404+00:00应用程序[web.1]:[2021-01-11 19:43:53+0000][7][INFO]带pid的引导工作程序:7
2021-01-11T19:43:54.363305+00:00应用程序[web.1]:[2021-01-11 19:43:54+0000][7][INFO]已启动服务器进程[7]
2021-01-11T19:43:54.364061+00:00应用程序[web.1]:[2021-01-11 19:43:54+0000][7][INFO]正在等待应用程序启动。
2021-01-11T19:43:54.544530+00:00应用程序[web.1]:[2021-01-11 19:43:54+0000][7][错误]回溯(最近一次呼叫最后一次):
2021-01-11T19:43:54.544535+00:00应用程序[web.1]:文件“/usr/local/lib/python3.8/site packages/starlette/routing.py”,第526行,使用寿命
2021-01-11T19:43:54.544537+00:00应用程序[web.1]:在自我寿命上下文(应用程序)中对项目进行异步:
2021-01-11T19:43:54.544538+00:00应用程序[web.1]:文件“/usr/local/lib/python3.8/site packages/starlette/routing.py”,第467行,默认使用寿命
2021-01-11T19:43:54.544539+00:00应用程序[web.1]:等待自我启动()
2021-01-11T19:43:54.544539+00:00应用程序[web.1]:文件“/usr/local/lib/python3.8/site packages/starlette/routing.py”,第502行,在启动中
2021-01-11T19:43:54.544540+00:00应用程序[web.1]:等待处理程序()
2021-01-11T19:43:54.544540+00:00应用程序[web.1]:文件“/usr/local/lib/python3.8/site packages/tortoise/contrib/fastapi/_uuuinit_uu.py”,第92行,初始格式
2021-01-11T19:43:54.544540+00:00应用程序[web.1]:等待Tortoise.init(config=config,config\u file=config\u file,db\u url=db\u url,modules=modules)
2021-01-11T19:43:54.544541+00:00应用程序[web.1]:文件“/usr/local/lib/python3.8/site packages/tortoise/___;u.py”,第593行,在init中
2021-01-11T19:43:54.544541+00:00应用程序[web.1]:等待cls.初始化连接(连接配置,创建数据库)
2021-01-11T19:43:54.544541+00:00应用程序[web.1]:文件“/usr/local/lib/python3.8/site packages/tortoise/__init_uuu.py”,第390行,in_init_connections
2021-01-11T19:43:54.544542+00:00应用程序[web.1]:等待连接。创建连接(使用\u db=True)
2021-01-11T19:43:54.544543+00:00应用程序[web.1]:文件“/usr/local/lib/python3.8/site packages/tortoise/backends/asyncpg/client.py”,第94行,在create_connection中
2021-01-11T19:43:54.544543+00:00应用程序[web.1]:self.\u pool=wait asyncpg.create\u pool(无,密码=self.password,**self.\u模板)
2021-01-11T19:43:54.544544+00:00应用程序[web.1]:文件“/usr/local/lib/python3.8/site packages/asyncpg/pool.py”,第398行,在异步初始化中__
2021-01-11T19:43:54.544544+00:00应用程序[web.1]:等待自我
2021-01-11T19:43:54.544544+00:00应用程序[web.1]:文件“/usr/local/lib/python3.8/site packages/asyncpg/pool.py”,第426行,在
2021-01-11T19:43:54.544545+00:00应用程序[web.1]:等待第一次连接
2021-01-11T19:43:54.544545+00:00应用程序[web.1]:文件“/usr/local/lib/python3.8/site packages/asyncpg/pool.py”,第125行,在connect中
2021-01-11T19:43:54.544545+00:00应用程序[web.1]:self.\u con=wait self.\u pool.\u get\u new\u connection()
2021-01-11T19:43:54.544546+00:00应用程序[web.1]:文件“/usr/local/lib/python3.8/site packages/asyncpg/pool.py”,第468行,在“获取新连接”中
2021-01-11T19:43:54.544546+00:00应用程序[web.1]:con=wait connection.connect(
2021-01-11T19:43:54.544547+00:00应用程序[web.1]:文件“/usr/local/lib/python3.8/site packages/asyncpg/connection.py”,第1718行,在connect中
2021-01-11T19:43:54.544547+00:00应用程序[web.1]:返回等待连接实用程序(
2021-01-11T19:43:54.544548+00:00应用程序[web.1]:文件“/usr/local/lib/python3.8/site packages/asyncpg/connect_utils.py”,第663行,in_connect
2021-01-11T19:43:54.544548+00:00应用程序[web.1]:con=wait\u connect\u addr(
2021-01-11T19:43:54.544548+00:00应用程序[web.1]:文件“/usr/local/lib/python3.8/site packages/asyncpg/connect\u utils.py”,第642行,在“connect\u addr”中
2021-01-11T19:43:54.544549+00:00应用程序[web.1]:等待异步。等待(已连接,超时=超时)
2021-01-11T19:43:54.544549+00:00应用程序[web.1]:文件“/usr/local/lib/python3.8/asyncio/tasks.py”,第491行,等待
2021-01-11T19:43:54.544549+00:00应用程序[web.1]:返回未来结果()
2021-01-11T19:43:54.544551+00:00应用程序[web.1]:asyncpg.exceptions.InvalidauthorizationSpecification错误:主机“54.198.69.158”、用户“mjvjvasulvwdtk”、数据库“d96hv3qhpn6k5b”、SSL关闭没有pg_hba.conf条目
2021-01-11T19:43:54.544551+00:00应用程序[web.1]:
2021-01-11T19:43:54.545043+00:00应用程序[web.1]:[2021-01-11 19:43:54+0000][7][错误]应用程序启动失败。正在退出。
2021-01-11T19:43:54.545451+00:00应用程序[web.1]:[2021-01-11 19:43:54+0000][7][INFO]工人退出(pid:7)
2021-01-11T19:43:54.845958+00:00应用程序[web.1]:[2021-01-11 19:43:54+0000][12][INFO]带pid的引导工作程序:12
我在和找到了Heroku的指南,但我不知道如何添加
sslmode=require<
import re
import ssl
from fastapi import FastAPI
from tortoise.contrib.fastapi import register_tortoise

config = re.match("postgres://(.*?):(.*?)@(.*?)/(.*)", URI)
DB_USER, DB_PASS, DB_HOST, DB = config.groups()

context = ssl.create_default_context(cafile="./rds-combined-ca-bundle.pem")
context.check_hostname = False
context.verify_mode = ssl.CERT_NONE

db_config = {
    "connections": {
        "default": {
            "engine": "tortoise.backends.asyncpg",
            "credentials": {
                "database": DB,
                "host": DB_HOST.split(":")[0],
                "password": DB_PASS,
                "port": int(DB_HOST.split(":")[1]),
                "user": DB_USER,
                "ssl": context,  # Here we pass in the SSL context
            },
        }
    },
    "apps": {
        "models": {
            "models": ["app.models"],
            "default_connection": "default",
        }
    },
}
app = FastAPI()
register_tortoise(app, config=db_config)