【问题标题】:Deployed Flask app to windows Azure and receive wfastcgi error将 Flask 应用程序部署到 Windows Azure 并收到 wfastcgi 错误
【发布时间】:2019-07-22 17:33:17
【问题描述】:

我一直在尝试使用应用服务将网站部署到 Azure。我使用了一个 requirements.txt 文件来安装 flask 和 wfastcgi 以及其他需要的依赖项,我也在使用 Python 3.6。我已经设置了 web.config 文件以正确启动 python 并使用 wfastcgi 包。当我尝试导航到该站点时,我收到了这样的 wfastcgi 错误。

Error occurred while reading WSGI handler:

Traceback (most recent call last):
File "D:\Python34\Scripts\wfastcgi.py", line 711, in main
env, handler = read_wsgi_handler(response.physical_path)
File "D:\Python34\Scripts\wfastcgi.py", line 568, in read_wsgi_handler
return env, get_wsgi_handler(handler_name)
File "D:\Python34\Scripts\wfastcgi.py", line 551, in get_wsgi_handler
raise ValueError('"%s" could not be imported' % handler_name)
ValueError: "D:\home\site\wwwroot\FlaskTest.app" could not be imported

我的文件存储在“D:\home\site\wwwroot” 它的结构是这样的

D:\home\site\wwwroot |FlaskTest.py |web.config |requirements.txt

我的 FlaskTest.py 只是简单的快速入门 Flask 应用程序。

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
 return "Hello from FastCGI via IIS!"

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

这是我的 Web.config:

<configuration>
<system.webServer>
<handlers>
   <add name="PythonHandler" path="*" verb="*" modules="FastCgiModule"
    scriptProcessor="D:\Python34\python.exe|D:\Python34\scripts\wfastcgi.py"
    resourceType="Unspecified" requireAccess="Script"/>
</handlers>
<httpErrors errorMode="Detailed" />
</system.webServer>
<appSettings>
 <add key="PYTHONPATH" value="D:\home\site\wwwroot" />
 <add key="WSGI_HANDLER" value="D:\home\site\wwwroot\FlaskTest.app" />
 <add key="WSGI_LOG" value="D:\home\LogFiles\wfastcgi.log"/>
</appSettings>
</configuration>

我真的不确定 WSGI_HANDLER 键有什么问题。从我读过的所有内容来看,这应该有效。我尝试将 init.py 添加到目录中,但仍然收到错误消息。出于某种原因,我可以理解 Wfastcgi 在导入“app”对象时遇到问题,因为这就是我将 Flask 对象命名为的原因。任何可以对此有所了解的信息都将不胜感激,因为我这几天一直在抨击它。

【问题讨论】:

  • 这意味着你仍然使用已弃用的方法,docs.microsoft.com/en-us/visualstudio/python/… 请改用基于 Linux 的应用服务。
  • 那么我认为在 azure 中使用 windows env 用于烧瓶应用程序只是无法正常工作的想法是否正确?那里有很多文档和其他人这样做的例子。 azure 是不是完全取消了这个功能,并强迫人们在 linux 上做呢?
  • 我相信他们做出了正确的选择,不用在 IIS/Windows 设置和兼容性问题上用复杂的 Python 打扰人们。这不是“强迫人们在 Linux 上做这件事”,因为 Python 是 Linux 上的原生。
  • 是的,我完全理解,因为在 linux 环境下这样做更有意义,我只是更熟悉 windows env,并希望能够朝着这个方向发展,以便在未来能够更好地支持它.
  • 如果您想将该评论作为答案发布,请将其标记为正确答案。

标签: python azure iis flask wfastcgi


【解决方案1】:

从评论中复制。

Microsoft 在 Windows 上的 Azure App Service 上弃用了 Python(以及 wfastcgi 等底层组件),

https://docs.microsoft.com/en-us/visualstudio/python/publishing-python-web-applications-to-azure-from-visual-studio?view=vs-2017

因此,当今托管 Python 应用程序的唯一可行方法是在 Linux 上使用应用程序服务。

【讨论】:

    【解决方案2】:

    我知道这是超级旧的,但实际上我能够通过一个糟糕的工作在我的 django 应用程序上运行它。如果你真的进入 wfastcgi 文件,你可以在那里添加环境变量,你的应用程序就可以工作了。不确定这有多糟糕(除了明显的维护问题),但它在 windows server 2016、iis 10 和 python 3.7 上对我来说运行良好。

    好的 - 对此进行更新... 如果您在 IIS 上使用 FASTCGI 模块。您可以在该特定 scriptProcessor 的设置中添加环境变量,它可以毫无问题地提取它们。

    【讨论】:

      猜你喜欢
      • 2018-11-23
      • 2018-04-07
      • 2019-03-20
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多