我正在尝试使用 Windows Server 2016 上 IIS 中的 HttpPlatformHandler 模块来使用 Flask 为用 Python 编写的基本应用程序提供服务。Python 环境使用 进行管理pipenv
,Flask 应用程序目前只是一个基本的“Hello World”。这是我的web.config
文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers accessPolicy="Read, Execute, Script">
<add name="Flask" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" />
</handlers>
<httpPlatform processPath="C:\Users\dummyuser\.virtualenvs\inventory-z_DIyVzW\Scripts\flask.exe" arguments="run --port=%HTTP_PLATFORM_PORT%" stdoutLogEnabled="true">
<environmentVariables>
<environmentVariable name="FLASK_APP" value="hello.py" />
<environmentVariable name="PYTHONPATH" value="S:\Web\inventory" />
</environmentVariables>
</httpPlatform>
</system.webServer>
<system.web>
<customErrors mode="Off" />
</system.web>
</configuration>
如果我从命令行启动应用程序并直接访问它,它运行良好,但当我尝试通过 IIS 访问它时,它就会停滞,我永远看不到任何输出。日志文件通常如下所示:
Traceback (most recent call last):
File "C:\Program Files\Python37\Lib\runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "C:\Program Files\Python37\Lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "C:\Users\dummyuser\.virtualenvs\inventory-z_DIyVzW\Scripts\flask.exe\__main__.py", line 5, in <module>
ModuleNotFoundError: No module named 'flask'
我如何让 IIS 启动并提供该应用程序?
(在研究这个问题时,我发现了一些使用 Waitress 之类的 WSGI 服务器的建议,但我认为使用 HttpPlatformHandler 而不是 FastCGI 方法意味着不需要 WSGI 服务器。我误解了这里的交互吗?)
答案1
- 不要使用虚拟环境,因为分散的文件会使调整文件权限变得困难。
web.config
当您使用女服务员作为应用服务器时,请考虑以下设置,
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" requireAccess="Script" />
</handlers>
<httpPlatform stdoutLogEnabled="true" stdoutLogFile=".\python.log" startupTimeLimit="20" processPath="C:\Users\lextudio\AppData\Local\Programs\Python\Python310\python.exe" arguments="-m waitress --port %HTTP_PLATFORM_PORT% wsgi:application">
</httpPlatform>
</system.webServer>
</configuration>
更多详细信息和故障排除提示可参见这个帖子。
关于您关于开发服务器与生产应用服务器的问题,性能上的差异仍然是一个重要因素。