
# العزل

Rudel نظام تراكب تحدده الطلبات. يستخدم الطلب المحدد جداول قاعدة بيانات البيئة المعزولة وملفات قالبها، مع الاستمرار في العمل عبر تثبيت المضيف WordPress.

## معزول لكل بيئة

### جداول WordPress

تحصل كل بيئة معزولة على بادئة جداول مُنشأة: بادئة المضيف متبوعة بأول سبعة أحرف سداسية عشرية من MD5 الخاص بمعرّف البيئة.

```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` المشترك أيضًا، ما يوقف تحديد البيئات المعزولة في التثبيت بأكمله ([المسألة #13](https://github.com/inline0/rudel/issues/13)).

## تحديد بيئة معزولة

تحدد طلبات HTTP بيئة معزولة عبر:

- ترويسة `X-Rudel-Environment` (الاسم البديل القديم `X-Rudel-Sandbox`)
- ملف تعريف الارتباط `rudel_environment` (الاسم البديل القديم `rudel_sandbox`)

لا يضبط Rudel ملف تعريف الارتباط ولا يمحوه. احذفه للعودة إلى المضيف؛ ويربط عنصر Sandbox في شريط الإدارة بعنوان المضيف URL مع إبقاء ملف تعريف الارتباط كما هو ([المسألة #10](https://github.com/inline0/rudel/issues/10)).

تحدد أوامر WP-CLI بيئة معزولة عبر:

- متغير البيئة `RUDEL_ENVIRONMENT`
- قيمة `--url` يبدأ مضيفها بمعرّف البيئة المعزولة، مثل `--url=http://alpha-3be7.example.test`

لا يتطلب المحدِّد مصادقة. فأي عميل يستطيع الوصول إلى الموقع ويرسل معرّف بيئة معزولة صالحًا سيصل إلى تلك البيئة، كما يسهل تخمين المعرّفات (اسم وأربعة أحرف سداسية عشرية). لا تعتبر تحديد البيئة المعزولة حدًا للتحكم في الوصول؛ واحمِ المضيف العام على مستوى خادم الويب أو الشبكة.

## القيم الافتراضية للطلب

بالنسبة إلى الطلب المحدد، ينفذ Rudel ما يلي:

- يحظر البريد الصادر عبر مرشح `pre_wp_mail`
- يضبط `WP_TEMP_DIR` على مجلد `tmp` الخاص بالبيئة المعزولة
- يضبط `WP_CACHE_KEY_SALT` على قيمة خاصة بالبيئة المعزولة لفصل مفاتيح التخزين المؤقت للكائنات الدائمة
- يتيح تسجيل `WP_DEBUG` للبيئة المعزولة، ومفاتيح المصادقة والأملاح `debug.log` المشتقة من معرّفها

لا يعرّف التمهيد كل ثابت من هذه الثوابت إلا إذا لم يكن `wp-config.php` قد عرّفه من قبل. يعرّف التثبيت القياسي لـ `wp-config.php` الثابت `WP_DEBUG` وكل المفاتيح والأملاح، لذا تستخدم طلبات البيئات المعزولة في مثل هذا التثبيت إعداد تصحيح الأخطاء ومفاتيح المضيف وأملاحه ([المسألة #4](https://github.com/inline0/rudel/issues/4)). ولأن المستخدمين يُستنسخون أيضًا، قد تكون ملفات تعريف الارتباط لتسجيل الدخول إلى المضيف صالحة في البيئة المعزولة.

## بيانات وقت التشغيل

تبقى بيانات وقت تشغيل Rudel في جداول MySQL الخاصة بالمضيف ضمن WordPress:

```text
wp_rudel_environments
wp_rudel_worktrees
```

هذه الجداول هي المصدر المعتمد لبيانات Rudel. تحتوي مجلدات البيئة على الملفات والمنتجات المُدارة، لا على حالة سجل وقت التشغيل.
