首页 > 解决方案 > 在 Web 应用程序中禁用副本服务

问题描述

我编写了一个从文件系统读取以确定状态的服务,并保持该状态一段时间,而不是不断更新文件系统。因此,该服务只有一个实例至关重要。现在,Web Apps 似乎默认实例化了 Flask 服务的两个实例。

这是记录在案的事情,还是我理解某些配置错误?它们实际上是复制品还是其他机制?最重要的是,如何禁用此功能?

我的应用工厂:

from flask import Flask


def create():
    app = Flask(__name__)
    d = {'t': 0}

    @app.route('/', methods=['GET'])
    def main():
        d['t'] += 1
        return 'Calls: %d' % d['t'], 200

    return app

并且web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="PYTHONPATH" value="D:\home\site\wwwroot" />
    <add key="WSGI_HANDLER" value="app.create()" />
    <add key="WSGI_LOG" value="D:\home\site\wwwroot\wsgi.log" />
  </appSettings>
  <system.webServer>
    <handlers>
        <add name="PythonHandler" path="*" verb="*" modules="FastCgiModule"
        scriptProcessor="D:\home\python364x64\python.exe|D:\home\python364x64\wfastcgi.py"
        resourceType="Unspecified" requireAccess="Script"/>
    </handlers>
  </system.webServer>
</configuration>

启动后,这些调用返回一个序列1, 1, 2, 2, 3, 3...,对我来说,这表明有两个实例正在运行,并且有一个平衡器循环这两个实例。该模式似乎相当规则,例如不跳过其他服务。

标签: pythonazureiisazure-web-app-servicewfastcgi

解决方案


如果我的理解正确,每个 Azure WebApp 都有一个关联的“scm”服务站点,它运行 Kudu 和其他站点扩展。

此外,如 GitHub 页面中所述,您可以选择对用户站点和 scm 站点或其他站点使用相同的过程。

WEBSITE_DISABLE_SCM_SEPARATION=true - 启用分离时(默认),主站点和 scm 站点在不同的沙箱中运行。一些结果行为:

• 通过分离,当您停止站点时,scm 站点仍在运行,您可以继续使用 git 和 msdeploy。• 通过分离,Main 和 scm 站点各有自己的本地文件。因此,您不会从 Kudu 控制台看到主站点的临时文件。注意:关闭分离被认为是不再完全支持的传统模式。有关更多详细信息,请参阅文档

请让我知道这是您要查找的内容还是其他内容。


推荐阅读