# 使用暂存环境:推送至生产环境与从生产环境拉取

Source: https://support.kapsulehost.com/zh-cn/wordpress-staging-workflow

测试环境适用于 WordPress 和 WooCommerce 网站。一旦创建了测试环境副本，有两项操作可以让它持续发挥作用：将您已测试的更改推送到实时站点，以及将测试环境重置为生产环境的最新副本。本指南将详细介绍这两个方向、保护您实时站点的确认步骤，以及推送数据库会导致数据丢失的情形。

如果您尚未创建测试环境，请先阅读[使用测试环境](https://support.kapsulehost.com/zh-cn/staging-environments)。本文将从已存在测试环境的阶段开始介绍。

## 两个操作方向

| 操作 | 覆盖对象 | 适用场景 |
|---|---|---|
| **推送至生产环境** | 您的实时站点 | 测试环境中的更改已测试完毕，可以上线 |
| **从生产环境重置** | 您的测试环境站点 | 您希望获得当前实时站点的全新副本以便进行操作 |

这两项操作位于同一个页面：**网站**，然后是您的站点，然后是**环境**，然后是**测试环境**。

![KPanel 中某站点的测试环境页面，显示测试环境域名、状态以及上次同步时间](https://support.kapsulehost.com/help/screenshots/wordpress-staging-workflow.8f62c65f.webp)

该页面顶部的卡片会显示您的测试环境域名、其状态、距上次从生产环境同步的时间，以及上次推送的时间。**WP 管理后台**可直接登录测试环境站点的管理后台，**访问网站**则会打开测试环境的前台页面。

> **Tip:** 如果测试环境副本已有一周或更长时间未同步，该卡片会以琥珀色标注提示。过时的测试环境比没有测试环境更糟糕：您最终会在一个已经与实时站点不再相似的站点上进行测试。请在开始新一轮工作之前重置,而不是在工作之后。

## 将测试环境推送至生产环境

此操作会用测试环境中的内容替换实时站点的部分或全部内容。

1. 打开**环境**，然后点击**测试环境**。
2. 滚动到**推送测试环境至生产环境**。
3. 通过复选框选择要推送的内容：**文件**、**数据库**，或两者都选。
4. 如果您勾选了**数据库**，请保持**重写 URL**勾选状态。该功能会在所有数据表中执行搜索和替换操作，在推送过程中将测试环境的主机名替换为您的生产环境主机名。
5. 勾选**我确认此操作将修改我的实时生产站点。**
6. 在确认框中准确输入您的生产环境域名，与显示内容完全一致。
7. 点击**推送至生产环境**。

该按钮在复选框被勾选且域名匹配之前将保持禁用状态,因此误操作点击不会触发推送。

> **Warning:** 推送操作是覆盖，而非合并。自您上次重置以来生产环境上发生的任何更改都会被测试环境上的内容替换。这包括新文章、新客户账户、新表单条目和新订单。

在写入任何内容之前，系统会自动对生产环境进行一次完整备份；如果推送过程中途失败，生产环境将回滚至该备份状态。小型站点通常在不到一分钟内即可完成；而数据库较大或媒体库容量达数吉字节时，所需时间会更长。

### 选择文件、数据库，或两者都选

这是最重要的决定，而且答案通常不是"两者都选"。

**仅文件。** 对于从访客处收集任何信息的站点而言，这是安全的默认选择。主题编辑、插件更新、模板更改和自定义代码都存储在文件中。仅推送文件会使生产环境上的每一篇文章、每一条评论、每一笔订单和每一个用户信息都保持不变。

**仅数据库。** 适用于在测试环境中进行的内容或设置更改，且没有人直接编辑生产环境的站点。实际使用中较为少见。

**两者都选。** 适用于重新设计或重建的情形，此时测试环境即为新站点，生产环境将被全面替换。请提前通知相关人员，在非高峰时段执行，并事先确认已拥有最新备份。

> **Important:** 将数据库推送到实时商店会删除订单。WooCommerce 会将订单、客户、订阅、优惠券和库存水平存储在数据库中，因此自您上次从生产环境重置以来下的每一笔订单，都会在推送完成的瞬间消失。此操作无法部分恢复。对于商店站点,请仅推送文件，并直接在生产环境上进行数据库层面的更改。请参阅[设置 WooCommerce](https://support.kapsulehost.com/zh-cn/wordpress-woocommerce)。

对于任何在 WordPress 中存储评论、表单提交内容、会员注册信息或邮件列表的站点，同样存在这一问题，只是后果较轻。

## 从生产环境重置测试环境

这是安全的操作方向：它会用当前实时站点的内容覆盖测试环境，而不会影响生产环境。

1. 打开**环境**，然后点击**测试环境**。
2. 找到**从生产环境重置**。
3. 勾选**文件**、**数据库**，或两者都选。
4. 点击**从生产环境重置**。

在以下情况下执行此操作：

- 生产环境已发生变化，出现了新文章、新订单或内容编辑。
- 您即将开始新一轮工作，希望获得一个贴近实际情况的基础环境。
- 测试环境已经偏离太远，以至于在其上得出的测试结果毫无意义。

测试环境中尚未推送的任何内容都会丢失。如果测试环境上还有您希望保留的工作内容，请先将其推送，或者在重置之前，通过**设置**，然后**文件管理器**，将已更改的文件复制出来。

## URL 重写的工作原理

WordPress 会将自身的地址存储在数据库中，具体位于选项表的 `siteurl` 和 `home` 行，绝对 URL 还会出现在文章内容、元数据值、小工具设置和主题选项中。

您的测试环境站点运行在以 `staging.` 后接您的域名构成的地址上，因此在您于该环境中工作期间，上述所有数值都指向测试环境主机名。推送时的**重写 URL**选项会在所有数据表中执行完整的搜索和替换操作，正确处理序列化的插件设置，并将测试环境主机名替换为您的生产环境主机名。

除非有特殊原因，否则请保持该选项勾选。如果您仅推送文件，或者仍有遗留的测试环境 URL 残留，请通过[执行搜索和替换](https://support.kapsulehost.com/zh-cn/wordpress-search-replace)进行修复。

## 一个经得起考验的工作流程

1. **从生产环境重置**，使测试环境与实时站点保持一致。
2. **在开始之前对生产环境进行备份**，以便拥有一个独立于推送操作的还原点：[创建备份](https://support.kapsulehost.com/zh-cn/taking-a-backup)。
3. **在测试环境中进行工作。** 插件和主题更新、新代码、布局更改。
4. **在测试环境域名上进行测试。** 加载您已更改的页面，以及未更改的页面。对于商店站点，请完整运行一次测试订单流程。
5. **仅推送文件**，除非您已经明确决定数据库也必须一起推送。
6. **立即检查生产环境。** 首页、一个深层页面、结账流程，以及管理后台。
7. **再次从生产环境重置测试环境**，待您确认一切正常后进行，以便下一轮工作从干净的状态开始。

> **Note:** 测试环境完全通过您的生产环境站点进行管理。它不会在**网站**列表中作为单独条目出现,因此针对它的所有控制操作,包括删除,都位于这一个标签页中。

## 删除测试环境

同一页面底部的**删除测试环境**卡片可用于移除测试环境副本。生产环境不受影响。当某个项目完成后应将其删除：测试环境会占用您套餐的存储空间，过时的副本是一种负担,而非资产。

## 故障排查

**"推送至生产环境"按钮无法激活。** 必须同时满足两个条件：勾选确认复选框，并准确输入生产环境域名，不含 `https://` 且末尾无斜杠。

**推送已完成，但站点仍显示旧内容。** 这是缓存问题。请通过**WordPress**，然后**快速操作**，然后**清空缓存**进行清理，再通过**性能**，然后**Kapsule CDN** 清除 CDN 缓存，并在隐私窗口中重新加载页面。

**推送后实时站点上显示测试环境的 URL。** 这是因为数据库推送时未勾选**重写 URL**。请从测试环境主机名到您的生产环境域名执行一次搜索和替换：[执行搜索和替换](https://support.kapsulehost.com/zh-cn/wordpress-search-replace)。

**我推送了数据库，导致订单丢失。** 请立即恢复推送前自动生成的备份，务必在被覆盖的数据库上出现更多新订单之前完成操作：[从备份恢复](https://support.kapsulehost.com/zh-cn/restoring-from-backup)。

**重置后测试环境显示错误。** 通常是由于某个插件将生产环境域名硬编码所致。请在测试环境卡片上通过**WP 管理后台**登录，并逐一停用插件,直至错误消失，然后在生产环境上修复或更换导致问题的插件。
