web-dev-qa-db-fra.com

Comment exécuter UVICORN dans Heroku?

J'ai donc compris comment coder un fastAPI et je suis prêt à déployer mon script sur heroku que j'ai travaillé avec fastAPI ( https://fastapi.tiangolo.com/ ) mais le problème est que quand je fais une demande à heroku, il revient simplement:

<html>
  <head>
    <title>Internal Server Error</title>
  </head>
  <body>
    <h1><p>Internal Server Error</p></h1>

  </body>
</html>

Ce qui signifie que le script est activé mais je ne peux pas voir l'erreur et localement cela fonctionne parfaitement, je dirais.

Je ne suis pas en mesure de voir les journaux où se trouve le problème, mais je dirais que mon problème pourrait être que je ne suis pas sûr si mon procfile est correct car je Je ne l'ai pas du tout édité et je suis assez nouveau dans ce domaine et je suis ici pour demander comment je suis capable d'exécuter mon script fastapi dans heroku?

Ce que je sais, c'est que pour pouvoir exécuter le script, vous devez utiliser la commande uvicorn main:app --reload et cela ne fonctionnera pas si vous faites etc py main.py Qu'est-ce que je fais mal?

6
Thrillofit86

J'ai testé votre configuration et après quelques vérifications (jamais utilisé Heroku auparavant), je suppose que votre uvicorn ne se lie jamais au port désigné (était la commande heroku-cli heroku local travaille pour vous?)

Votre Procfile pourrait ressembler à ceci;

web: uvicorn src.main:app --Host=0.0.0.0 --port=${PORT:-5000}

Cet exemple suppose que vous avez votre code source dans un sous-dossier nommé 'src' qui a un __init__.py (indiquant un Python, vous voudrez probablement ajouter src au PYTHONPATH à la place, voir app.json) et main.py contenant votre application fastapi;

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}"
    }

J'ai ouvert mon exemple de travail sur github que vous pouvez voir sur herok (pour l'instant)

3
Hedde van der Heide

Vous pouvez également configurer votre FastAPI pour qu'il s'exécute sur Gunicorn avec uvicorn comme processus de travail. Voici la ligne de commande que vous pouvez conserver dans le fichier Procfile utilisé par Heroku pour rendre votre application opérationnelle. La commande ci-dessous lancera votre application sur 3 processus de travail

web: gunicorn -w 3 -k uvicorn.workers.UvicornWorker main:app

Pour une vidéo détaillée étape par étape, vous pouvez visiter ce didacticiel vidéo qui détaille comment déployer FastAPI sur Heroku en seulement 6 minutes. ou vous pouvez avoir une présentation détaillée de la création et du déploiement de python basé FastAPI sur Heroku à partir de ce article de blog.

2
navule