我已经在VENV中配置了基本的Flask web示例,现在它通过FastCGI通过IIS正确发布
这是我的小样本
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, World, from Flask!"
还有web.config,更复杂一点:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="PythonHandler" path="*" verb="*" modules="FastCgiModule"
scriptProcessor="F:\Appl\flask\venv\Scripts\python.exe|F:\Appl\flask\venv\Lib\site-packages\wfastcgi.py"
resourceType="Unspecified" requireAccess="Script" />
</handlers>
</system.webServer>
<appSettings>
<add key="PYTHONPATH" value="F:\Appl\flask" />
<!-- Flask apps only: change the project name to match your app -->
<add key="WSGI_HANDLER" value="sample00.app" />
<add key="WSGI_LOG" value="F:\Appl\flask\wfastcgi.log" />
</appSettings>
</configuration>
经过一些尝试和错误,我发现我可以进入IIS管理器>;处理器映射>;选择我的“pythonnandler”,编辑“Executable(optional)”,它检查路径是否正确,并要求我激活处理程序,然后我可以回答“yes”,最终它会按照预期工作
到目前为止还不错。 现在,我想在IIS中设置它,不是作为一个单独的网站,而是作为另一个现有网站下的新应用程序。是否有可能,或者是否有文件表明这是不允许的?我们可以结束这个问题,或者将其标记为重复的问题,但到目前为止,我无法找到关于这一特定点的先前答案。 无论如何,我已经尝试过了,但是我收到了一个404页面错误。。。比如,如果请求没有正确地转发给cgi处理程序,那么我怀疑在IIS应用程序级别管理Flask应用程序时可能会出现问题,是这样还是我做错了什么
要点很简单,在应用程序级别查看IIS中的基本设置,请参见下面的图像示例
虚拟路径(
/flask
在上述情况下)从IIS传递到FastCGI处理程序,因此必须在Flask应用程序中对其进行管理,例如,您可以将路由定义为:并且它将正确地显示在您的浏览器中(请注意,最后的
/
将表示不同的url,因此这样的输入错误也可能导致404错误)结论是,您完全可以在应用程序级别运行Flask FastCGI,而不仅仅是在IIS中的网站级别
您还需要在静态文件夹之前添加虚拟路径:
最后一个建议:如果您有一个类似
然后
iisreset /restart
使新的环境变量对IIS可见,或者更好地-使用上面的python-dotenv module从
.env
文件中读取环境变量,但我也会启用标志来监控服务器级IIS的fastcgi设置中对文件的更改,以便在更新app_settings.cfg(其中我定义了一个版本号参数)时重新加载flask应用程序的python句柄.相关问题 更多 >
编程相关推荐