
# Isoleerimine

Rudel on päringuga valitav ülekatete süsteem. Valitud päring kasutab liivakasti andmebaasi tabeleid ja liivakasti teemafaile, kuid käivitub endiselt hosti WordPress installi kaudu.

## Iga liivakasti eraldatus

### WordPress tabelid

Iga liivakast saab genereeritud tabeli eesliite: hosti eesliide pluss liivakasti ID MD5 esimesed seitse kuueteistkümnendmärki.

```text
wp_b65338d_options
wp_b65338d_posts
wp_b65338d_users
```

Rudel vahetab tabeli WordPress enne, kui WordPress on käivitumise lõpetanud, nii et liivakasti päringu iga päring loeb liivakasti koopiaid ja kirjutab nendesse.

### Kasutajad

Tabelid `users` ja `usermeta` kloonitakse koos ülejäänutega. Liivakast alustab loomise hetkel hosti kasutajate ja paroolidega; hiljem liivakastis loodud, muudetud või kustutatud kasutajad hosti ei mõjuta ning hostis tehtud muudatused liivakasti ei jõua.

### Aktiivse teema failid

Valitud teema kopeeritakse liivakasti kataloogi:

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

Kui teema on alateema, kopeerib Rudel ka emateema, et mallide seos jääks kehtima. Liivakast kasutab alati loomise ajal salvestatud teemat; teemade vahetamine liivakastis ei avalda mõju.

## Hostiga jagatud

- WordPress tuum
- pluginafailid
- üles laaditud meediafailid

Hostis installitud või uuendatud plugin installitakse või uuendatakse kõigi liivakastide jaoks. Aktiivsete pluginate loend salvestatakse valikute tabelis, seega on aktiveerimisolek iga liivakasti puhul eraldi. Liivakastis üles laaditud failid satuvad hosti üleslaadimiste kataloogi. Nii on liivakastide loomine kiire ja välditakse `WP_CONTENT_DIR` globaalset asendamist.

Hoidke Rudel aktiivsena igas liivakastis. Selle e-posti blokeerimine ja teemade ülekate töötavad plugina kaudu ning selle desaktiveerimine valitud liivakasti ajal eemaldab jagatud failist `wp-config.php` ka algkäivituse rea, lülitades liivakasti valimise kogu installis välja ([probleem nr 13](https://github.com/inline0/rudel/issues/13)).

## Liivakasti valimine

HTTP päringud valivad liivakasti järgmise kaudu:

- päis `X-Rudel-Environment` (vana alias `X-Rudel-Sandbox`)
- küpsis `rudel_environment` (vana alias `rudel_sandbox`)

Rudel ei määra ega kustuta kunagi küpsist. Hosti naasmiseks kustutage see; haldusriba üksus Liivakast lingib hosti URL-ile, kuid jätab küpsise alles ([probleem nr 10](https://github.com/inline0/rudel/issues/10)).

WP-CLI käsud valivad liivakasti järgmise kaudu:

- keskkonnamuutuja `RUDEL_ENVIRONMENT`
- `--url`, mille host algab liivakasti ID-ga, näiteks `--url=http://alpha-3be7.example.test`

Valijat ei autentita. Iga saitile ligi pääsev klient, kes saadab kehtiva liivakasti ID, saab selle liivakasti ning liivakasti ID-sid (nimi pluss neli kuueteistkümnendmärki) on lihtne ära arvata. Ärge käsitlege liivakasti valimist juurdepääsupiirina; kaitske avalikku hosti veebiserveri või võrgu tasandil.

## Päringu vaikeväärtused

Valitud päringu puhul Rudel:

- blokeerib väljamineva e-posti `pre_wp_mail` filtri kaudu
- määrab `WP_TEMP_DIR` liivakasti `tmp` kataloogiks
- määrab `WP_CACHE_KEY_SALT` liivakastipõhise väärtuse, et püsivate objektide vahemälud hoiaksid liivakastide võtmed lahus
- võimaldab `WP_DEBUG` logimise liivakasti `debug.log`-i ning liivakasti ID-st tuletatud autentimisvõtmed ja soolad

Algkäivitus määrab kõik need konstandid ainult siis, kui `wp-config.php` pole neid juba määranud. Tavaline `wp-config.php` määrab `WP_DEBUG` ning kõik võtmed ja soolad, seega kasutavad liivakasti päringud sellises installis hosti silumisseadet ning hosti võtmeid ja soolasid ([probleem nr 4](https://github.com/inline0/rudel/issues/4)). Kuna ka kasutajad kloonitakse, võib hosti sisselogimisküpsis kehtida liivakastis.

## Käitusaja metaandmed

Rudel käitusaja metaandmed jäävad hosti WordPress MySQL tabelitesse:

```text
wp_rudel_environments
wp_rudel_worktrees
```

Need tabelid on Rudel tõeallikas. Keskkondade kataloogid sisaldavad hallatavaid faile ja artefakte, mitte käitusaja registri olekut.
