将 FastAPI 部署到 Heroku 失败

时间:2021-07-31 09:50:09

标签: python heroku fastapi

不幸的是,在最基本的层面上,我无法让 FastAPI 在 Heroku 上运行。 我用最简单的 FastAPI“hello world”测试试了一下:

from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
    return {"message": "Hello World"}

并创建了一个 procfile 说

web: uvicorn app.main:app --host=0.0.0.0 --port=${PORT}

当我上传到 heroku 时,它失败了。这就是堆栈跟踪所说的

2021-07-31T09:40:34.704775+00:00 heroku[web.1]: Starting process with command `uvicorn app.main:app --host=0.0.0.0 --port=${PORT}`
2021-07-31T09:40:37.288571+00:00 app[web.1]: INFO:     Uvicorn running on http://0.0.0.0:44195 (Press CTRL+C to quit)
2021-07-31T09:40:37.296205+00:00 app[web.1]: INFO:     Started parent process [4]
2021-07-31T09:40:37.525612+00:00 app[web.1]: Process SpawnProcess-1:
2021-07-31T09:40:37.526386+00:00 app[web.1]: Process SpawnProcess-2:
2021-07-31T09:40:37.527100+00:00 app[web.1]: Traceback (most recent call last):
2021-07-31T09:40:37.527209+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/multiprocessing/process.py", line 315, in _bootstrap
2021-07-31T09:40:37.527211+00:00 app[web.1]: self.run()
2021-07-31T09:40:37.527211+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/multiprocessing/process.py", line 108, in run
2021-07-31T09:40:37.527212+00:00 app[web.1]: self._target(*self._args, **self._kwargs)
2021-07-31T09:40:37.527217+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/uvicorn/subprocess.py", line 76, in subprocess_started
2021-07-31T09:40:37.527218+00:00 app[web.1]: target(sockets=sockets)
2021-07-31T09:40:37.527222+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/uvicorn/server.py", line 50, in run
2021-07-31T09:40:37.527223+00:00 app[web.1]: loop.run_until_complete(self.serve(sockets=sockets))
2021-07-31T09:40:37.527223+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete
2021-07-31T09:40:37.527223+00:00 app[web.1]: return future.result()
2021-07-31T09:40:37.527224+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/uvicorn/server.py", line 57, in serve
2021-07-31T09:40:37.527224+00:00 app[web.1]: config.load()
2021-07-31T09:40:37.527224+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/uvicorn/config.py", line 318, in load
2021-07-31T09:40:37.527225+00:00 app[web.1]: self.loaded_app = import_from_string(self.app)
2021-07-31T09:40:37.527227+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/uvicorn/importer.py", line 25, in import_from_string
2021-07-31T09:40:37.527228+00:00 app[web.1]: raise exc from None
2021-07-31T09:40:37.527256+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/uvicorn/importer.py", line 22, in import_from_string
2021-07-31T09:40:37.527257+00:00 app[web.1]: module = importlib.import_module(module_str)
2021-07-31T09:40:37.527258+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/importlib/__init__.py", line 127, in import_module
2021-07-31T09:40:37.527258+00:00 app[web.1]: return _bootstrap._gcd_import(name[level:], package, level)
2021-07-31T09:40:37.527261+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
2021-07-31T09:40:37.527263+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
2021-07-31T09:40:37.527287+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 972, in _find_and_load_unlocked
2021-07-31T09:40:37.527288+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
2021-07-31T09:40:37.527290+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
2021-07-31T09:40:37.527314+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
2021-07-31T09:40:37.527314+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked
2021-07-31T09:40:37.527367+00:00 app[web.1]: ModuleNotFoundError: No module named 'app'
2021-07-31T09:40:37.527910+00:00 app[web.1]: Traceback (most recent call last):
2021-07-31T09:40:37.527967+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/multiprocessing/process.py", line 315, in _bootstrap
2021-07-31T09:40:37.527968+00:00 app[web.1]: self.run()
2021-07-31T09:40:37.527968+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/multiprocessing/process.py", line 108, in run
2021-07-31T09:40:37.527968+00:00 app[web.1]: self._target(*self._args, **self._kwargs)
2021-07-31T09:40:37.527969+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/uvicorn/subprocess.py", line 76, in subprocess_started
2021-07-31T09:40:37.527969+00:00 app[web.1]: target(sockets=sockets)
2021-07-31T09:40:37.527970+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/uvicorn/server.py", line 50, in run
2021-07-31T09:40:37.527970+00:00 app[web.1]: loop.run_until_complete(self.serve(sockets=sockets))
2021-07-31T09:40:37.527973+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete
2021-07-31T09:40:37.527974+00:00 app[web.1]: return future.result()
2021-07-31T09:40:37.527974+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/uvicorn/server.py", line 57, in serve
2021-07-31T09:40:37.527974+00:00 app[web.1]: config.load()
2021-07-31T09:40:37.527976+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/uvicorn/config.py", line 318, in load
2021-07-31T09:40:37.527977+00:00 app[web.1]: self.loaded_app = import_from_string(self.app)
2021-07-31T09:40:37.527980+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/uvicorn/importer.py", line 25, in import_from_string
2021-07-31T09:40:37.527980+00:00 app[web.1]: raise exc from None
2021-07-31T09:40:37.528003+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/site-packages/uvicorn/importer.py", line 22, in import_from_string
2021-07-31T09:40:37.528003+00:00 app[web.1]: module = importlib.import_module(module_str)
2021-07-31T09:40:37.528004+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.9/importlib/__init__.py", line 127, in import_module
2021-07-31T09:40:37.528004+00:00 app[web.1]: return _bootstrap._gcd_import(name[level:], package, level)
2021-07-31T09:40:37.528004+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
2021-07-31T09:40:37.528007+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
2021-07-31T09:40:37.528028+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 972, in _find_and_load_unlocked
2021-07-31T09:40:37.528029+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
2021-07-31T09:40:37.528029+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
2021-07-31T09:40:37.528029+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
2021-07-31T09:40:37.528032+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked
2021-07-31T09:40:37.528079+00:00 app[web.1]: ModuleNotFoundError: No module named 'app'
2021-07-31T09:40:40.000000+00:00 app[api]: Build succeeded
2021-07-31T09:41:35.219634+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2021-07-31T09:41:35.296804+00:00 heroku[web.1]: Stopping process with SIGKILL
2021-07-31T09:41:35.390303+00:00 heroku[web.1]: Process exited with status 137
2021-07-31T09:41:35.469715+00:00 heroku[web.1]: State changed from starting to crashed
cat ^C

我似乎无法弄清楚出了什么问题。 代码可以在这里找到: https://github.com/hdsjulian/linkage-fastapi/

1 个答案:

答案 0 :(得分:1)

在与您的 procfile 相同的目录中没有名为 app 的文件夹。将您的 procfile 更改为此

web: uvicorn main:app --host=0.0.0.0 --port=${PORT}