通过IIS中的FastCGI在应用程序级别而不是网站级别运行Flask

2024-04-24 00:02:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经在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应用程序时可能会出现问题,是这样还是我做错了什么


Tags: keynamefromaddwebapp应用程序flask
1条回答
网友
1楼 · 发布于 2024-04-24 00:02:18

要点很简单,在应用程序级别查看IIS中的基本设置,请参见下面的图像示例

enter image description here

虚拟路径/flask在上述情况下)从IIS传递到FastCGI处理程序,因此必须在Flask应用程序中对其进行管理,例如,您可以将路由定义为:

@app.route("/flask")
def hello():

并且它将正确地显示在您的浏览器中(请注意,最后的/将表示不同的url,因此这样的输入错误也可能导致404错误)

结论是,您完全可以在应用程序级别运行Flask FastCGI,而不仅仅是在IIS中的网站级别

您还需要在静态文件夹之前添加虚拟路径:

app = Flask(__name__, static_url_path='/flask/static')

最后一个建议:如果您有一个类似

app.config.from_object(Config())
if environ.get('FLASK_FREIGHT_SETTINGS') is not None:
 app.config.from_envvar('FLASK_FREIGHT_SETTINGS')

然后iisreset /restart使新的环境变量对IIS可见,或者更好地-

from dotenv import load_dotenv
load_dotenv()

使用上面的python-dotenv module.env文件中读取环境变量,但我也会启用标志来监控服务器级IIS的fastcgi设置中对文件的更改,以便在更新app_settings.cfg(其中我定义了一个版本号参数)时重新加载flask应用程序的python句柄.

相关问题 更多 >