web-dev-qa-db-fra.com

ERREUR GAE: - / bin / sh: 1: exec: gunicorn: introuvable

J'essaie de déployer mon application sur GAE en utilisant leur version d'essai. Jusqu'à présent, j'ai réussi à créer un app.yaml avec des paramètres personnalisés pour un environnement flexible avec python 3.6.

Cependant, lors du déploiement de l'application, l'application se construit avec succès, cependant, je reçois toujours l'erreur suivante

Mise à jour du service [par défaut] (cela peut prendre plusieurs minutes) ... a échoué. ERREUR: (gcloud.app.deploy) Réponse d'erreur: [9] Erreur de démarrage de l'application:/bin/sh: 1: exec: gunicorn: not found

Voici la hiérarchie des dossiers de fichiers dans mon projet:

enter image description here

Suivre le code pour app.yaml

env: flex
runtime: custom
api_version: 1
entrypoint: gunicorn -b :$PORT main:app
runtime_config:
    python_version: 3.6

#handlers:
#- url: /SmsResponse
#  script: Twilio_Routing.RecivedSms
#
#- url: /CallResponse
#  script: Twilio_Routing.ReceivedCall

Je manque sûrement quelque chose et j'apprécierais vraiment une aide ici. Lien vers git repo

requirements.txt

Flask==0.10.1
gunicorn==19.3.0
twilio==6.8.4

DockerFile

FROM gcr.io/google-appengine/python
LABEL python_version=python3.6
RUN virtualenv --no-download /env -p python3.6

# Set virtualenv environment variables. This is equivalent to running
# source /env/bin/activate
ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH

# Copy the application's requirements.txt and run pip to install all
# dependencies into the virtualenv.
ADD requirements.txt requirements.txt
RUN pip install -r requirements.txt

ADD . /app/

#CMD gunicorn -b :$PORT main:app
ENTRYPOINT [ "python", "Twilio_Routing.py" ]

P.S. Après les modifications du fichier requirements.txt, j'obtiens l'erreur 502 Bad Gateway.

Journaux indiquant que le service a été exécuté avec succès.

017-12-25 01:29:03 default[20171224t212610]   * Running on http://127.0.0.1:8080/ (Press CTRL+C to quit)
2017-12-25 01:29:03 default[20171224t212610]   * Restarting with stat
2017-12-25 01:29:03 default[20171224t212610]   * Debugger is active!
2017-12-25 01:29:03 default[20171224t212610]   * Debugger PIN: 134-103-452
2017-12-25 01:29:17 default[20171224t212610]   * Running on http://127.0.0.1:8080/ (Press CTRL+C to quit)
2017-12-25 01:29:17 default[20171224t212610]   * Restarting with stat
2017-12-25 01:29:17 default[20171224t212610]   * Debugger is active!
2017-12-25 01:29:17 default[20171224t212610]   * Debugger PIN: 134-103-452

Quelqu'un peut-il regarder mon code dans git et me dire ce qui me manque ici?

7

Quelques modifications et j'ai pu exécuter votre application dans Docker.

  1. Dans Twilio_Routing.py, changez Host pour écouter sur 0.0.0.0 au lieu de 127.0.0.1. Ceci est nécessaire pour que le serveur soit également disponible en externe.
  2. Depuis votre app.yaml est déjà configuré, vous n'avez pas besoin de personnaliser votre Dockerfile comme Google App Engine a besoin. Gardez-le comme votre propre personnalisé. Voici ce que j'ai utilisé:

    #Python's Alpine Base Image
    FROM python:3.6-Alpine3.6
    
    #Installing all python modules specified
    ADD requirements.txt requirements.txt
    RUN pip install -r requirements.txt
    
    #Copy App Contents
    ADD . /app
    WORKDIR /app
    
    #Start Flask Server
    CMD [ "python","Twilio_Routing.py"]
    #Expose server port
    EXPOSE 8080
    
3
shubhamr

pour moi, l'erreur était aussi simple que de s'assurer que gunicorn était en requirements.txt

Flask==1.0.2
gunicorn==19.9.0

Remarque:

Je vois que le PO avait ajouté ce drapeau; c'est pour aider les autres qui peuvent rencontrer exec: gunicorn: not found

7
Casey

Considérant l'exemple montré dans le GoogleCloudPlatform/python-runtime page, pensez à changer votre ligne CMD de:

CMD exec gunicorn -b :$PORT main:app

À:

CMD gunicorn -b :$PORT main:app

Je vois exec utilisé ici uniquement lorsque l'image de base est celle de python, pas gcr.io/google-appengine/python.

0
VonC