Rudel
按请求选择的WordPress覆盖环境,用于创建沙盒。
composer require rudel/rudel最新版本 v0.10.0 GPL-2.0-or-later WordPress 6.4+, PHP 8.2+
wp rudel create \
--name=feature-a \
--owner=dennis \
--labels=agent,qa \
--purpose="Test checkout changes" \
--ttl-days=7实践应用
从主站点创建沙箱,然后将 WP-CLI 或 HTTP 请求指向该沙箱。
创建沙箱并将请求路由到其中
wp rudel create 会在新前缀下克隆主站点的数据表,将主题复制到沙箱目录,并输出沙箱 ID。
在 RUDEL_ENVIRONMENT 中传入该 ID 以用于 WP-CLI,或在 X-Rudel-Environment 请求头或 rudel_environment Cookie 中传入以用于 HTTP。PHP API 可通过生命周期元数据创建相同的沙箱。
wp rudel create --name=alpha --theme=twentytwentyfour
RUDEL_ENVIRONMENT=alpha-1234 wp option get siteurl
curl -H 'X-Rudel-Environment: alpha-1234' http://localhost:8000/$sandbox = Rudel::create( 'alpha', [
'theme' => 'twentytwentyfour',
'owner' => 'dennis',
'labels' => [ 'qa', 'agent' ],
'ttl_days' => 7,
] );沙盒
适用于开发、测试和 AI 智能体的可弃用覆盖环境。
请求选择
使用X-Rudel-Environment请求头、rudel_environmentCookie 或WP-CLI中的RUDEL_ENVIRONMENT将请求路由到沙盒。仅凭沙盒 ID 进行选择,无需身份验证。
覆盖层运行时
激活会在wp-config.php中添加一行引导代码。之后,每个沙盒都会使用自己的前缀获得克隆表和当前主题副本;WordPress核心文件、插件文件及上传内容仍保持共享。
Git工作树
内置 PHP 原生 Git 克隆、推送和工作树流程,无需宿主 git 二进制文件。
快照
为沙箱创建命名恢复点,复制其中的表和受管理的主题文件。可通过 WP-CLI 或 PHP 创建和恢复恢复点。
请求隔离
为每个请求设置独立的数据表前缀、主题根目录、临时目录、对象缓存键盐,并阻止发送电子邮件。
WP-CLI & PHP API
wp rudel 命令和 Rudel\Rudel 静态方法可创建、列出、更新、快照、恢复和销毁沙箱。
适配智能体
为编码智能体提供一次性 WordPress 副本,其中 WP-CLI 按 RUDEL_ENVIRONMENT 限定范围,并阻止发送外发邮件。
为什么选择 Rudel
一个安装,多个沙箱
Rudel 在普通的 WordPress 安装中运行,无需多站点,也无需第二个 WordPress 安装。未指定沙箱的请求仍由主站点提供其自身数据。
复制数据表和一个主题
沙箱会在自己的前缀下获得主站点数据表的副本(包括用户),以及活动主题的副本;如果是子主题,还会复制其父主题。WordPress 核心、插件文件和上传文件仍保留在主站点。
可设置过期时间的沙箱
为沙箱设置所有者、标签、用途和以天为单位的 TTL。每小时运行的 WP-Cron 任务会移除已过期的沙箱,并跳过标记为受保护的沙箱。
可安全预览
沙箱请求会阻止外发邮件,并记录每条被阻止的邮件。除非 wp-config.php 设置了自己的对象缓存键盐,否则该盐会根据沙箱 ID 生成,使持久化缓存中的主站点键和沙箱键彼此隔离。
对比
Rudel 可在你现有的网站中运行。这些工具可满足相关需求。
| 工具 | 擅长领域 | 与 Rudel 的区别 |
|---|---|---|
| WordPress Multisite | 擅长领域在一组核心文件上运行多个虚拟站点,共享插件和主题,同时为每个站点使用独立的数据库表和上传目录。 | 与 Rudel 的区别Rudel 无需多站点。沙箱是现有站点的数据表和活动主题的副本,可在每个请求中通过请求头、Cookie 或 WP-CLI 环境变量选择。 |
| wp-env | 擅长领域配置一个本地 WordPress 站点,并使用 Docker 构建和测试插件与主题,无需额外配置。 | 与 Rudel 的区别Rudel 无需第二个 WordPress 安装。它会根据你现有站点的内容创建沙箱,其数据表与主站点位于同一个 MySQL 数据库中。沙箱不会拥有独立的 PHP 运行时或数据库服务器。 |
| WordPress Playground | 擅长领域在浏览器端通过 WebAssembly 运行 WordPress,无需后端,隔离于浏览器中,且不会在浏览器之外造成持久性副作用。 | 与 Rudel 的区别Rudel 在服务器上与真实站点及其 MySQL 数据库一同运行。沙箱基于该站点的当前内容创建,可通过 WP-CLI 和任何 HTTP 客户端访问。 |
问答
来自 Rudel 文档的简明解答。
WordPress 核心、插件文件和上传的媒体。每个沙箱都会在生成的前缀下拥有自己的数据库表副本(包括用户),以及活动主题的副本。
发送包含 X-Rudel-Environment 请求头或 rudel_environment Cookie 的 HTTP 请求,或为 WP-CLI 设置 RUDEL_ENVIRONMENT。Rudel 接受任何客户端传入的 ID,因此沙箱选择机制不构成访问控制。
不会。沙箱中的请求会通过 pre_wp_mail 过滤器阻止外发邮件,并记录每条被阻止邮件的收件人和主题。
存放在主站点数据库的两张表中:使用默认前缀的 wp_rudel_environments 和 wp_rudel_worktrees。没有运行时 JSON 配置,也没有 SQLite 存储。
启用时会创建运行时数据表、向 wp-config.php 添加引导行,并安排清理事件,因此此时 WordPress 需要对 wp-config.php 有写入权限。停用时会移除该行。
可以。wp rudel snapshot 会按名称保存沙箱数据表及其主题文件,wp rudel restore 配合 --snapshot 可将它们恢复。
安装插件,从你自己的网站创建沙箱,并按照入门指南向其中发送第一个请求。