
# Isolering

Rudel er et overlay-system, der vælges pr. anmodning. En valgt anmodning bruger sandkassens databasetabeller og temafiler, mens den stadig kører gennem værtens WordPress-installation.

## Isoleret pr. sandkasse

### WordPress-tabeller

Hver sandkasse får et genereret tabelpræfiks: værtens præfiks plus de første syv hexadecimale tegn fra sandkasse-ID'ets MD5.

```text
wp_b65338d_options
wp_b65338d_posts
wp_b65338d_users
```

Rudel skifter WordPress-tabelpræfikset, før WordPress er færdig med at starte, så alle forespørgsler i en sandkasseanmodning læser og skriver til sandkassens kopier.

### Brugere

Tabellerne `users` og `usermeta` klones sammen med resten. En sandkasse starter med værtens brugere og adgangskoder fra oprettelsestidspunktet. Derefter påvirker brugere, der oprettes, ændres eller slettes i sandkassen, ikke værten, og ændringer på værten overføres ikke til sandkassen.

### Aktive temafiler

Det valgte tema kopieres til sandkassemappen:

```text
wp-content/rudel-environments/{environment_id}/themes/{theme_slug}
```

Hvis temaet er et undertema, kopierer Rudel også overtemaet, så skabelonforholdet forbliver gyldigt. En sandkasse viser altid det tema, der blev registreret ved oprettelsen; temaskift i sandkassen har ingen effekt.

## Delt med værten

- WordPress-kernen
- pluginfiler
- uploadede mediefiler

Et plugin, der installeres eller opdateres på værten, installeres eller opdateres for alle sandkasser. Hvilke plugins der er aktive, gemmes i indstillingstabellen, så aktiveringstilstanden er separat for hver sandkasse. Uploads fra en sandkasse placeres i værtens uploadmappe. Det holder oprettelsen af sandkasser hurtig og undgår at erstatte `WP_CONTENT_DIR` globalt.

Sørg for, at Rudel selv forbliver aktivt i alle sandkasser. Dets blokering af e-mail og temaoverlay kører fra pluginnet, og hvis det deaktiveres, mens en sandkasse er valgt, fjernes bootstrapping-linjen også fra den delte `wp-config.php`, hvilket slår valg af sandkasse fra for hele installationen ([issue #13](https://github.com/inline0/rudel/issues/13)).

## Valg af sandkasse

HTTP-anmodninger vælger en sandkasse via:

- headeren `X-Rudel-Environment` (ældre alias `X-Rudel-Sandbox`)
- cookien `rudel_environment` (ældre alias `rudel_sandbox`)

Rudel sætter eller rydder aldrig cookien. Slet den for at vende tilbage til værten; punktet Sandbox i adminbjælken linker til værtens URL, men lader cookien være ([issue #10](https://github.com/inline0/rudel/issues/10)).

WP-CLI-kommandoer vælger en sandkasse via:

- miljøvariablen `RUDEL_ENVIRONMENT`
- en `--url`, hvis vært begynder med sandkasse-ID'et, f.eks. `--url=http://alpha-3be7.example.test`

Vælgeren er ikke godkendt. Enhver klient, der kan nå webstedet og sender et gyldigt sandkasse-ID, får adgang til den sandkasse, og sandkasse-ID'er (navn plus fire hexadecimale tegn) er lette at gætte. Betragt ikke valg af sandkasse som en adgangskontrolgrænse; beskyt en offentlig vært på webserver- eller netværksniveau.

## Standardindstillinger for anmodninger

For en valgt anmodning gør Rudel følgende:

- blokerer udgående e-mail via et `pre_wp_mail`-filter
- sætter `WP_TEMP_DIR` til sandkassens `tmp`-mappe
- sætter `WP_CACHE_KEY_SALT` til en sandkassespecifik værdi, så vedvarende objektcaches holder sandkassernes nøgler adskilt
- tilbyder logning af `WP_DEBUG` til sandkassens `debug.log` samt godkendelsesnøgler og salte, der er afledt af sandkasse-ID'et

Bootstrap-koden definerer kun hver af disse konstanter, hvis `wp-config.php` ikke allerede har defineret den. En standard-`wp-config.php` definerer `WP_DEBUG` samt alle nøgler og salte, så sandkasseanmodninger på en sådan installation bruger værtens debugindstilling og nøgler og salte ([issue #4](https://github.com/inline0/rudel/issues/4)). Da brugerne også klones, kan en login-cookie fra værten være gyldig i en sandkasse.

## Kørselsmetadata

Rudels kørselsmetadata forbliver i værtens WordPress-tabeller for MySQL:

```text
wp_rudel_environments
wp_rudel_worktrees
```

Disse tabeller er Rudels autoritative datakilde. Miljømapper indeholder administrerede filer og artefakter, ikke kørselsregistreringstilstand.
