
# Eristäminen

Rudel on pyynnön perusteella valittava päällekkäisjärjestelmä. Valitussa pyynnössä käytetään eristysympäristön tietokantatauluja ja teematiedostoja, mutta pyyntö suoritetaan edelleen isännän WordPress-asennuksessa.

## Eristetty kussakin eristysympäristössä

### WordPress-taulut

Kukin eristysympäristö saa luodun taulujen etuliitteen: isännän etuliite ja eristysympäristön tunnuksen MD5-arvon seitsemän ensimmäistä heksamerkkiä.

```text
wp_b65338d_options
wp_b65338d_posts
wp_b65338d_users
```

Rudel vaihtaa WordPress-taulujen etuliitteen ennen kuin WordPress on käynnistynyt, joten jokainen eristysympäristöpyynnön kysely lukee eristysympäristön kopioita ja kirjoittaa niihin.

### Käyttäjät

Taulut `users` ja `usermeta` kloonataan muiden mukana. Eristysympäristössä ovat luontihetkellä isännän käyttäjät ja salasanat; sen jälkeen eristysympäristössä luodut, muutetut tai poistetut käyttäjät eivät vaikuta isäntään, eikä isännässä tehdyt muutokset siirry eristysympäristöön.

### Aktiiviset teematiedostot

Valittu teema kopioidaan eristysympäristön hakemistoon:

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

Jos teema on alateema, Rudel kopioi myös yläteeman, jotta mallipohjasuhde säilyy kelvollisena. Eristysympäristö tarjoaa aina luontihetkellä tallennetun teeman; teeman vaihtaminen eristysympäristössä ei vaikuta tähän.

## Yhteiset isännän kanssa

- WordPress-ydin
- lisäosatiedostot
- ladatut mediatiedostot

Isännälle asennettu tai siellä päivitetty lisäosa asennetaan tai päivitetään jokaiseen eristysympäristöön. Aktiiviset lisäosat tallennetaan valintatauluun, joten aktivointitila on eristysympäristökohtainen. Eristysympäristössä tehdyt lataukset tallentuvat isännän lataushakemistoon. Näin eristysympäristön luonti pysyy nopeana eikä `WP_CONTENT_DIR`-asennusta tarvitse korvata maailmanlaajuisesti.

Pidä Rudel aktiivisena jokaisessa eristysympäristössä. Sen sähköpostin esto ja teemojen päällekkäisyys toimivat lisäosan kautta. Jos lisäosa poistetaan käytöstä eristysympäristön ollessa valittuna, myös jaetun `wp-config.php`-tiedoston käynnistysrivi poistetaan, jolloin eristysympäristön valinta kytkeytyy pois käytöstä koko asennuksessa ([ongelma #13](https://github.com/inline0/rudel/issues/13)).

## Eristysympäristön valitseminen

HTTP-pyynnöissä eristysympäristö valitaan seuraavien avulla:

- `X-Rudel-Environment`-otsake (vanha alias `X-Rudel-Sandbox`)
- `rudel_environment`-eväste (vanha alias `rudel_sandbox`)

Rudel ei koskaan aseta eikä tyhjennä evästettä. Palaa isäntään poistamalla eväste; hallintapalkin Sandbox-kohteen linkki johtaa isännän kohteeseen URL, mutta eväste jää paikalleen ([ongelma #10](https://github.com/inline0/rudel/issues/10)).

WP-CLI-komennoissa eristysympäristö valitaan seuraavien avulla:

- `RUDEL_ENVIRONMENT`-ympäristömuuttuja
- `--url`, jonka isäntä alkaa eristysympäristön tunnuksella, kuten `--url=http://alpha-3be7.example.test`

Valitsinta ei ole todennettu. Mikä tahansa sivustoon yhteyden saava asiakas saa eristysympäristön käyttöönsä lähettämällä kelvollisen eristysympäristön tunnuksen, ja tunnukset (nimi sekä neljä heksamerkkiä) on helppo arvata. Älä käsittele eristysympäristön valintaa käyttöoikeuksien rajana; suojaa julkinen isäntä verkkopalvelimen tai verkon tasolla.

## Pyyntöjen oletukset

Valitussa pyynnössä Rudel:

- estää lähtevän sähköpostin `pre_wp_mail`-suodattimella
- asettaa arvon `WP_TEMP_DIR` eristysympäristön `tmp`-hakemistoon
- asettaa arvon `WP_CACHE_KEY_SALT` eristysympäristökohtaiseksi, jotta pysyvät oliovälimuistit pitävät eristysympäristöjen avaimet erillään
- ottaa käyttöön lokituksen `WP_DEBUG` eristysympäristön `debug.log`-arvolle sekä eristysympäristön tunnuksesta johdetut todennusavaimet ja suolat

Käynnistysrutiini määrittelee nämä vakiot vain, jos `wp-config.php` ei ole jo määritellyt niitä. Tavallinen `wp-config.php` määrittelee arvon `WP_DEBUG` sekä kaikki avaimet ja suolat, joten tällaisessa asennuksessa eristysympäristöpyynnöt käyttävät isännän debug-asetusta ja avaimia sekä suoloja ([ongelma #4](https://github.com/inline0/rudel/issues/4)). Myös käyttäjät kloonataan, joten isännän kirjautumiseväste voi toimia eristysympäristössä.

## Ajon aikaiset metatiedot

Rudel-ajon aikaiset metatiedot pysyvät isännän WordPress MySQL-tauluissa:

```text
wp_rudel_environments
wp_rudel_worktrees
```

Nämä taulut ovat Rudel-järjestelmän totuuden lähde. Ympäristöhakemistot sisältävät hallittuja tiedostoja ja artefakteja, eivät ajonaikaista rekisteritilaa.
