應(yīng)用的配置通常都是基于他們部署的環(huán)境。Vapor為用戶自定義提供了靈活的配置選擇。
QuickStart
Vapor應(yīng)用的配置文件放在Config文件夾里,下面以servers的配置為例:
./
├── Config/
│ ├── servers.json
文件內(nèi)容如下:
{
"default": {
"port": "$PORT:8080",
"host": "0.0.0.0",
"securityLayer": "none"
}
}
默認(rèn)配置server是http服務(wù)器,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"
}
}
采用如下代碼可以在應(yīng)用里獲取自定義的配置:
let customValue = drop.config["servers", "http", "custom-key"]?.string ?? "default"
Config Syntax(配置語法)
可以使用app.config[<#file-name#>, <#path#>, <#to#>, <#file#>]這樣的語法直接訪問配置內(nèi)容,假設(shè)我們創(chuàng)建了一個keys.json文件,并且有如下代碼:
{
"test-names": [
"joe",
"jane",
"sara"
],
"mongo": {
"url" : "www.customMongoUrl.com"
}
}
我可以通過將第一個下標(biāo)設(shè)置為keys來訪問這個文件,獲取第一個名字或者獲取mongo url:
let name = drop.config["keys", "test-names", 0]?.string ?? "default"
let mongoUrl = drop.config["keys", "mongo", "url"]?.string ?? "default"
Advanced Configurations(高級配置)
默認(rèn)配置可以滿足基本需求,但是在復(fù)雜環(huán)境下就不能只采用默認(rèn)配置了,比如開發(fā)和生產(chǎn)環(huán)境使用不同的host。在這種復(fù)雜的環(huán)境下我們需要在Config/目錄下傳創(chuàng)建不同的配置文件。下面的目錄就是針對不同的環(huán)境設(shè)置不同的配置:
WorkingDirectory/
├── Config/
│ ├── servers.json
│ ├── production/
│ │ └── servers.json
│ ├── development/
│ │ └── servers.json
│ └── secrets/
│ └── servers.json
可以使用
--env=指定運(yùn)行環(huán)境。自定義的環(huán)境也是支持的,production,development, 和testing是Vapor默認(rèn)提供的。
$ vapor run --env=production
優(yōu)先級:從上到下依次降低。
- CLI (see below)
- Config/secrets/
- Config/name-of-environment/
- Config/
也就是說,如果用戶使用app.config["servers", "host"],程序會優(yōu)先從CLI中搜索對應(yīng)的key,然后是secrets/,然后往下繼續(xù)搜索。
例如:
servers.json
{
"http": {
"host": "0.0.0.0",
"port": 9000
}
}
production/servers.json
{
"http": {
"host": "127.0.0.1",
"port": "$PORT"
}
}
“$ NAME”語法可用于訪問環(huán)境變量的所有值
請注意,servers.json和production/servers.json中定義了相同的key:“host”,“post”,在我們的應(yīng)用中會訪問:
// 根據(jù)上面的配置會加載 0.0.0.0 or 127.0.0.1
let host = drop.config["servers", "http", "host"]?.string ?? "0.0.0.0"
// 會加載9000或者環(huán)境變量中可以獲取的port
let port = drop.config["servers", "http", "port"]?.int ?? 9000
COMMAND LINE(命令行)
除了Config/文件夾下的json文件外,我們也可以使用命令行傳參的方法進(jìn)行配置,這些值默認(rèn)保存在“cli”文件中,但是也可以獲取更豐富的選項(xiàng)。
- --KEY=VALUE
通過CLI命令行設(shè)置的參數(shù)可以通過config的cli文件訪問,例如:
--mongo-password=$MONGO_PASSWORD
在程序中我們可以這樣訪問:
let mongoPassword = drop.config["cli", "mongo-password"]?.string
- --CONFIG:FILE-NAME.KEY=CUSTOM-VALUE
如果你希望將命令行參數(shù)設(shè)置為除“cli”之外的文件,則可以使用此更高級的規(guī)范。例如,以下CLI命令:
--config:keys.analytics=124ZH61F
在程序中我們可以這樣訪問:
let analyticsKey = drop.config["keys", "analytics"]?.string
<b>總結(jié):</b>Config文檔主要是介紹了如何進(jìn)行Config、Config的語法(json),根據(jù)環(huán)境分別配置、配置文件的優(yōu)先級、以及使用CLI命令行進(jìn)行配置等內(nèi)容。(CLI命令行配置我也不懂,暫時放這,有空再研究吧。)