/ bin / sh: 1: exec: gunicorn: não encontrado

Dec 16 2020

Estou tentando implantar um aplicativo django simples no Google Cloud App Engine. O aplicativo tem servidores wsgi e asgi básicos, onde wsgi está atendendo a solicitações HTTPS e asgi atendendo a solicitações de websocket. Estou seguindo o tutorial do google app engine para implantar o aplicativo e ele é construído e implantado com êxito. No entanto, ele não consegue encontrar os pacotes instalados no espaço de trabalho implementado.

Estas são as etapas que estou seguindo

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

requirements.txt tem gunicorn e daphne e eles também são instalados.

Este é o erro que recebo quando abro o aplicativo implantado no navegador.

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

É assim que meu arquivo app.yaml se parece

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

Também tentei passar o caminho exato no ponto de entrada, ou seja, ponto de entrada: gunicorn -b: $ PORT main: app, mas obtive o mesmo erro

Estou chamando gcloud app deploy dentro do meu virtualenv, mas quando ele é implantado, não consegue ler os pacotes instalados, ou seja, daphne e gunicorn. Ambos funcionam perfeitamente em ambiente local no mesmo diretório com os mesmos pacotes.

Eu me referi a essas perguntas isso e aquilo e tentei as respostas, mas nada funcionou.

Respostas

1 MuhammadZeeshan Dec 16 2020 at 16:01

O app engine GAE precisa do arquivo requirements.txt no mesmo diretório que app.yaml.

Meu arquivo requirements.txt estava em uma subpasta, por isso o Google App Engine não conseguiu instalar o gunicorn. Eu estava instalando os requisitos localmente e passando os requisitos instalados durante a implantação, mas parece que não há necessidade de instalá-los localmente (exceto para testar mudanças no servidor local).