Windows Server 2012 上的 Flask、wfastcgi 和 IIS
Flask, wfastcgi, and IIS on Windows Server 2012
我正在尝试在 Windows Server 2012 上的 IIS 上部署一个烧瓶服务。到达这一点:
- pip 安装 flask(Python 版本 2.7 和 3 已经安装。)
- pip 安装 wfastcgi
- 运行 wfastcgi 启用
- 在IIS下建立新站点
- 为 wfastcgi 添加了一个处理程序
- 已修改 Web.config
运行 来自 localhost returns 我期望的输出。但是,当我从sitename访问该网站时,返回如下错误(省略路径):
Error occurred while reading WSGI handler:
Traceback (most recent call last):
File "wfastcgi.py", line 791, in main
env, handler = read_wsgi_handler(response.physical_path)
File "wfastcgi.py", line 633, in read_wsgi_handler
handler = get_wsgi_handler(os.getenv("WSGI_HANDLER"))
File "wfastcgi.py", line 586, in get_wsgi_handler
raise Exception('WSGI_HANDLER env var must be set')
Exception: WSGI_HANDLER env var must be set
无论是在服务器上还是在域上的另一台机器上都是这种情况。似乎当从本地主机以外的任何地方请求应用程序时,环境都无法访问。没有任何内容写入 wfastcgi 日志。
我在下面包含了 app.py
和 Web.config
。我这里省略了scriptProcessor
路径,但是设置为wfastcgi-enable返回的值。
当 运行 来自 localhost 时,环境可用。 在 locahost 之外调用时如何使环境对应用程序可用?
app.py
from flask import Flask
myapp = Flask(__name__)
@myapp.route("/hello")
def hello():
return "Hello from flask!"
if __name__ == "__main__":
myapp.run(port=8080)
Web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appSettings>
<add key="WSGI_HANDLER" value="app.myapp" />
<add key="PYTHONPATH" value="c:/inetpub/wwwroot/flask-services/" />
<add key="WSGI_LOG" value="C:/TMP/logs/app.log" />
</appSettings>
<system.webServer>
<handlers>
<add name="python-wfastcgi" path="*" verb="*" modules="FastCgiModule" scriptProcessor="[Omitted]" resourceType="Unspecified" requireAccess="Script" />
</handlers>
</system.webServer>
</configuration>
我们最近在使用 IIS 7、Flask 0.12 和 Python 3.6.4 时遇到了类似的问题。您的 web.config
看起来不错。两条建议:
- 为您的脚本处理器使用
virtualenv
。它避免了使用系统级 Python 安装的副作用。这样调试起来更容易。
- 在 IIS 中仔细检查 IIS_IUSRS 和 IUSR 对您的 Python 路径中的文件夹具有修改权限。
我在 web.config
中添加了同样的错误
<appSettings>
<!-- Required Settings -->
<add key="WSGI_HANDLER" value="uploader.wsgi.application" />
<add key="WSGI_LOG" value="C:\call-uploader-backend\Logs\my_app.log" />
<add key="PYTHONPATH" value="C:\call-uploader-backend\uploader\" />
<!-- Optional settings -->
<add key="DJANGO_SETTINGS_MODULE" value="uploader.settings" />
</appSettings>
我正在尝试在 Windows Server 2012 上的 IIS 上部署一个烧瓶服务。到达这一点:
- pip 安装 flask(Python 版本 2.7 和 3 已经安装。)
- pip 安装 wfastcgi
- 运行 wfastcgi 启用
- 在IIS下建立新站点
- 为 wfastcgi 添加了一个处理程序
- 已修改 Web.config
运行 来自 localhost returns 我期望的输出。但是,当我从sitename访问该网站时,返回如下错误(省略路径):
Error occurred while reading WSGI handler:
Traceback (most recent call last):
File "wfastcgi.py", line 791, in main
env, handler = read_wsgi_handler(response.physical_path)
File "wfastcgi.py", line 633, in read_wsgi_handler
handler = get_wsgi_handler(os.getenv("WSGI_HANDLER"))
File "wfastcgi.py", line 586, in get_wsgi_handler
raise Exception('WSGI_HANDLER env var must be set')
Exception: WSGI_HANDLER env var must be set
无论是在服务器上还是在域上的另一台机器上都是这种情况。似乎当从本地主机以外的任何地方请求应用程序时,环境都无法访问。没有任何内容写入 wfastcgi 日志。
我在下面包含了 app.py
和 Web.config
。我这里省略了scriptProcessor
路径,但是设置为wfastcgi-enable返回的值。
当 运行 来自 localhost 时,环境可用。 在 locahost 之外调用时如何使环境对应用程序可用?
app.py
from flask import Flask
myapp = Flask(__name__)
@myapp.route("/hello")
def hello():
return "Hello from flask!"
if __name__ == "__main__":
myapp.run(port=8080)
Web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appSettings>
<add key="WSGI_HANDLER" value="app.myapp" />
<add key="PYTHONPATH" value="c:/inetpub/wwwroot/flask-services/" />
<add key="WSGI_LOG" value="C:/TMP/logs/app.log" />
</appSettings>
<system.webServer>
<handlers>
<add name="python-wfastcgi" path="*" verb="*" modules="FastCgiModule" scriptProcessor="[Omitted]" resourceType="Unspecified" requireAccess="Script" />
</handlers>
</system.webServer>
</configuration>
我们最近在使用 IIS 7、Flask 0.12 和 Python 3.6.4 时遇到了类似的问题。您的 web.config
看起来不错。两条建议:
- 为您的脚本处理器使用
virtualenv
。它避免了使用系统级 Python 安装的副作用。这样调试起来更容易。 - 在 IIS 中仔细检查 IIS_IUSRS 和 IUSR 对您的 Python 路径中的文件夹具有修改权限。
我在 web.config
中添加了同样的错误<appSettings>
<!-- Required Settings -->
<add key="WSGI_HANDLER" value="uploader.wsgi.application" />
<add key="WSGI_LOG" value="C:\call-uploader-backend\Logs\my_app.log" />
<add key="PYTHONPATH" value="C:\call-uploader-backend\uploader\" />
<!-- Optional settings -->
<add key="DJANGO_SETTINGS_MODULE" value="uploader.settings" />
</appSettings>