多环境配置

一般项目都会配置多个环境,比如开发环境、测试环境、生产环境等等。Vapor 也支持各个环境的配置。

.env 文件

Vapor 默认支持 3 种环境,分别为 productiondevelopmenttesting。在项目根目录下创建不同的 .env 文件,可表示对应环境的配置。比如:.env.development.env.testing.env.production

名称 缩写 描述
production prod 生产环境
development dev 开发环境
testing test 测试环境

指定环境

通过执行如下命令可指定对应环境。

注意

本教程使用的是 Vapor Toolbox Beta 版)

  • 生产环境
vapor-beta run serve --env production

vapor-beta run serve -e prod
  • 测试环境
vapor-beta run serve --env testing

vapor-beta run serve -e test
  • 开发环境
vapor-beta run serve --env development

vapor-beta run serve -e dev

另外,也可以通过代码直接指定环境。

  • 代码(原始)
var env = try Environment.detect()

try LoggingSystem.bootstrap(from: &env)
let app = Application(env)
defer { app.shutdown() }
try configure(app)
try app.run()
  • 代码(改造后)
var env = Environment(name: "testing", arguments: ["vapor"])

try LoggingSystem.bootstrap(from: &env)
let app = Application(env)
defer { app.shutdown() }
try configure(app)
try app.run()

验证

如果在 .env 文件中定义了一个 Key-Value 数据,比如 Keyname

  • .env.production
name=SwiftMic_production
  • .env.testing
name=SwiftMic_testing
  • .env.development
name=SwiftMic_development

启动时指定对应环境,就可以获取到该环境下的 Value。代码如下:

let nameValue = Environment.get("name")

另外,代码中可以通过如下方式来区分当前运行环境。

switch app.environment {
case .production:
    print("production")
case .testing:
    print("testing")
case .development:
    print("development")
case .custom(name: "staging"):
    print("staging")
default:
    print("other")
}

扩展

除了 Vapor 默认支持的 3 种环境外,也可以按需自定义新的环境。比如新增一个 staging 环境,只需要创建新文件 .env.staging 即可。

源码

可参考源码:ExampleEnvironment