
# Изолиране

Rudel е система с наслагване, избирано за всяка заявка. Избраната заявка използва таблиците на базата данни и файловете на темата на пясъчника, като същевременно работи през инсталацията на основния WordPress.

## Изолирано за всеки пясъчник

### Таблици на WordPress

Всеки пясъчник получава генериран префикс на таблиците: префиксът на основната инсталация плюс първите седем шестнадесетични знака от MD5 на ID на пясъчника.

```text
wp_b65338d_options
wp_b65338d_posts
wp_b65338d_users
```

Rudel сменя префикса на таблиците на WordPress, преди WordPress да завърши стартирането, така че всяка заявка в пясъчник чете и записва копията на пясъчника.

### Потребители

Таблиците `users` и `usermeta` се клонират заедно с останалите. При създаването пясъчникът започва с потребителите и паролите от основната инсталация; след това добавените, променените или изтритите в пясъчника потребители не засягат основната инсталация, а промените в основната не достигат до пясъчника.

### Файлове на активната тема

Избраната тема се копира в директорията на пясъчника:

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

Ако темата е дъщерна, Rudel копира и родителската тема, за да остане валидна връзката с шаблона. Пясъчникът винаги обслужва темата, записана при създаването; смяната на темата в пясъчника няма ефект.

## Споделено с основната инсталация

- основното ядро WordPress
- файлове на разширенията
- качени мултимедийни файлове

Разширение, инсталирано или актуализирано в основната инсталация, се инсталира или актуализира за всеки пясъчник. Кои разширения са активни се записва в таблицата с настройки, така че състоянието на активиране е отделно за всеки пясъчник. Качените от пясъчник файлове се съхраняват в директорията за качвания на основната инсталация. Така създаването на пясъчник става бързо и се избягва глобалната подмяна на `WP_CONTENT_DIR`.

Оставяйте Rudel активен във всеки пясъчник. Блокирането на имейли и наслагването на теми се изпълняват от разширението, а деактивирането му при избран пясъчник премахва и реда за стартиране от споделения `wp-config.php`, което изключва избора на пясъчник за цялата инсталация ([issue #13](https://github.com/inline0/rudel/issues/13)).

## Избиране на пясъчник

Заявките към HTTP избират пясъчник чрез:

- заглавката `X-Rudel-Environment` (стар псевдоним `X-Rudel-Sandbox`)
- бисквитката `rudel_environment` (стар псевдоним `rudel_sandbox`)

Rudel никога не задава и не изтрива бисквитката. Изтрийте я, за да се върнете към основната инсталация; елементът Sandbox в административната лента води към основния URL, но оставя бисквитката ([issue #10](https://github.com/inline0/rudel/issues/10)).

Командите WP-CLI избират пясъчник чрез:

- променливата на средата `RUDEL_ENVIRONMENT`
- `--url`, чийто хост започва с ID на пясъчника, например `--url=http://alpha-3be7.example.test`

Изборът не е удостоверен. Всеки клиент, който има достъп до сайта и изпраща валиден ID на пясъчник, получава достъп до него, а ID-тата на пясъчниците (име плюс четири шестнадесетични знака) са лесни за отгатване. Не използвайте избора на пясъчник като граница за контрол на достъпа; защитете публичния хост на ниво уеб сървър или мрежа.

## Настройки по подразбиране за заявките

За избрана заявка Rudel:

- блокира изходящата електронна поща чрез филтър `pre_wp_mail`
- задава `WP_TEMP_DIR` към директорията `tmp` на пясъчника
- задава `WP_CACHE_KEY_SALT` със специфична за пясъчника стойност, така че постоянните кешове на обекти да държат ключовете на пясъчниците отделно
- предлага регистриране на `WP_DEBUG` в пясъчника `debug.log` и ключове за удостоверяване и соли, изведени от ID на пясъчника

Кодът за стартиране дефинира всяка от тези константи само ако `wp-config.php` още не я е дефинирал. Стандартен `wp-config.php` дефинира `WP_DEBUG` и всички ключове и соли, така че при такава инсталация заявките към пясъчник използват настройката за отстраняване на грешки и ключовете и солите на основната инсталация ([issue #4](https://github.com/inline0/rudel/issues/4)). Понеже потребителите също се клонират, бисквитка за вход в основната инсталация може да е валидна в пясъчник.

## Метаданни по време на изпълнение

Метаданните за изпълнение на Rudel остават в таблиците MySQL на основния WordPress:

```text
wp_rudel_environments
wp_rudel_worktrees
```

Тези таблици са единственият достоверен източник за Rudel. Директориите на средата съдържат управлявани файлове и артефакти, а не състоянието на регистъра по време на изпълнение.
