
# Izolare

Rudel este un sistem de suprapunere selectat per solicitare. O solicitare selectată folosește tabelele bazei de date și fișierele temei din sandbox, continuând să ruleze prin instalarea gazdă WordPress.

## Izolat în fiecare sandbox

### Tabelele WordPress

Fiecare sandbox primește un prefix de tabel generat: prefixul gazdei urmat de primele șapte caractere hexazecimale din MD5 al ID-ului sandboxului.

```text
wp_b65338d_options
wp_b65338d_posts
wp_b65338d_users
```

Rudel schimbă prefixul tabelelor WordPress înainte ca WordPress să termine inițializarea, astfel încât fiecare interogare dintr-o solicitare de sandbox să citească și să scrie copiile din sandbox.

### Utilizatori

Tabelele `users` și `usermeta` sunt clonate împreună cu restul. La creare, un sandbox pornește cu utilizatorii și parolele gazdei; ulterior, utilizatorii creați, modificați sau șterși în sandbox nu afectează gazda, iar modificările gazdei nu ajung în sandbox.

### Fișierele temei active

Tema selectată este copiată în directorul sandboxului:

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

Dacă tema este o temă copil, Rudel copiază și tema părinte, pentru a păstra validă relația dintre șabloane. Un sandbox servește întotdeauna tema înregistrată la creare; schimbarea temei în sandbox nu are niciun efect.

## Partajat cu gazda

- nucleul WordPress
- fișierele pluginurilor
- fișierele media încărcate

Un plugin instalat sau actualizat pe gazdă este instalat sau actualizat pentru fiecare sandbox. Pluginurile active sunt înregistrate în tabelul de opțiuni, astfel că starea de activare este specifică fiecărui sandbox. Fișierele încărcate dintr-un sandbox ajung în directorul de încărcări al gazdei. Astfel, crearea sandboxurilor rămâne rapidă și se evită înlocuirea globală a `WP_CONTENT_DIR`.

Păstrați Rudel activ în fiecare sandbox. Blocarea e-mailurilor și suprapunerea temei rulează din plugin, iar dezactivarea acestuia în timp ce un sandbox este selectat elimină și linia de inițializare din `wp-config.php` partajat, ceea ce dezactivează selectarea sandboxurilor pentru întreaga instalare ([problema #13](https://github.com/inline0/rudel/issues/13)).

## Selectarea unui sandbox

Solicitările HTTP selectează un sandbox prin:

- antetul `X-Rudel-Environment` (alias vechi `X-Rudel-Sandbox`)
- cookie-ul `rudel_environment` (alias vechi `rudel_sandbox`)

Rudel nu setează și nu șterge niciodată cookie-ul. Ștergeți-l pentru a reveni la gazdă; elementul Sandbox din bara de administrare trimite la gazda URL, dar păstrează cookie-ul ([problema #10](https://github.com/inline0/rudel/issues/10)).

Comenzile WP-CLI selectează un sandbox prin:

- variabila de mediu `RUDEL_ENVIRONMENT`
- un `--url` a cărui gazdă începe cu ID-ul sandboxului, de exemplu `--url=http://alpha-3be7.example.test`

Selectorul nu este autentificat. Orice client care poate accesa site-ul și trimite un ID de sandbox valid primește acel sandbox, iar ID-urile sandboxurilor (nume plus patru caractere hexazecimale) sunt ușor de ghicit. Nu considerați selectarea sandboxurilor o limită de control al accesului; protejați o gazdă publică la nivelul serverului web sau al rețelei.

## Valori implicite ale solicitărilor

Pentru o solicitare selectată, Rudel:

- blochează e-mailurile de ieșire printr-un filtru `pre_wp_mail`
- setează `WP_TEMP_DIR` la directorul `tmp` al sandboxului
- setează `WP_CACHE_KEY_SALT` la o valoare specifică sandboxului, astfel încât cache-urile persistente de obiecte să păstreze separate cheile sandboxurilor
- oferă jurnalizarea `WP_DEBUG` în `debug.log` sandboxului și chei și valori salt de autentificare derivate din ID-ul sandboxului

Inițializarea definește fiecare dintre aceste constante doar dacă `wp-config.php` nu a definit-o deja. O instalare standard `wp-config.php` definește `WP_DEBUG` și toate cheile și valorile salt, astfel că pe o astfel de instalare solicitările sandboxului folosesc setarea de depanare a gazdei și cheile și valorile salt ale gazdei ([problema #4](https://github.com/inline0/rudel/issues/4)). Deoarece utilizatorii sunt și ei clonați, un cookie de autentificare al gazdei poate fi valid într-un sandbox.

## Metadate la rulare

Metadatele la rulare Rudel rămân în tabelele MySQL WordPress ale gazdei:

```text
wp_rudel_environments
wp_rudel_worktrees
```

Aceste tabele sunt sursa de adevăr pentru Rudel. Directoarele de mediu conțin fișiere și artefacte gestionate, nu starea registrului la rulare.
