【问题标题】:waitress+flask+gcloud how to set it up serverwaitress+flask+gcloud 如何设置服务器
【发布时间】:2020-05-01 20:55:39
【问题描述】:

在过去的几天里,我一直在尝试将一个基本的应用程序部署到谷歌引擎应用程序(因为 Azure 是一种勒索),我了解到 Gunicode 在 Windows 系统上不起作用,而替代方案是服务员。在发布这个问题之前,我在这里阅读了与该主题相关的所有答案!!!

所以我一直在尝试不同的设置,阅读它,但我仍然无法让它运行。我的领域是数据科学,但如今部署似乎是强制性的。如果有人可以帮助我,将不胜感激。

app.py 文件

from flask import Flask, render_template, request
from waitress import serve


app = Flask(__name__)

@app.route('/')
def index():
    name = request.args.get("name")
    if name == None:
        name = "Reinhold"
    return render_template("index.html", name=name)

if __name__ == '__main__':
    #app.run(debug=True)
    serve(app, host='0.0.0.0', port=8080)

Gcloud app deploy 将在 app.yaml 文件中寻找 gunicode 来启动部署,我在那里尝试了不同的设置,最后我将其设置为 None,因为 Flask 会在我的拙见中寻找替代方案。虽然我仍然认为在那里设置服务员服务器会更好。

app.yaml 文件

runtime: python37
#entrypoint: None
entrypoint: waitress-serve --listen=*:8080 serve:app

GCloud 还会查找 appengine_config.py 文件,它会在其中找到依赖项(我认为)

from google.appengine.ext import vendor

vendor.add('venv\Lib')

requirements.txt 文件如下:

astroid==2.3.3
autopep8==1.4.4
Click==7.0
colorama==0.4.3
dominate==2.4.0
Flask==1.1.1
Flask-Bootstrap==3.3.7.1
Flask-WTF==0.14.2
isort==4.3.21
itsdangerous==1.1.0
Jinja2==2.10.3
lazy-object-proxy==1.4.3
MarkupSafe==1.1.1
mccabe==0.6.1
pycodestyle==2.5.0
pylint==2.4.4
six==1.13.0
typed-ast==1.4.1
visitor==0.1.3
waitress==1.4.2
Werkzeug==0.16.0
wrapt==1.11.2
WTForms==2.2.1

在 google 控制台中,我可以访问日志视图以查看部署过程中出了什么问题,这就是我从此处共享的代码中得到的。

{
 insertId: "5e1e9b4500029d71f92c1db9"  
 labels: {…}  
 logName: "projects/bokehflaskgcloud/logs/stderr"  
 receiveTimestamp: "2020-01-15T04:55:33.288839846Z"  
 resource: {…}  
 textPayload: "/bin/sh: 1: exec: None: not found"  
 timestamp: "2020-01-15T04:55:33.171377Z"  
}

如果有人可以帮助解决这个问题,那就太好了,因为谷歌似乎是部署一些工作的好选择。 Azure 和 VScode 有很好的交互,所以在那里部署它并不难,但试用后的成本是疯狂的。

这就是我尝试部署应用程序后得到的结果。

Error: Server Error
The server encountered an error and could not complete your request.
Please try again in 30 seconds.

【问题讨论】:

    标签: python-3.x google-app-engine flask gcloud waitress


    【解决方案1】:

    使用 Gunicorn 轻松运行您的烧瓶应用程序:

    runtime: python37
    entrypoint: gunicorn -b :$PORT main:app
    

    您需要将 gunicorn 添加到您的 requirments.txt

    查看this documentation 了解如何在 python 3 中定义应用程序启动

    确保您使用 flask run 方法运行您的应用,以防您想在本地测试您的应用:

    if __name__ == '__main__':
        app.run(host='127.0.0.1', port=8080, debug=True)
    

    【讨论】:

    • Spot on Methkal,这是一个简单而优雅的解决方案。万一有人遇到同样的问题并在这里想知道。无论您将应用程序命名为:main/app/myapp,请确保按如下方式添加它,在我的情况下,我的路由位于 app.py ``` 入口点: gunicorn -b :$PORT app:app ```跨度>
    【解决方案2】:
    1. appengine_config.py 未在 Python 3 中使用。Python 2 运行时使用此文件来安装客户端库并为常量和“挂钩函数”提供值。 Python 3 运行时不使用此文件。

    2. app.py 文件中没有提到烧瓶库

    请在第 2 行添加以下导入。

    from flask import Flask, request, render_template
    

    【讨论】:

    • 伙计,我只是忘记在这个问题上添加它,如果我没有它,应用程序甚至无法运行。我将删除 appengine_config.py 看看会发生什么。问题是服务器的路径。
    • 嗨@Vikram,是否有任何限制阻止您使用gunicorn
    • 嗨@Vikram。是的。它在 python 3.7 上运行 gunicorn 只会被 python 2x 使用,虽然我尝试使用服务员,wsgi 服务器。什么都没有。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 2019-05-23
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    相关资源
    最近更新 更多