问题描述

背景

我正在接近构建我的第一个相当大的 WordPress 网站的最后阶段,我现在正在遇到一些摩擦。在大多数情况下,网站是在我的本地机器上开发的,我会将更改推送到临时服务器进行审查 (see this question for more background) 。解决方案我最终做的很好,当我只是编辑内容,但现在其他人正在编辑的内容,而我还有功能要添加。这个想法是:如果功能和内容相互融合在一起,我们可以更快地完成任务,但现在我不太清楚。

目前,在分段服务器上的数据库中存在与本地计算机不同的内容。这是很好的,因为我不需要我的本地机器上的最终身体副本,但我需要做更多的开发,这将影响数据库 (安装/写一些更多的插件,需要自己的表) 。

我的问题是:

是否有一个简单的方法来自动化数据库的合并,以便多个人可以在 WordPress 安装上工作?当然,我可以导出我所知道的在本地机器上改变的表,并将它们推送到分段服务器,但是我可能想要在分段服务器上放下这些表。我可以抓住这两个数据库的 SQL 输出,并将它们分开… 但是这似乎是乏味和黑客。我想知道这是否是别人解决的问题?如果有一个 community-accepted 方式来处理这种事情。

谢谢!

最佳解决方案

一年前我问过这个问题,在那段时间里,我们向我们的团队添加了更多的人,并在 WordPress 中开发了大量的网站。我想通过我们的过程,以防其可能帮助任何人。

一切都在吉特

这是我正在做的事情,即使我提出这个问题,但很高兴称之为这一点。使用 Git 不仅有助于我们提高生产力,而且还节省了我们的集体屁股数次。

您是否需要对网站进行重大的结构改造,从客户端获得对这些装修的批准,并且一直对 non-renovated 版本做出微小的更新?我们有,而 Git 让我们这样做。描述这个设置会得到一个 long-winded,但是基础是我们做了一个新的分支,将该分支拉到服务器上,并将一个子域附加到该分支。

我们也被 Git 保存。它当然允许我们回滚更改,这是伟大的,但它也允许我们将旧版本的文件带回来。这意味着如果一位客户问:「记住这一部分网站的工作大概是在一年以前吗?我们可以带回来吗?」 答案是肯定的 – 即使被问及的人每年都不在这个项目上前。

除了这些要点,这也意味着我们永远不会没有我们需要的文件。我们可以随时从任何机器下载最新版本的站点,并开始进行更改。

使用 Git 进行部署

我们在 Media Temple 上做我们的 WordPress 主机,我们非常喜欢它们。他们不是最便宜的提供商,但他们的服务非常好,他们的服务器设置得很好。默认情况下也提供 Git 。这意味着我们可以将服务器设置为 Git 仓库,并以此方式提取更改,而不是使用 SFTP 。这也意味着在服务器上进行工作不会被覆盖的危险 (因为这些更改只能被合并并被推回) 。

因为我们使用 BitBucket 作为我们的 Git 主机,所以需要一些额外的工作。首先我们使用.ssh/config files,以便我们可以输入像 ssh sitename 这样的东西来登录我们的服务器 (我们也使用 passwordless SSH,这使得这个超级容易) 。我们还确保始终使用 ssh passphrases(Mac OS X 使 allowing you to store your passphrase in Keychain.app 非常容易) 。最后,我们将一个 ForwardAgent 行添加到我们要从其中提取的主机上的.ssh /config 条目中。这意味着我们只需要 BitBucket 中每个人的 SSH 公钥,而不是每个服务器的公钥。我们还确保将.git 目录保留在公共 HTML 目录之上。

自动数据库转储

一旦服务器处于生产模式,我们确保 automatically back up our database, just in case

每个人都有自己的 wp-config

因为我们都拥有自己的本地数据库用户名和密码,并且因为我们可以使用不同的名称和服务机制,我们每个都保留我们自己的 wp-config 文件。每个这些都存储在 Git 中,名称为 wp-config-gavin.php,当我们想使用该配置时,我们将 symlink 存储到 wp-config.php(由 Git 使用.gitignore 忽略) 。

这也允许我们覆盖 wp_options 数据库表中的 siteurl 选项,如下所示:

define('WP_SITEURL', 'http://sitename.localhost');
define('WP_HOME', 'http://sitename.localhost');

这样可以防止 WordPress 查看服务器位置的数据库,这意味着本地和服务器安装之间的位置并不奇怪。

关于 wp-config.php 文件的最后一个注意事项:确保 store them above the public HTML directory and make the permissions read only for the web user 。这在保护 WordPress 方面有很大的不同。

数据库问题

最后,肉的事。

我不得不接受的是,当使用 WordPress 时,没有好的方法来对”merge” 数据库进行更改。相反,我们需要制定行为规则来解决这个问题。这些规则是相当简单的,迄今为止我们已经很好。

在开发过程中,有一个人是”owns” 的网站。那个人通常会进行设置 (将主机包放在一起,启动 Basecamp 项目,切片设计,那种事情) 。一旦这个人合理点,转储数据库为 WordPress 安装,并将其放入 Git 。从那时起,所有做开发的人都使用该数据库转储,而所有者是唯一一个对数据库进行更改的人员。

一旦网站建设进一步发展,网站就放在服务器上。从那时起,服务器的数据库是规范的。每个人 (包括所有者) 必须在服务器上进行所有数据库更改,并将更改拖放到本地开发和测试中。

这个过程并不完美。有可能有人可能需要在开发过程中在本地进行 WordPress 后端的更改,然后在生产中再次进行这些更改。然而,我们发现这种事情是罕见的,这个过程对我们来说相当好。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。