我想设置一个临时服务器来对我的网站进行最终测试。临时站点的数据库正在复制生产主 mysql db,以反映真实环境。
如果部署仅包含代码更改,则可以轻松地先将其部署到暂存区,然后在足够稳定的情况下将其部署到生产区。
但是如果部署包含数据库更改,我怎样才能将其部署到暂存区而不影响主数据库,但仍保持与主数据库的实时同步?
编辑:
如果做不到。我怎样才能让数据写入暂存服务器时“不丢失”?如果某些用户使用测试版网站,我不希望在暂存最终稳定时丢失他们的数据。
我想知道 Facebook 或 Google 如何在不丢失 beta 测试人员数据的情况下推出他们的新功能?
答案1
你不能。
我的建议是不要将生产复制到暂存,而是偶尔使用生产备份文件之一重建暂存数据库。然后,您就可以使用生产数据(尽管是几个小时或几天以前的数据),但您在暂存上所做的更改不会影响生产。
编辑:经过您的编辑,这现在是一个截然不同的问题。
如果您的 beta 测试人员使用您的临时服务器并期望他们的数据投入生产,那么它就不是临时服务器:而是生产服务器。我认为这是根本概念的转变,使得这个问题很难回答;我们大多数人(我认为)认为临时服务器是可以毫无顾忌地转储和重建的蚀刻草图。如果您计划允许某些用户对您的更改进行 beta 测试并在您投入生产时保留他们的数据,那么您需要一个与临时/生产不同的框架。
EDIT2:这里有一些与此类设置有关的 Stack Overflow 问题:
- 可以很容易地向部分用户推出功能的 Gem
- 有限功能推出的最佳实践(这一点很有趣,因为它特别提到了数据库合并的困难;它看起来像一个已知的难题)