python – 使用带有flask和flask-restplus的Google App Engine时出现404错误

我的根文件夹中的main.py文件如下所示.

app = Flask(__name__)

def configure_app(app):
    app.config['SERVER_NAME'] = settings.FLASK_SERVER_NAME
    app.config['SWAGGER_UI_DOC_EXPANSION'] = settings.RESTPLUS_SWAGGER_UI_DOC_EXPANSION
    app.config['RESTPLUS_VALIDATE'] = settings.RESTPLUS_VALIDATE
    app.config['RESTPLUS_MASK_SWAGGER'] = settings.RESTPLUS_MASK_SWAGGER
    app.config['ERROR_404_HELP'] = settings.RESTPLUS_ERROR_404_HELP

def initialize_app(app):
    configure_app(app)
    blueprint = Blueprint('api',__name__,url_prefix='/api')
    api.init_app(blueprint)
    api.namespaces.pop(0) #this is to remove default namespace from swagger doc
    api.add_namespace(user_namespace)
    app.register_blueprint(blueprint)

def main():
    initialize_app(app)
    app.run(debug=settings.FLASK_DEBUG)


if __name__ == "__main__":
    main()

我的app.yaml文件如下所示.

runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app

runtime_config:
  python_version: 3

manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10

以下是requirements.txt文件.

Flask==1.0.2
flask-restplus==0.11.0
gunicorn==19.9.0

我在灵活的环境中运行GAE.

我按照https://cloud.google.com/appengine/docs/flexible/python/quickstart中的步骤操作,并成功将应用程序部署到应用程序引擎.

当我转到appspot链接时,我得到404错误,gcloud日志尾部如下所示.

2018-09-09 01:49:00 default[20180909t113222]  "GET /" 404
2018-09-09 01:49:01 default[20180909t113222]  "GET /favicon.ico" 404
2018-09-09 01:49:09 default[20180909t113222]  "GET /api/" 404

我尝试寻找解决方案,但从未找到与我的方案类似的解决方案.

在此非常感谢任何帮助.

谢谢.

最佳答案
部署到App Engine时,不会调用您的主函数.相反,App Engine使用Gunicorn和您在app.yaml文件中定义的入口点.

因为main没有被调用,所以你的initialize_app函数也没有被调用,这就是添加你正在寻找的端点.

相反,您应该执行以下操作:

app = Flask(__name__)
initialize_app(app)

def configure_app(app):
    ...

def initialize_app(app):
    ... 

if __name__ == "__main__":
    # Only use this for things need to run the app locally,# will not be used when deploying to App Engine
    app.run(debug=settings.FLASK_DEBUG)

编辑:我能够使用这个最小的main.py来实现:

from flask import Flask,Blueprint
from flask_restplus import Api

app = Flask(__name__)
api = Api()
blueprint = Blueprint('api',url_prefix='/api')
api.init_app(blueprint)
app.register_blueprint(blueprint)

相关文章

在这篇文章中,我们深入学习了XPath作为一种常见的网络爬虫技巧。XPath是一种用于定位和选择XML文档中特...
祝福大家龙年快乐!愿你们的生活像龙一样充满力量和勇气,愿你们在新的一年里,追逐梦想,勇往直前,不...
今天在爬虫实战中,除了正常爬取网页数据外,我们还添加了一个下载功能,主要任务是爬取小说并将其下载...
完美收官,本文是爬虫实战的最后一章了,所以尽管本文着重呈现爬虫实战,但其中有一大部分内容专注于数...
JSON是一种流行的数据传输格式,Python中有多种处理JSON的方式。官方的json库是最常用的,它提供了简单...
独立样本T检验适用于比较两组独立样本的均值差异,而配对T检验则适用于比较同一组样本在不同条件下的均...