应用的配置通常都是基于他们部署的环境。Vapor为用户自定义提供了灵活的配置选择。
QuickStart
Vapor应用的配置文件放在Config
文件夹里,下面以servers
的配置为例:
./
├── Config/
│ ├── servers.json
文件内容如下:
{
"default": {
"port": "$PORT:8080",
"host": "0.0.0.0",
"securityLayer": "none"
}
}
默认配置server
是http服务器
,host:0.0.0.0
,端口号:8080
,那么请求的地址就是:http://localhost:8080
。
Custom Keys(自定义键值)
打开servers.json
文件,在json
里添加自定义键值对
{
"http": {
"host": "0.0.0.0",
"port": 8080,
"custom-key": "custom value"
}
}
采用如下代码可以在应用里获取自定义的配置:
let customValue = drop.config["servers", "http", "custom-key"]?.string ?? "default"
Config Syntax(配置语法)
可以使用app.config[<#file-name#>, <#path#>, <#to#>, <#file#>]
这样的语法直接访问配置内容,假设我们创建了一个keys.json
文件,并且有如下代码:
{
"test-names": [
"joe",
"jane",
"sara"
],
"mongo": {
"url" : "www.customMongoUrl.com"
}
}
我可以通过将第一个下标设置为keys
来访问这个文件,获取第一个名字或者获取mongo url
:
let name = drop.config["keys", "test-names", 0]?.string ?? "default"
let mongoUrl = drop.config["keys", "mongo", "url"]?.string ?? "default"
Advanced Configurations(高级配置)
默认配置可以满足基本需求,但是在复杂环境下就不能只采用默认配置了,比如开发和生产环境使用不同的host
。在这种复杂的环境下我们需要在Config/
目录下传创建不同的配置文件。下面的目录就是针对不同的环境设置不同的配置:
WorkingDirectory/
├── Config/
│ ├── servers.json
│ ├── production/
│ │ └── servers.json
│ ├── development/
│ │ └── servers.json
│ └── secrets/
│ └── servers.json
可以使用
--env=
指定运行环境。自定义的环境也是支持的,production
,development
, 和testing
是Vapor
默认提供的。
$ vapor run --env=production
优先级:从上到下依次降低。
- CLI (see below)
- Config/secrets/
- Config/name-of-environment/
- Config/
也就是说,如果用户使用app.config["servers", "host"]
,程序会优先从CLI
中搜索对应的key,然后是secrets/
,然后往下继续搜索。
例如:
servers.json
{
"http": {
"host": "0.0.0.0",
"port": 9000
}
}
production/servers.json
{
"http": {
"host": "127.0.0.1",
"port": "$PORT"
}
}
“$ NAME”语法可用于访问环境变量的所有值
请注意,servers.json
和production/servers.json
中定义了相同的key:“host”,“post”,在我们的应用中会访问:
// 根据上面的配置会加载 0.0.0.0 or 127.0.0.1
let host = drop.config["servers", "http", "host"]?.string ?? "0.0.0.0"
// 会加载9000或者环境变量中可以获取的port
let port = drop.config["servers", "http", "port"]?.int ?? 9000
COMMAND LINE(命令行)
除了Config/
文件夹下的json文件外,我们也可以使用命令行传参的方法进行配置,这些值默认保存在“cli”文件中,但是也可以获取更丰富的选项。
- --KEY=VALUE
通过CLI命令行设置的参数可以通过config
的cli
文件访问,例如:
--mongo-password=$MONGO_PASSWORD
在程序中我们可以这样访问:
let mongoPassword = drop.config["cli", "mongo-password"]?.string
- --CONFIG:FILE-NAME.KEY=CUSTOM-VALUE
如果你希望将命令行参数设置为除“cli”之外的文件,则可以使用此更高级的规范。例如,以下CLI命令:
--config:keys.analytics=124ZH61F
在程序中我们可以这样访问:
let analyticsKey = drop.config["keys", "analytics"]?.string
<b>总结:</b>Config文档主要是介绍了如何进行Config、Config的语法(json),根据环境分别配置、配置文件的优先级、以及使用CLI命令行进行配置等内容。(CLI命令行配置我也不懂,暂时放这,有空再研究吧。)