2016-10-03 1 views
0

Il s'agit de ma première expérience de déploiement d'une application Web Flask sur Azure. J'ai suivi cette tutorial.Déploiement Azure n'installant pas les packages Python répertoriés dans requirements.txt

L'application de démonstration par défaut qu'ils ont fonctionne très bien pour moi. Par la suite, j'ai poussé mon application Flask via git. Le journal montre que le déploiement a réussi. Cependant, quand je passe en revue l'application hébergée par lien fourni dans « Propriétés de l'application », je reçois une erreur 500 comme suit:

La page ne peut être affichée car une erreur de serveur interne a eu lieu.

Causes les plus probables: IIS a reçu la requête; cependant, une erreur interne s'est produite pendant le traitement de la demande. La cause première de cette erreur dépend du module qui gère la demande et de ce qui s'est passé dans le processus de travail lorsque cette erreur s'est produite. IIS n'était pas capable d'accéder au fichier web.config pour le site Web ou l'application. Cela peut se produire si les autorisations NTFS sont définies de manière incorrecte. IIS était impossible de traiter la configuration pour le site Web ou l'application. L'utilisateur authentifié n'a pas l'autorisation d'utiliser cette DLL. La demande est mappée à un gestionnaire géré mais la fonctionnalité .NET Extensibility n'est pas installée.

La seule chose hors de la base, je peux voir en parcourant le wwwroot via KUDU est qu'aucun des paquets que j'ai installés dans mon environnement local virtuel sont installés sur Azure malgré l'existence du fichier « requirements.txt » dans wwwroot. Ma compréhension est qu'Azure pip installerait tout package inexistant qu'il trouve dans le fichier requirements.txt lors d'un push réussi par GIT. Mais ça ne semble pas se passer pour moi. Est-ce que je fais quelque chose de mal et que les paquets manquants sont juste un symptôme ou pourrait-il être la cause du problème?

Notes:

  • Mon application Flask fonctionne très bien localement (linux) et une 3ème partie VPS

  • Je redéployé à plusieurs reprises à partir de rien en vain (j'utiliser la méthode GIT locale)

  • J'ai cloné l'application de démonstration Azure Flask en local, j'ai simplement modifié le dossier de l'application et l'ai repoussé vers Azure, mais sans succès.

  • Azure est réglé sur Python 2.7 même que mon env virtuel localement

  • Comme suggéré dans le tutoriel lié ci-dessus, je supprimé le dossier « env » et redéployé Trick Azure pour réinstaller le env virtuel. Il a fait mais avec ses propres paquets par défaut pas celui dans mon requirements.txt.

Mon requirements.txt a les éléments suivants:

bcrypt == == 3.1.0 CFFI 1.7.0 click == == 6.6 Flask 0,11.1 Flask-Bcrypt == 0.7.1 Flask-Login == 0.3.2 Flask-SQLAlchimie == 2.1 Flask-WTF == 0.12 son dangereux == 0.24 Jinja2 == 2.8 MarkupSafe == 0.23 pycparser == 2.14 PyMySQL = = 0.7.7 == python-http-client 1.2.3 six == == 1.10.0 smtpapi 0.3.1 SQLAlchemy == == 1.0.14 Werkzeug 0.11.10 WTForms == 2,1

+0

Avez-vous un fichier '.skipPythonDeployment' dans le répertoire racine de votre application? Et avez-vous reçu un message d'erreur au cours de la tâche de déploiement? Et pourriez-vous fournir votre 'requirements.txt' si possible. –

+0

@ GaryLiu-MSFT> Oui, il existe un fichier .skipPythonDeployment dans le répertoire racine. Il y a une chaîne "hello" seulement dedans. Il n'y avait aucun message d'erreur sur la tâche de déploiement. Il s'est terminé par un message "déployé avec succès". Enfin, j'ai mis à jour la question avec le contenu requirements.txt. – user3522242

Répondre

1

Comme Azure Web Apps exécutera un script deploy.cmd en tant que tâche de déploiement pour contrôler quelles commandes ou tâches seront exécutées pendant le déploiement.

Vous pouvez utiliser la commande Azure-CLI azure site deploymentscript --python pour obtenir le script de tâche de déploiement des applications Python.

Et vous pouvez trouver le script suivant dans ce deploy.cmd sciprt:

IF NOT EXIST "%DEPLOYMENT_TARGET%\requirements.txt" goto postPython 
IF EXIST "%DEPLOYMENT_TARGET%\.skipPythonDeployment" goto postPython 

echo Detected requirements.txt. You can skip Python specific steps with a .skipPythonDeployment file. 

Ainsi, le .skipPythonDeployment va sauter toutes les étapes suivantes dans la tâche de déploiement, y compris la création d'un environnement virtuel.

Vous pouvez essayer de supprimer de votre application et réessayer. Pour plus d'informations, veuillez vous référer au https://github.com/projectkudu/kudu/wiki/Custom-Deployment-Script.

+0

J'ai supprimé .skipPythonDeployment et il a commencé à canaliser les paquets. Il a échoué à bcrypt avec son erreur "Impossible de trouver vcvarsall.bat" mais c'est pour une autre question que vous avez résolu mon problème initial. Merci beaucoup Gary! – user3522242