# Omgevingen

Houd configuratie en runtime-data per omgeving gescheiden.

Een project draait meestal in drie omgevingen: ontwikkeling op je eigen machine, staging om te reviewen, en productie. De code is overal hetzelfde; wat verschilt, staat in `.env`.

## Instellingen per omgeving

| Instelling | Ontwikkeling | Staging | Productie |
|---|---|---|---|
| `APP_ENV` | `dev` | `stage` | `prod` |
| `SITE_URL` | `http://localhost` | het staging-adres | het publieke adres |
| `PEPPER` | een eigen | een eigen, of die van productie als staging een kopie van de data bevat | vast, nooit veranderd |
| Mailinstellingen | een testinbox, of geen | een testinbox | de echte afzender |

`APP_ENV` kiest het takenbestand van de scheduler (`schedule.inc`, `schedule.stage.inc`, `schedule.prod.inc`) en zet de requeststatistieken aan voor staging en productie. Houd elke `.env` buiten Git en op de machine waar hij bij hoort.

## Een site in een submap

Een site kan onder een pad draaien, zoals `https://staging.example.com/project/`. Zet `BASE_PATH=/project/` in `.env`. Schrijf interne links met `[#base-url#]` in templates en `nb.base_url` in scripts, en links in content vanaf de root van de site (`/contact`); Nimbly zet het basispad ervoor als de pagina wordt getoond.

## Data tussen omgevingen

Records, uploads en paginacontent staan in `ext/data/`. Kies waar content wordt bewerkt:

- **In ontwikkeling**, gecommit naar `ext/` en gedeployd zoals code. Productie wordt niet als editor gebruikt.
- **In productie**, door redacteuren. Het schema van productie draait dan `ext:sync`, dat de wijzigingen in `ext/` elk uur commit en naar de repository pusht, zodat de volgende deploy erop voortbouwt en ontwikkeling ze kan pullen.

Sessies, de jobwachtrij, de status van de scheduler, geschiedenis en caches zijn runtime-data. Die blijven buiten Git en op elke omgeving apart.

## Demo- en testsites

Geef een demonstratie- of testsite een eigen `ext/`-repository, met eigen records, media en gebruikers, in plaats van een kopie van een live applicatie. Onze demo-applicatie werkt zo.

## Na een deploy

Controleer op de omgeving zelf: de commit die draait, een pagina die is veranderd, de versie van de stylesheet, en `./nimbly schedule:status` voor de scheduler.
