Google App Engine标准无法找到/执行Gunicorn

时间:2019-06-20 19:03:47

标签: django google-app-engine gunicorn google-cloud-build

我有一个带有Django后端和Angular前端的项目。我已将它们作为两项服务部署到 Google App Engine标准中,并且部署成功成功

但是,当我尝试访问后端网址this-backend.appspot.com时,我得到了

/bin/sh: 1: exec: gunicorn: not found

我的需求文件中有 gunicorn

gunicorn==19.9.0

我还定义了入口点:

runtime: python37
service: default

entrypoint: gunicorn -b :$PORT thisapp.wsgi

handlers:
- url: /static
  static_dir: static
- url: /.*
  secure: always
  redirect_http_response_code: 301
  script: auto

但仍然出现相同的错误。

我研究了Stackoverflow上所有相同的问题,它们要么是由于需求,要么是因为我已经定义了这两个问题的切入点。

即使我转到 Stackdriver ,也可以看到app engine:/内的gunicorn文件夹:

gunicorn
gunicorn-19.9.0.dist-info

这是后端cloudbuild.yaml文件:

steps:

  - name: 'python:3.7'                                                                                                                               
    entrypoint: python3                                                               
    args: ['-m', 'pip', 'install', '-t', '.', '-r', 'requirements.txt'] 

  - name: 'python:3.7'                                                            
    entrypoint: python3                                                           
    args: ['./manage.py', 'collectstatic', '--noinput']

  - name: 'gcr.io/cloud-builders/gcloud'
    args: ['app', 'deploy', '--version=prod']

如果任何人有任何解决方案或建议,我都会非常感激,因为我研究了互联网上几乎所有相同的问题。

谢谢

詹姆斯

1 个答案:

答案 0 :(得分:1)

默认情况下,App Engine会在名为app的WSGI兼容对象的app目录的根目录中查找 selectedDate(event: any) { var date = new Date(event), mnth = ("0" + (this.utcdate.getUTCMonth() + 1)).slice(-2), day = ("0" + date.getUTCDate()).slice(-2); date.setMinutes(date.getMinutes() + date.getTimezoneOffset()); return [date.getUTCFullYear(), mnth, day].join("-"); } 文件。

文档here建议您在main.py文件中指定入口点时,可以在gunicorn文件中包含requirements.txt,但是似乎要安装的版本与默认设置冲突。

要解决此问题,我建议您同时删除requirements.txt文件中的gunicorn依赖项和app.yaml中的入口点,并创建如下main.py文件:

app.yaml

这样,它可以恢复到上面说明的默认行为,并且应该可以正常工作。在官方sample code中也以这种方式实现。