门户网站和本地

时间:2019-06-19 23:20:55

标签: azure azure-functions

我正在使用Azure函数,并且有问题。 我用以下变量声明了一个local.settings.json文件:

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "TopicEndpoint": "my endpoint"
  }  
}

这允许我的azure函数使用以下命令读取设置:

var config = new ConfigurationBuilder()
        .SetBasePath(context.FunctionAppDirectory)
        .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
        .AddEnvironmentVariables()
        .Build();
var myTopic = config["Values:TopicEndpoint"];

这使我可以通过以下方式发布变量并将其导出到门户:

func azure functionapp publish myfunctionapp --publish-local-settings -i

但是,在发布并验证该值在门户网站的“应用程序设置”中时,“ Values:TopicEndpoint”不存在。

为了能够访问其值,我必须将变量直接放在json根下:

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
  }  
  "TopicEndpoint": "my endpoint"
}

这样,我可以在本地开发环境以及Azure上安全地使用config['TopicEndpoint']。但是,这违反了--publish-local-settings -i的目的,因为它仅导出在“值”键下找到的值,因此我必须手动创建所有设置。

您知道为什么会发生这种情况,或者我可能缺少什么吗?

2 个答案:

答案 0 :(得分:1)

我猜您使用它的方式应该有所不同。问题是SQLite.framework come as environment variables中的值是自动生成的,因此您完全不必担心使用该文件。这就是我们在项目中执行此操作的方法,并且可以在所有环境中使用。

// swift-tools-version:5.1
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
    name: "SQLiteDB",
    products: [
        // Products define the executables and libraries produced by a package, and make them visible to other packages.
        .library(
            name: "SQLiteDB",
            targets: ["SQLiteDB"]),
    ],
    dependencies: [

        // .package(url: /* package url */, from: "1.0.0"),
    ],
    targets: [
        // Targets are the basic building blocks of a package. A target can define a module or a test suite.
        // Targets can depend on other targets in this package, and on products in packages which this package depends on.
        .target(
            name: "SQLiteDB",
            dependencies: []),
        .testTarget(
            name: "SQLiteDBTests",
            dependencies: ["SQLiteDB"]),
    ]
)

答案 1 :(得分:1)

我发现了问题。 问题是我在这里建议添加一个单独的secret.settings.json https://www.tomfaltesek.com/azure-functions-local-settings-json-and-source-control/ 因此,我正在像这样加载我的配置:

void uart_send_byte(unsigned char byte)
{
        while(!(UCSR1A&(1<<UDRE1)));
        UDR1 = byte;
}

void uart_send_string(unsigned char *str, unsigned char len)
{
        int i;
        for(i=0;i<len;i++) {
                if(!(*(str+i)))
                        break;
                uart_send_byte(*(str+i));
        }
}

我的本​​地设置文件如下:

var config = new ConfigurationBuilder()
        .SetBasePath(context.FunctionAppDirectory)
        .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
        .AddJsonFile("secret.settings.json", optional: true, reloadOnChange: true)
        .AddEnvironmentVariables()
        .Build();

我的秘密设置是这样的:

{
  "Values": {
      "TopicEndpoint": "my endpoint"
  }  
}

这引起了冲突,因此我需要从secret.settings.json中删除“ Values”键,使其看起来像这样:

{
  "Values": {
      "TopicKey": "my key"
  }  
}

这样,我既可以使用{ "TopicKey": "my key" } 在本地设置文件中部署值,也可以将这两个文件用作环境变量。