【问题标题】:Why is Development configuration being loaded for Azure Function when it should be Production configuration?为什么要为 Azure Function 加载开发配置,而它应该是生产配置?
【发布时间】:2019-10-15 23:41:21
【问题描述】:

我已将 Azure 函数部署到 Azure。我没有在应用程序设置中的任何位置或环境中的任何其他位置指定 AZURE_FUNCTIONS_ENVIRONMENT 为“开发”。

但是,当下面的代码执行时

var configurationBuilder = new ConfigurationBuilder()
    .SetBasePath(basePath)
    .AddJsonFile("appsettings.json", true, true)
    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", true, reloadOnChange: true);

$"appsettings.{env.EnvironmentName}.json"resolves 为“appsettings.Development.json”,因此会加载开发配置而不是生产配置。

当我通过 Kudu 查看该环境的环境变量时,我根本看不到任何对 Development 的引用,实际上看到 WEBSITE_SLOT_NAME = Production 已配置(尽管这不一定与函数相关。

我的理解是,如果没有指定环境,则运行时默认为生产。因此,这对我来说意味着 Development 是在某处指定的。不过我不知道去哪里找。

问题: 是否可以在应用程序设置或环境变量中没有的地方指定开发?如果有,在哪里?有什么地方可以找到它,还是有任何其他解释为什么要加载开发配置而不是生产配置?我应该怎么做才能明确确保在生产环境中加载生产配置?

【问题讨论】:

    标签: azure environment-variables azure-functions azure-deployment


    【解决方案1】:

    不幸的是,在我手动指定我想要来自环境变量的数据之前,我无法让它工作:

    var environment = Environment.GetEnvironmentVariable("AZURE_FUNCTIONS_ENVIRONMENT");
    
    var configurationBuilder = new ConfigurationBuilder()
        .SetBasePath(basePath)
        .AddJsonFile("appsettings.json", true, true)
        .AddJsonFile($"appsettings.{environment}.json", true, reloadOnChange: true);
    

    要求我在 Azure 环境的应用程序设置中指定值:

    并在launchSettings.json文件中作为

    "environmentVariables": {
      "AZURE_FUNCTIONS_ENVIRONMENT": "Development"
    }
    

    【讨论】:

    • 您好,您检查过我下面的答案了吗?
    【解决方案2】:

    .NET Core 将ASPNETCORE_ENVIRONMENTHosting:Environment 环境变量用于env.EnvironmentNameWEBSITE_SLOT_NAME 由 Azure 设置,表示托管应用的部署槽的名称。

    【讨论】:

      【解决方案3】:

      如果你想有更好的控制,你最好在App设置或环境变量中设置它。

      仅针对您的情况,您应该记住在使用代码时:

      .AddJsonFile("appsettings.json", true, true)
      .AddJsonFile($"appsettings.{env.EnvironmentName}.json", true, reloadOnChange: true);
      

      如果 appsettings.json 和 appsettings.development.json 都存在,则第二个 .AddJsonFile() 方法应始终覆盖第一个 .AddJsonFile() 方法。

      所以如果你只是想确保它使用生产配置而不使用应用设置或环境变量,只需在第二个.AddJsonFile() 方法中指定你的生产配置(它是 appsettings.json 文件)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-17
        • 2012-09-11
        • 1970-01-01
        • 1970-01-01
        • 2018-03-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多