无法在 'app' gunicorn 中找到应用程序对象 'app'

Failed to find application object 'app' in 'app' gunicorn

我正在使用带有 gunicorn 的烧瓶微服务向 Google Kubernetes 引擎上托管的服务发出请求。微服务是 dockerised 并作为一个 pod 托管在 google kubernetes 引擎上。在本地测试后,我部署了它,但出现 CrashLoopBackOff 错误。我的 pod 的日志是:

[2019-03-15 08:41:13 +0000] [1] [INFO] Starting gunicorn 19.9.0
[2019-03-15 08:41:13 +0000] [1] [INFO] Listening at: http://0.0.0.0:8080 (1)
[2019-03-15 08:41:13 +0000] [1] [INFO] Using worker: threads
[2019-03-15 08:41:13 +0000] [12] [INFO] Booting worker with pid: 12
Failed to find application object 'app' in 'app'
[2019-03-15 08:41:13 +0000] [12] [INFO] Worker exiting (pid: 12)
[2019-03-15 08:41:13 +0000] [13] [INFO] Booting worker with pid: 13
Failed to find application object 'app' in 'app'
[2019-03-15 08:41:13 +0000] [13] [INFO] Worker exiting (pid: 13)
[2019-03-15 08:41:13 +0000] [1] [INFO] Shutting down: Master
[2019-03-15 08:41:13 +0000] [1] [INFO] Reason: App failed to load.

这似乎是 gunicorn 的错误。

我的文件夹结构是:

.
├── app.py
├── app.yaml
├── config.py
├── data
│   └── object_detection.pbtxt
├── Dockerfile
├── filename.jpg
├── helper.py
├── object_2.py
├── object_detection
│   ├── core
│   │   ├── anchor_generator.py

│       └── vrd_evaluation_test.py
├── object_detection_grpc_client.py

├── requirements.txt
└── tensorflow_serving
    ├── apis

       └── regression_pb2.py

app.py代码为:

import logging

from flask import Flask, request, jsonify
from config import auth_secret_token, PORT, DEBUG_MODE
from helper import check_parameters
from object_detection_grpc_client import main


app = Flask(__name__)


def check_authorization(request):
    try:
        if not 'Auth-token' in request.headers:
            return jsonify({'error': 'unauthorized access'}), 401
        token = request.headers['Auth-token']
        if token != auth_secret_token:
            return jsonify({'error': 'unauthorized access'}), 401
        return "ok", 200
    except Exception as e:
        return jsonify({'error': 'unauthorized access'}), 401


@app.route("/", methods=['POST'])
def hello():
    info, status_code = check_authorization(request)

    if status_code != 200:
        return info, status_code
    else: 
        status, status_code = check_parameters(request.form)

    if status_code != 200:
        return status, status_code
    else:
        score = main()
        response = {"status": "success", "score": score, "customer_id":(request.form["cust_id"])}

        return jsonify(response), status_code


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=PORT, debug=DEBUG_MODE)

config.py代码为:

    from os import environ as env
    import multiprocessing

    PORT = int(env.get("PORT", 8080))
    DEBUG_MODE = int(env.get("DEBUG_MODE", 1))

    # Gunicorn config
    bind = ":" + str(PORT)
    workers = multiprocessing.cpu_count() * 2 + 1
    threads = 2 * multiprocessing.cpu_count()

    auth_secret_token = "token"
    server='A.B.C.D:9000'
    model_name="mymodel"
    input_image='filename.jpg'
    label_map="./data/object_detection.pbtxt"

Dockerfile 是:

    FROM python:3.5.2
    RUN apt update
    WORKDIR /app
    ADD requirements.txt /app/requirements.txt
    RUN pip install -r /app/requirements.txt
    ADD . /app
    ENV PORT 8080
    CMD ["gunicorn", "app:app", "--config=config.py"]

部署文件app.yaml:

 apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: mymodel-client
      labels:
        name: mymodel-client
    spec:
      replicas: 1
      selector:
        matchLabels:
          name: mymodel-client
      template:
        metadata:
          name: mymodel-client
          labels:
            name: mymodel-client
        spec:
          containers:
            - name: mymodel-client
              image: gcr.io/image-identification/mymodel-client:v1
              ports:
                - containerPort: 8080
              resources:
                requests:
                  memory: 256Mi
                limits:
                  memory: 512Mi
              env:
                - name: DEBUG_MODE
                  value: "1"

这里有什么问题?

Link到我参考的教程https://medium.com/google-cloud/a-guide-to-deploy-flask-app-on-google-kubernetes-engine-bfbbee5c6fb

我认为问题可能与此类似。

app 文件夹(您在 docker 中创建的文件夹)和 app 文件同名。你能再试一次重命名其中之一吗?

其余的文件看起来没问题,看来只是gunicorn

的问题

这很可能是内存问题。我删除了部署并再次推送它并为其分配了更多资源并且它开始 运行 没有任何错误。