Omgeving¶
Vapor's Environment API helpt u om uw app dynamisch te configureren. Standaard zal uw app de development
omgeving gebruiken. U kunt andere nuttige omgevingen definiëren zoals production
of staging
en wijzigen hoe uw app in elk geval wordt geconfigureerd. U kunt ook variabelen laden uit de omgeving van het proces of .env
(dotenv) bestanden, afhankelijk van uw behoeften.
Om toegang te krijgen tot de huidige omgeving, gebruik app.environment
. Je kunt deze eigenschap aanzetten in configure(_:)
om verschillende configuratie logica uit te voeren.
switch app.environment {
case .production:
app.databases.use(....)
default:
app.databases.use(...)
}
Verander De Omgeving¶
Standaard zal uw app in de development
omgeving draaien. U kunt dit veranderen door de --env
(-e
) vlag mee te geven tijdens het opstarten van de app.
swift run App serve --env production
Vapor omvat de volgende omgevingen:
naam | kort | beschrijving |
---|---|---|
production | prod | Uitgerold naar uw gebruikers. |
development | dev | Lokale ontwikkeling. |
testing | test | Voor unit testen. |
Info
De production
omgeving zal standaard op notice
niveau loggen tenzij anders aangegeven. Alle andere omgevingen hebben standaard info
.
Je kunt de volledige of korte naam doorgeven aan de --env
(-e
) vlag.
swift run App serve -e prod
Procesvariabelen¶
Environment
biedt een eenvoudige, string-gebaseerde API voor toegang tot de omgevingsvariabelen van het proces.
let foo = Environment.get("FOO")
print(foo) // String?
In aanvulling op get
, biedt Environment
een dynamische lid lookup API via process
.
let foo = Environment.process.FOO
print(foo) // String?
Wanneer u uw app in de terminal draait, kunt u omgevingsvariabelen instellen met export
.
export FOO=BAR
swift run App serve
Wanneer u uw app in Xcode uitvoert, kunt u omgevingsvariabelen instellen door het App
schema te bewerken.
.env (dotenv)¶
Dotenv bestanden bevatten een lijst van sleutel-waarde paren die automatisch in de omgeving geladen worden. Deze bestanden maken het gemakkelijk om omgevingsvariabelen te configureren zonder ze handmatig te hoeven instellen.
Vapor zal zoeken naar dotenv bestanden in de huidige werkmap. Als u Xcode gebruikt, zorg er dan voor dat u de werkdirectory instelt door het App
schema aan te passen.
Veronderstel dat het volgende .env
bestand in de hoofdmap van je project staat:
FOO=BAR
Wanneer uw applicatie opstart, heeft u toegang tot de inhoud van dit bestand zoals andere proces omgevingsvariabelen.
let foo = Environment.get("FOO")
print(foo) // String?
Info
Variabelen gespecificeerd in .env
bestanden zullen variabelen die al bestaan in de procesomgeving niet overschrijven.
Naast .env
, zal Vapor ook proberen om een dotenv bestand te laden voor de huidige omgeving. Bijvoorbeeld, wanneer Vapor zich in de development
omgeving bevindt, zal Vapor .env.development
laden. Alle waarden in het specifieke omgevingsbestand zullen voorrang krijgen boven het algemene .env
bestand.
Een typisch patroon is voor projecten om een .env
bestand op te nemen als een sjabloon met standaard waarden. Specifieke omgevingsbestanden worden genegeerd met het volgende patroon in .gitignore
:
.env.*
Wanneer het project wordt gekloond naar een nieuwe computer, kan het sjabloon .env
bestand worden gekopieerd en de juiste waarden worden ingevoegd.
cp .env .env.development
vim .env.development
Warning
Dotenv bestanden met gevoelige informatie zoals wachtwoorden mogen niet worden vastgelegd in versiebeheer.
Als je problemen hebt met het laden van dotenv bestanden, probeer dan debug logging in te schakelen met --log debug
voor meer informatie.
Aangepaste Omgevingen¶
Om een aangepaste omgevingsnaam te definiëren, breidt u Environment
uit.
extension Environment {
static var staging: Environment {
.custom(name: "staging")
}
}
De omgeving van de applicatie wordt meestal ingesteld in entrypoint.swift
met Environment.detect()
.
@main
enum Entrypoint {
static func main() async throws {
var env = try Environment.detect()
try LoggingSystem.bootstrap(from: &env)
let app = Application(env)
defer { app.shutdown() }
try await configure(app)
try await app.runFromAsyncMainEntrypoint()
}
}
De detect
methode gebruikt de commandoregel argumenten van het proces en parst de --env
vlag automatisch. Je kunt dit gedrag opheffen door een aangepaste Environment
struct te initialiseren.
let env = Environment(name: "testing", arguments: ["vapor"])
De argumenten array moet ten minste één argument bevatten dat de naam van het uitvoerbare bestand weergeeft. Verdere argumenten kunnen worden meegegeven om het doorgeven van argumenten via de commandoregel te simuleren. Dit is vooral nuttig voor testen.