
# 配置

Rudel 有两类配置：存储在 `rudel_config` WordPress 选项中的设置，以及你在 `wp-config.php` 中定义的常量。

## `rudel_config` 选项

设置存储在 `wp_options` 中 `rudel_config` 下的一个数组中。在有内容写入该选项之前，每个键都使用默认值。未知键会被忽略，值会以整数形式存储。

| 键 | 默认值 | 含义 |
|-----|---------|---------|
| `max_sandboxes` | `0` | 达到此数量时，拒绝创建沙盒。`0` 表示不设限制。 |
| `max_disk_mb` | `0` | 沙盒目录达到此大小（兆字节）时，拒绝创建沙盒。克隆的表不计入。`0` 表示不设限制。 |
| `default_ttl_days` | `0` | 未指定 `ttl_days` 或 `expires_at` 时，新建沙盒的默认到期时间。`0` 表示永不过期。 |
| `max_age_days` | `0` | 清理会移除超过此存续时间的沙盒。`0` 会停用存续时间规则。 |
| `max_idle_days` | `0` | 清理会移除在这段时间内没有记录活动（沙盒请求或快照）的沙盒。`0` 会停用空闲规则。 |
| `auto_cleanup_enabled` | `1` | 每小时从 WP-Cron 运行一次清理策略。 |
| `auto_cleanup_merged` | `0` | 同时运行 WP-Cron 中的已合并分支清理。 |
| `expiring_environment_notice_days` | `0` | 每次自动化运行时，收集将在这些天内到期的沙盒，并将其传递给 `rudel_after_automation_expiring_environments` 操作。 |
| `auto_snapshot_before_restore` | `1` | 每次还原前保存一个 `pre-restore-...` 快照。 |

`wp rudel status` 会打印当前值。

使用 WP-CLI 写入该选项。未指定的键会保留默认值：

```bash
wp option update rudel_config '{"max_age_days":14,"max_idle_days":3,"auto_cleanup_merged":1}' --format=json
```

也可以从 PHP 执行：

```php
$config = new Rudel\RudelConfig();
$config->set( 'max_sandboxes', 20 );
$config->save();
```

更改后，下一个请求会安排或移除 WP-Cron 事件。请参阅 [自动化](https://rudel.inline0.dev/zh/docs/features/automation)。

## 常量

在 `wp-config.php` 中、Rudel 引导行之前定义这些常量。

| 常量 | 默认值 | 含义 |
|----------|---------|---------|
| `RUDEL_CLI_COMMAND` | `rudel` | 根 WP-CLI 命令名称。 |
| `RUDEL_ENVIRONMENTS_DIR` | `wp-content/rudel-environments` | 存放沙盒目录的目录。主题资源始终从 `/wp-content/rudel-environments/{id}/themes` 提供，因此其他目录仍必须能通过该 URL 访问。 |
| `RUDEL_RUNTIME_TABLE_PREFIX` | `rudel_` | Rudel 表名称中、WordPress 前缀之后的部分。请参阅 [运行时状态](https://rudel.inline0.dev/zh/docs/features/runtime-state)。 |
| `RUDEL_RUNTIME_TABLE_ENVIRONMENTS` | | environments 表的完整名称覆盖值，位于 WordPress 前缀之后。 |
| `RUDEL_RUNTIME_TABLE_WORKTREES` | | worktrees 表的完整名称覆盖值，位于 WordPress 前缀之后。 |
| `RUDEL_DB_DRIVER` | `auto` | 用于独立 `Rudel\Connection` 访问的驱动程序：`auto`、`mysqli` 或 `pdo`。WordPress 请求始终使用 `$wpdb`。 |
| `RUDEL_GIT_AUTHOR_NAME` | `Rudel` | 当检出目录没有 `user.name` 时，Rudel 会将作者姓名写入该目录的 Git 配置，用于 `wp rudel push` 提交。 |
| `RUDEL_GIT_AUTHOR_EMAIL` | `rudel@localhost` | 当检出目录没有 `user.email` 时，Rudel 会写入作者邮箱。 |

## 沙盒请求中的常量

请求选择沙盒时，引导程序会定义代码可读取的常量。最常用的包括：

| 常量 | 值 |
|----------|-------|
| `RUDEL_ID` | 沙盒 ID |
| `RUDEL_PATH` | 沙盒目录 |
| `RUDEL_TABLE_PREFIX` | 沙盒表前缀 |
| `RUDEL_THEME_SLUG` | 从沙盒提供的主题 |
| `RUDEL_HOST_URL`, `RUDEL_ENVIRONMENT_URL` | 主机和沙盒 URL |
| `RUDEL_DISABLE_EMAIL` | `true`；出站邮件会被阻止 |

优先使用 [API](https://rudel.inline0.dev/zh/docs/api) 方法（例如 `Rudel::id()`），而不是直接读取常量。

引导程序还会定义 `WP_DEBUG`、`WP_DEBUG_LOG`、`WP_DEBUG_DISPLAY`、`WP_TEMP_DIR`、`WP_CACHE_KEY_SALT`以及八个身份验证密钥和盐，但只会定义 `wp-config.php` 尚未定义的那些项。参见 [错误日志](https://rudel.inline0.dev/zh/docs/features/logging)和[隔离](https://rudel.inline0.dev/zh/docs/environments/isolation)。
