在 IIS 上部署 Flask 应用程序时出错



我在通过IIS将Flask Web服务托管到Windows Server上时遇到了一些问题。我遵循了此处的教程:

https://medium.com/@bilalbayasut/deploying-python-web-app-flask-in-windows-server-iis-using-fastcgi-6c1873ae0ad8

并使用此处的资源来更好地了解 wfastcgi 模块: https://pypi.python.org/pypi/wfastcgi

虽然我已经按照教程中的概述让教程烧瓶应用程序工作,但当我尝试托管自己的 Flask 应用程序时,我遇到了一个奇怪的错误。我应该提到我的烧瓶应用程序通过cmd提示符完美运行。

似乎当 wfastcgi.py 模块运行时,它无法识别对 Handler 构造函数的调用。 这是我得到的错误:

Traceback (most recent call last):
File "C:web_servicesguest_reg_apiwfastcgi.py", line 847, in main
result = handler(record.params, response.start)
TypeError: 'module' object is not callable

过去,我遇到过这些错误,因为 Windows 找不到 Python 模块,但将模块的位置添加到我的 Path 系统变量通常可以解决问题。

我已经验证了对 Python、Flask 和 wfastcgi.py 的所有引用都在我的路径系统变量中

我可以通过 IIS 在同一台服务器上成功托管 http 站点。

这是我的web.config文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="Flask" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:Python27python.exe|C:web_servicesguest_reg_apiwfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
<add name="python-wfastcgi" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:Python27python.exe|C:Python27Libsite-packageswfastcgi.pyc" resourceType="File" />
</handlers>
</system.webServer>
<appSettings>
<!-- Required settings -->
<add key="WSGI_HANDLER" value="guestreg_api_v2.app" />
<add key="PYTHONPATH" value="C:web_servicesguest_reg_api" />
</appSettings>
</configuration>

我觉得这个问题是以下几件事之一:

  • 由于我设置系统变量的方式存在一些错误,Python 模块在 Windows 中的可见性
  • 我的 web.config 文件中有错误
  • 我正在由我们的IT部门进行Windows服务器设置。我被告知我有管理权限,但有时我被禁止做某些事情......也许服务器上设置的权限会干扰 IIS Web 服务托管过程?

除了尝试通过 apache 部署服务之外,我不确定如何继续。不过,我更喜欢这种方法,因为我觉得我已经非常接近解决这个问题了。

谢谢

通过 davidism 对我的帖子的评论,我能够对我的 Web 服务进行必要的更改,并通过 IIS 托管它。

问题是我逐字逐句地遵循链接的教程,而不是欣赏配置文件中WSGI_HANDLER值的含义。我需要调用我在 Python 脚本中创建的 Flask 实例:

摘自我的Python脚本:

from flask import *
...
guestreg_api = Flask(__name__)

对 web.config 文件所做的更改:

<add key="WSGI_HANDLER" value="guestreg_api_v2.guestreg_api" />

最新更新