Partage
  • Partager sur Facebook
  • Partager sur Twitter

Déploiement d'une application Flask-React JS

Déploiement sur Heroku

Sujet résolu
    19 mars 2024 à 17:40:11

    Bonjour, j'ai développé une application en Flask(une API pour le Backend) et en React JS(pour le frontend). Aujourd'hui, je souhaite déployer mon application sur Heroku. Le problème c'est que depuis hier je suis bloqué sur le problème suivant: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch. De ce que j'ai lu et compris sur Stack OverFlow, c'est que généralement cette erreur se produit pour l'une des 3 raisons suivantes: 

    -Le port a été définit manuellement alors que Heroku le ddéfinit d'une manière dynamique(avec la variable d'environnement PORT).

    -L'hôte a été définit sur 127.0.0.0(et donc Heroku n'a pas la possibilité d'écouter les requête HTTP externes). Il faut donc définir l'hôte sur 0.0.0.0.

    -D'autres processus s'exécute et ont pour effet de retarder le chargement du site(après que le serveur Flask aie démarré).

    Concernant mon application, concrètement, il s'agit d'une application web qui utilise un algorithme d'apprentissage automatique(intelligence artificielle) pour prédire les résultats de chaque matches de football dans la Premier League(J'extrait les données de football grâce à une API externe et j'utilise ensuite ces données pour faire des predictions avec pandas et scikit-learn). Mon application utlise aussi l'API de Stripe pour traiter les paiements pour chaque utilisateur qui s'abonne à mon application web pour accéder à ces predictions. Mes predictions et mon IA ne s'exécute que si l'utilisateur parvient à s'authentifier. L'API de Stripe est appelé uniquement quand un utilisateur s'apprête à souscrire à un abonnement payant. Par conséquent je ne pense pas que mon IA, l'API de football externe et Stripe contribuent au problème que je rencontre actuellement sur Heroku. 

    Par conséquent, aujourd'hui, je suis un peu perdu. Je ne sais plus où et comment investiguer le problème, d'autant plus que les logs de Heroku ne sont pas très informatifs. Comme mon ordinateur est un PC Windows 10, gunicorn ne fonctionne pas sur mon ordinateur du coup j'utilise Waitress comme serveur WSGI. voici la commande exécuté dans mon Procfile: 

    web: waitress-serve --host 0.0.0.0 --call myapp:create_app

    Et ici c'est l'exécution de mon application Flask: 

    if __name__ == '__main__':
       port = int(os.environ.get('PORT', 8080))
       app.run(host='0.0.0.0', port=port)

    j'ai configuré mon application Flask pour qu'il serve directement mon application React: 

    def create_app():
        app = Flask(__name__, static_url_path='', static_folder='build')
        return app
    app = create_app()
    
    @app.route("/")
    @cross_origin()
    def serve():
        return send_from_directory(app.static_folder, 'index.html')

    Je ne sais pas si cette information peut être utile ou pas mais je vais quand même le préciser. Dans mon root directory, il y a mon application Flask, mon application React, le dossier build(l'application de React pour la production) et le dossier qui contient l'ensemble de mes predictions et de mon IA sur la Premier League. Du coup, je voulais savoir si ma configuration concernant mon application Flask était correcte? Dans mon application Heroku, j'ai 2 buildpacks( un pour Python et un autre pour Node JS). Et si les 2 premières raisons que j'ai cité pour mon problème peuvent-être écarté comment invesiguer sur la 3ème cause possible(l'exécution de processus qui retarde le démarrage de mon application sur Heroku)?

    • Partager sur Facebook
    • Partager sur Twitter
      21 mars 2024 à 15:59:35

      C'est toujours sympa de dire comment ça a été résolu ...
      • Partager sur Facebook
      • Partager sur Twitter
        4 avril 2024 à 9:29:52

        En fait, ce qui a résolu mon problème(en fait je ne sais même pas si le problème venait de là où pas), c'est que j'ai changé mon serveur wsgi(j'ai remplacé waitress par gunicorn). A la base, je pensais que je devais exécuter la commande wsgi sur mon code Flask directement et vu que gunicorn n'est pas compatible avec windows, c'est pour ça que j'avais utilisé waitress. Mais on m'as expliqué que c'est uniquement Heroku qui a besoin de gunicorn(donc je n'ai pas besoin d'installer gunicorn sur ma machine local). Tout ce dont j'avais besoin, c'était d'excécuter gunicorn directement sur mon Procfile.
        • Partager sur Facebook
        • Partager sur Twitter

        Déploiement d'une application Flask-React JS

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        • Editeur
        • Markdown