我正在使用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
的目的,因为它仅导出在“值”键下找到的值,因此我必须手动创建所有设置。
您知道为什么会发生这种情况,或者我可能缺少什么吗?
答案 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"
}
在本地设置文件中部署值,也可以将这两个文件用作环境变量。