# 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. ```swift 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 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 swift run App serve -e prod ``` ## Procesvariabelen `Environment` biedt een eenvoudige, string-gebaseerde API voor toegang tot de omgevingsvariabelen van het proces. ```swift let foo = Environment.get("FOO") print(foo) // String? ``` In aanvulling op `get`, biedt `Environment` een dynamische lid lookup API via `process`. ```swift let foo = Environment.process.FOO print(foo) // String? ``` Wanneer u uw app in de terminal draait, kunt u omgevingsvariabelen instellen met `export`. ```sh 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: ```sh FOO=BAR ``` Wanneer uw applicatie opstart, heeft u toegang tot de inhoud van dit bestand zoals andere proces omgevingsvariabelen. ```swift 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`: ```gitignore .env.* ``` Wanneer het project wordt gekloond naar een nieuwe computer, kan het sjabloon `.env` bestand worden gekopieerd en de juiste waarden worden ingevoegd. ```sh 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. ```swift extension Environment { static var staging: Environment { .custom(name: "staging") } } ``` De omgeving van de applicatie wordt meestal ingesteld in `entrypoint.swift` met `Environment.detect()`. ```swift @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. ```swift 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.