So I have figured out how to code a fastAPI and I am ready to deploy my script to heroku that I have worked with fastAPI (https://fastapi.tiangolo.com/) however the problem is that when I do a request to heroku it will just return:
<html>
<head>
<title>Internal Server Error</title>
</head>
<body>
<h1><p>Internal Server Error</p></h1>
</body>
</html>
Which means the script is on but I can't see the error and locally it works totally fine I would say.
I am not able to see any logs where the problem is however I would say my problem might be that I am not sure if my procfile is correct because I haven't edited it at all and I am quite new at this and I am here to ask how I am able to run my fastapi script in heroku?
What I know is that to be able to run the script, you have to use command uvicorn main:app --reload
and it won't work if you do etc py main.py
What am I doing wrong?
I've tested your setup and after some checking (never used Heroku before) I'm guessing your uvicorn never binds to the appointed port (was the heroku-cli command heroku local
working for you?)
Your Procfile could look like this;
web: uvicorn src.main:app --host=0.0.0.0 --port=${PORT:-5000}
This example assumes you have your source code within a subfolder named 'src' which has an empty __init__.py
(indicating a Python module, you probably want to add src to the PYTHONPATH instead, see app.json) and main.py
containing your fastapi app;
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}"
}
I have added this example to github which you can view on heroku (for now)