【问题标题】:Error with WSGI when deploying Flask App to Azure将 Flask 应用程序部署到 Azure 时出现 WSGI 错误
【发布时间】:2018-11-23 18:58:50
【问题描述】:

我在使用 Flask 部署 Azure Web 时不断收到以下错误:

Unhandled exception in wfastcgi.py: Traceback (most recent call last):
  File "D:\home\python364x64\wfastcgi.py", line 791, in main
    env, handler = read_wsgi_handler(response.physical_path)
  File "D:\home\python364x64\wfastcgi.py", line 633, in read_wsgi_handler
    handler = get_wsgi_handler(os.getenv("WSGI_HANDLER"))
  File "D:\home\python364x64\wfastcgi.py", line 603, in get_wsgi_handler
    handler = getattr(handler, name)
AttributeError: module 'app' has no attribute 'app'

这是我的应用程序的结构:

|-app
    |- __init__.py
    |- mod1
    |- mod2
|-config.py
|-runserver.py
|-web.config

这是我的 web.config 文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="WSGI_HANDLER" value="app.app"/>
    <add key="PYTHONPATH" value="D:\home\site\wwwroot"/>
    <add key="WSGI_LOG" value="D:\home\LogFiles\wfastcgi.log"/>
  </appSettings>
  <system.webServer>
    <handlers>
      <add name="PythonHandler" path="*" verb="*" modules="FastCgiModule" scriptProcessor="D:\home\python364x64\python.exe|D:\home\python364x64\wfastcgi.py" resourceType="Unspecified" requireAccess="Script"/>
    </handlers>
  </system.webServer>
</configuration>

config.py:

import os

app_dir = os.path.abspath(os.path.dirname(__file__))

class BaseConfig:
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'A SECRET KEY'

class DevelopementConfig(BaseConfig):
    DEBUG = True

运行服务器.py:

import os
from app import db, create_app

app = create_app(os.getenv('FLASK_ENV') or 'config.DevelopementConfig')


if __name__ == '__main__':   
    app.run()

和应用程序。init.py:

from flask import Flask
def create_app(config):
    app = Flask(__name__)
    app.config.from_object(config)
    return app

我尝试包含一个 wsgi.py:

from app import app as application

与 runserver.py 处于同一级别但仍然出现上述错误。我在这里错过了什么?

【问题讨论】:

    标签: azure flask azure-web-app-service wsgi


    【解决方案1】:

    那么,WSGI 是如何工作的?它启动、导入您的应用程序并调用它的方法来处理请求。 WSGI 的&lt;add key="WSGI_HANDLER" value="app.app"/&gt; 表示导入模块应用程序并从中获取变量应用程序。但是在导入你的 app.__init__.py 之后,只有 Flaskcreate_app 变量,具有 Flask-class 和 create_app-function。因此,您应该在 WSGI_HANDLER 中设置指向烧瓶应用程序的值,runserver.appapp.create_app()(我不知道 Azure 如何使用正确的语法将应用程序作为函数处理,但它是 surely can)。

    【讨论】:

    • 感谢您的解释。
    猜你喜欢
    • 2016-05-15
    • 1970-01-01
    • 2020-12-04
    • 2015-11-21
    • 2014-09-04
    • 2020-05-24
    • 2019-08-29
    • 2019-06-09
    相关资源
    最近更新 更多