
# Izolacija

Rudel je sistem prekrivnih plasti, ki se izberejo za posamezno zahtevo. Izbrana zahteva uporablja tabele zbirke podatkov in datoteke teme peskovnega okolja, vendar še vedno teče prek gostiteljske namestitve WordPress.

## Izolirano v posameznem peskovnem okolju

### Tabele WordPress

Vsako peskovno okolje dobi ustvarjeno predpono tabel: gostiteljsko predpono in prvih sedem šestnajstiških znakov MD5 ID-ja peskovnega okolja.

```text
wp_b65338d_options
wp_b65338d_posts
wp_b65338d_users
```

Rudel preklopi predpono tabel WordPress, preden se WordPress zažene do konca, zato vsaka poizvedba v zahtevi peskovnika bere iz kopij peskovnika in vanje zapisuje.

### Uporabniki

Tabeli `users` in `usermeta` se klonirata skupaj z ostalimi. Peskovno okolje ob ustvarjanju vsebuje uporabnike in gesla gostitelja; od takrat naprej ustvarjanje, spreminjanje ali brisanje uporabnikov v peskovnem okolju ne vpliva na gostitelja, spremembe na gostitelju pa ne dosežejo peskovnega okolja.

### Datoteke aktivne teme

Izbrana tema se kopira v imenik peskovnega okolja:

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

Če je tema podrejena, Rudel kopira tudi nadrejeno temo, tako da povezava s predlogo ostane veljavna. Peskovno okolje vedno streže temo, zabeleženo ob ustvarjanju; preklop teme v peskovnem okolju nima učinka.

## V skupni rabi z gostiteljem

- jedro WordPress
- datoteke vtičnikov
- naložene predstavnostne datoteke

Vtičnik, nameščen ali posodobljen na gostitelju, je nameščen oziroma posodobljen v vseh peskovnih okoljih. Kateri vtičniki so aktivni, je shranjeno v tabeli z možnostmi, zato je stanje aktivacije določeno za vsako peskovno okolje posebej. Naložene datoteke iz peskovnega okolja se shranijo v gostiteljski imenik za nalaganje. Tako je ustvarjanje peskovnega okolja hitro in prepreči globalno zamenjavo `WP_CONTENT_DIR`.

Ohranite aktiviran Rudel v vsakem peskovnem okolju. Njegovo blokiranje pošte in prekrivanje teme delujeta prek vtičnika, deaktiviranje, ko je izbrano peskovno okolje, pa iz skupne rabe odstrani tudi vrstico za zagon iz `wp-config.php`, s čimer se za celotno namestitev izklopi izbiranje peskovnih okolij ([težava št. 13](https://github.com/inline0/rudel/issues/13)).

## Izbira peskovnega okolja

Zahteve HTTP izberejo peskovno okolje prek:

- glave `X-Rudel-Environment` (starejši vzdevek `X-Rudel-Sandbox`)
- piškotka `rudel_environment` (starejši vzdevek `rudel_sandbox`)

Rudel nikoli ne nastavi ali izbriše piškotka. Izbrišite ga, da se vrnete na gostitelja; element Peskovno okolje v skrbniški vrstici vodi na gostiteljski URL, vendar piškotek ostane ([težava št. 10](https://github.com/inline0/rudel/issues/10)).

Ukazi WP-CLI izberejo peskovno okolje prek:

- spremenljivke okolja `RUDEL_ENVIRONMENT`
- `--url`, katerega gostitelj se začne z ID-jem peskovnega okolja, na primer `--url=http://alpha-3be7.example.test`

Izbirnik ne zahteva preverjanja pristnosti. Vsak odjemalec, ki lahko dostopa do mesta in pošlje veljaven ID peskovnega okolja, ga dobi, ID-je peskovnih okolij (ime in štirje šestnajstiški znaki) pa je lahko uganiti. Izbire peskovnega okolja ne obravnavajte kot meje za nadzor dostopa; javnega gostitelja zaščitite na ravni spletnega strežnika ali omrežja.

## Privzete nastavitve zahtev

Za izbrano zahtevo Rudel:

- blokira odhodno e-pošto s filtrom `pre_wp_mail`
- nastavi `WP_TEMP_DIR` na imenik `tmp` peskovnega okolja
- nastavi `WP_CACHE_KEY_SALT` na vrednost, značilno za peskovno okolje, da trajni predpomnilniki objektov ločijo ključe peskovnih okolij
- omogoči beleženje `WP_DEBUG` v peskovno okolje `debug.log` ter ključe in soli za preverjanje pristnosti, izpeljane iz ID-ja peskovnega okolja

Zagon določi vsako od teh konstant samo, če je `wp-config.php` še ni določil. Standardna namestitev `wp-config.php` določi `WP_DEBUG` ter vse ključe in soli, zato zahteve peskovnega okolja pri taki namestitvi uporabljajo gostiteljsko nastavitev za razhroščevanje ter gostiteljske ključe in soli ([težava št. 4](https://github.com/inline0/rudel/issues/4)). Ker so klonirani tudi uporabniki, je lahko prijavni piškotek gostitelja veljaven v peskovnem okolju.

## Metapodatki med izvajanjem

Metapodatki okolja Rudel med izvajanjem ostanejo v gostiteljskih tabelah WordPress MySQL:

```text
wp_rudel_environments
wp_rudel_worktrees
```

Te tabele so edini zanesljivi vir podatkov za Rudel. Imeniki okolij vsebujejo upravljane datoteke in artefakte, ne pa stanja registra med izvajanjem.
