【问题标题】:Uvicorn suddenly throwing 500 Internal Server errorUvicorn 突然抛出 500 Internal Server 错误
【发布时间】:2021-09-10 08:09:19
【问题描述】:

通过测试驱动 dot io 上的使用 FastAPI 和 Docker 的测试驱动开发课程,我突然收到来自 Uvicorn 的 500 Internal Server 错误。我在 git 中有我的代码,所以我很确定那里没有不应该的更改。任何帮助表示赞赏:

这是来自 docker 容器的堆栈跟踪:

ERROR:uvicorn.error:Exception in ASGI application

Traceback (most recent call last):

File "/usr/local/lib/python3.9/site-packages/uvicorn/protocols/http/h11_impl.py", line 369, in run_asgi

result = await app(self.scope, self.receive, self.send)

File "/usr/local/lib/python3.9/site-packages/uvicorn/middleware/proxy_headers.py", line 59, in __call__

return await self.app(scope, receive, send)

File "/usr/local/lib/python3.9/site-packages/fastapi/applications.py", line 199, in __call__

await super().__call__(scope, receive, send)

File "/usr/local/lib/python3.9/site-packages/starlette/applications.py", line 112, in __call__

await self.middleware_stack(scope, receive, send)

File "/usr/local/lib/python3.9/site-packages/starlette/middleware/errors.py", line 181, in __call__

raise exc from None

File "/usr/local/lib/python3.9/site-packages/starlette/middleware/errors.py", line 159, in __call__

await self.app(scope, receive, _send)

File "/usr/local/lib/python3.9/site-packages/starlette/exceptions.py", line 82, in __call__

raise exc from None

File "/usr/local/lib/python3.9/site-packages/starlette/exceptions.py", line 71, in __call__

await self.app(scope, receive, sender)

File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 580, in __call__

await route.handle(scope, receive, send)

File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 241, in handle

await self.app(scope, receive, send)

File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 52, in app

response = await func(request)

File "/usr/local/lib/python3.9/site-packages/fastapi/routing.py", line 201, in app

raw_response = await run_endpoint_function(

File "/usr/local/lib/python3.9/site-packages/fastapi/routing.py", line 148, in run_endpoint_function

return await dependant.call(**values)

File "./app/api/summaries.py", line 22, in create_summary

summary_id = await crud.post(payload)

File "./app/api/crud.py", line 15, in post

await summary.save()

File "/usr/local/lib/python3.9/site-packages/tortoise/models.py", line 923, in save

await executor.execute_insert(self)

File "/usr/local/lib/python3.9/site-packages/tortoise/backends/base/executor.py", line 203, in execute_insert

insert_result = await self.db.execute_insert(self.insert_query, values)

File "/usr/local/lib/python3.9/site-packages/tortoise/backends/asyncpg/client.py", line 38, in translate_exceptions_

raise OperationalError(exc)

tortoise.exceptions.OperationalError: relation "textsummary" does not exist

【问题讨论】:

  • 这是错误:tortoise.exceptions.OperationalError: relation "textsummary" does not exist。这可能是您的数据库中缺少一列或拼写错误。

标签: fastapi uvicorn testdriven.io


【解决方案1】:

应该是您的数据库架构有问题。我想乌龟 orm 正在尝试在您的汇总表中插入新数据,但“textsummary”(与其他表的字段/关系)不存在。尝试检查您的架构并进行迁移。

如果您使用 db 和 app 构建新的 docker 容器,请确保在容器构建期间执行迁移脚本

【讨论】:

  • 谢谢 digoya 我认为问题还好。我不明白为什么这是一个问题,因为我没有更改架构并且我已经删除了本地图像等并重建了它们。基本上是一个菜鸟,但为什么我在挣扎。把它留给我,我会努力解决的,当我找到问题的根源时,我会在这里发布。
  • 我相信这可能会对你有所帮助:link Docker 可能会在重建容器时删除现有数据库。因此,重建后,您将获得新鲜和清晰的数据库。要保留数据库文件,您可以在 docker-compose.yaml 中指定外部卷
  • 是的,你是正确的。首先对延误表示歉意。我花了一个星期的假期,没有带笔记本电脑。第二。是的,作为课程的一部分,架构创建被移出启动,原因很明显,需要明确创建。现在全部排序。
  • 我正在学习相同的教程并且遇到了同样的问题。这个答案解决了我的问题,我还想补充一点,以在我们运行的本教程中运行迁移:docker-compose exec web python app/db.py
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-16
  • 1970-01-01
  • 2011-06-08
  • 1970-01-01
  • 1970-01-01
  • 2017-09-06
  • 2021-07-02
相关资源
最近更新 更多