/ bin / sh: 1: exec: gunicorn: no encontrado

Dec 16 2020

Estoy tratando de implementar una aplicación django simple en el motor de aplicaciones de Google Cloud. La aplicación tiene servidores wsgi y asgi básicos donde wsgi atiende solicitudes HTTPS y asgi atiende solicitudes websocket. Estoy siguiendo el tutorial del motor de aplicaciones de Google para implementar la aplicación y se construye y se implementa con éxito. Sin embargo, no puede encontrar los paquetes instalados en el espacio de trabajo implementado.

Estos son los pasos que estoy siguiendo

gcloud init
virtualenv myenv
source activate myenv/bin/activate
pip install -r requirements.txt
gcloud app deploy

Requirements.txt tienen gunicorn y daphne y también se instalan.

Este es un error que recibo cuando abro la aplicación implementada en el navegador.

2020-12-15 20:48:25 my-service[20201216t014451]  /bin/sh: 1: exec: gunicorn: not found

Así es como se ve mi archivo app.yaml

runtime: python38
service: my-service
instance_class: F2

entrypoint: gunicorn -b :$PORT main:app
handlers:
  - url: /.*
    script: auto
    secure: always

inbound_services:
- warmup

automatic_scaling:
  min_instances: 1
  min_idle_instances: 1
  max_instances: 2
  max_idle_instances: 1

También lo intenté pasando la ruta exacta en el punto de entrada, es decir, punto de entrada: gunicorn -b: $ PORT main: app pero obtuve el mismo error

Estoy llamando a la implementación de la aplicación gcloud dentro de mi virtualenv, pero cuando se implementa no puede leer los paquetes instalados, es decir, daphne y gunicorn. Ambos funcionan perfectamente en el entorno local en el mismo directorio con los mismos paquetes.

Me he referido a estas preguntas, esto y esto, y probé las respuestas, pero nada funcionó.

Respuestas

1 MuhammadZeeshan Dec 16 2020 at 16:01

El motor de la aplicación GAE necesita el archivo requirements.txt en el mismo directorio que app.yaml.

Mi archivo requirements.txt estaba en una subcarpeta, es por eso que el motor de la aplicación de Google no pudo instalar gunicorn. Estaba instalando los requisitos localmente y pasando los requisitos instalados durante la implementación, pero parece que no hay necesidad de instalarlos localmente (excepto para probar los cambios en el servidor local).