多名开发人员/编辑正在处理一个网站

时间:2011-03-22 作者:Gavin Anderegg

Background

我的第一个相当大的WordPress网站的建设已接近尾声,现在我遇到了一些摩擦。大多数情况下,该站点是在我的本地机器上开发的,我会将更改推送到临时服务器上进行审查(see this question for more background). 当只有我在编辑内容时,我最终使用的解决方案非常有效,但现在有些人在编辑内容,而我仍有需要添加的功能。想法是:如果功能和内容协调一致,我们可以更快地完成任务。。。但现在我不太确定。

当前,临时服务器上的数据库中的内容与本地计算机上的不同。这本身很好,因为我不需要在本地机器上复制最终的正文,但我需要进行更多的开发,这将影响数据库(安装/编写更多需要自己表的插件)。

My question is:

有没有一种简单的方法可以自动合并数据库,以便多人可以在WordPress安装上工作?当然,我可以只导出我知道在本地计算机上已更改的表,并将它们推送到临时服务器,但也有可能在临时服务器上有我想要关闭的东西。我可以获取DBs的SQL输出并将其区分开来。。。但这似乎既乏味又刻薄。我想知道这是否是其他人已经解决的问题;如果有一个社区接受的方式来处理这类事情。

谢谢

3 个回复
最合适的回答,由SO网友:Gavin Anderegg 整理而成

一年多前我问过这个问题,在这段时间里,我们为团队增加了更多的人员,并在WordPress中开发了更多的网站。我想了解一下我们的流程,以防对其他人有所帮助。

Git中的每件事都是我在问问题时正在做的,但最好指出这一点。使用Git不仅帮助我们提高了工作效率,而且还多次节省了我们的集体成本。

您是否曾经需要对场地进行重大结构改造,从客户处获得这些改造的批准,并始终对未经改造的版本进行小的更新?我们有,Git让我们做吧。描述这个设置可能会有点冗长,但最基本的是我们创建了一个新分支,将该分支拉到服务器上,并将一个子域附加到该分支。

Git也拯救了我们。它当然允许我们回滚更改,这很好,但它也允许我们带回文件的旧版本。这意味着,如果客户问:“还记得一年前网站的这一部分是如何工作的吗?我们能把它带回来吗?”,答案是肯定的——即使被问及的人一年前不在该项目中。

除此之外,这也意味着我们永远不会没有所需的文件。我们总是可以从任何机器上下载该站点的最新版本并开始进行更改。

使用Git部署我们的WordPress托管Media Temple, 我们真的很喜欢他们。他们不是最便宜的供应商,但他们的服务很好,服务器的配置也很好。默认情况下,还提供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). 最后,我们将a ForwardAgent行添加到。要从中提取的主机上的ssh/config条目。这意味着我们只需要BitBucket中每个人的SSH公钥,而不需要每个服务器的公钥。我们还确保.git 目录公共HTML目录上方的一个目录。

自动数据库转储一旦服务器处于生产模式,我们确保automatically back up our database, just in case.

每个人都有自己的wp配置,因为我们都有自己的本地数据库用户名和密码,而且因为我们可以使用不同的名称和服务机制,所以我们每个人都有自己的wp配置文件。每一个都存储在Git中,名称如下wp-config-gavin.php, 当我们想使用该配置时symlink it收件人wp-config.php (Git使用.gitignore).

这也允许我们覆盖siteurl 中的选项wp_options 类似这样的数据库表:

define(\'WP_SITEURL\', \'http://sitename.localhost\');
define(\'WP_HOME\', \'http://sitename.localhost\');
这会阻止WordPress查看数据库中的服务器位置,意味着本地和服务器安装之间的位置没有奇怪的差异。

关于wp配置的最后一点说明。php文件:确保store them above the public HTML directory and make the permissions read only for the web user. 这在确保WordPress的安全方面起到了巨大的作用。

数据库问题最后是关键。

我必须接受的是,在使用WordPress时,没有好的方法“合并”数据库更改。相反,我们需要制定行为规则来解决这一问题。规则相当简单,迄今为止对我们很有帮助。

在开发过程中,只有一个人“拥有”网站。这个人通常会进行设置(把托管包放在一起,开始Basecamp项目,分割设计,诸如此类的事情)。一旦那个人达到了合理的程度,就会转储WordPress安装所需的数据库并将其放入Git中。从那时起,进行开发的每个人都使用该数据库转储,而所有者是唯一对数据库进行更改的人。

一旦站点构建进一步推进,站点就会被放在服务器上。从那时起,服务器的数据库就是规范的。每个人(包括所有者)都必须在服务器上进行所有数据库更改,并将更改向下拉以进行本地开发和测试。

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

SO网友:editor

我正在进行这样的安装answered questions like this before. 下面是我对这类工作的首选设置。由于您希望合并数据库,而不是替换现有数据库,因此我要向这些数据库中添加一个警告,即不要使用--add-drop-table 执行MySQL转储时的标志。

步骤1。Mysqldump您的开发数据库第2步。替换所有开发实例。领域com到生产。领域第3步。登录MySQL,运行SOURCE命令导入数据,例如。source /path/to/file^^如何用新域替换旧域的所有实例:(1)复制下面的脚本。(2)chmod +x 信息技术(3) 运行它。

用法:./script.sh development-dump.sql > production-dump.sql

#!/bin/sed -f
s/\'\\([^\\\\\']*\\)development.domain.com\\([^\\\\\']*\\)\'/\'\\1production.domain.com\\2\'/g

SO网友:Yaron

我现在正在试验同一个问题的不同解决方案。这绝对是个棘手的问题。

我当前的解决方案是使用--skip extended insert标志进行本地mysql转储。我相信这个标志会导致为数据库的每一行生成一个insert record语句,从而使转储更易于合并。我从这篇文章中学会了这个技巧:http://www.viget.com/extend/backup-your-database-in-git/.

然后我对结果进行源代码控制。使用Git和站点源文件创建sql数据转储文件。当另一个开发人员撤销代码更改时。sql文件随附。然后,他将此文件导入数据库的本地版本。我们都使用MAMP在两台机器上以相同的方式设置了各自的本地数据库,因此不需要进行任何搜索和替换。

存在合并问题,因此我们尝试对任何会导致数据库更改的内容采用“轮流”的方法。在我在Wordpress中进行任何更改数据库的操作之前,我确保他已签入最新的转储文件,然后将其拉入并导入,然后要求他在我完成并签入数据库之前不要对数据库进行任何更改。这显然不理想,我正在寻找更好的解决方案,但这只是一个开始。它还为我们提供了DB的版本控制,这很好。

最后,我可能会在服务器上设置一个共享的dev数据库,并尝试通过SSH隧道将网站的两个本地副本连接到同一个DB。然而,每当我们中的一个人安装插件时,这种方法就会遇到问题。基本上PHP文件和MySQL数据库将不同步。

我很想知道其他人是如何处理这个问题的。

结束

相关推荐

query users by role

我有一个查询用户和usermeta的自定义插件,但我现在需要从结果中筛选管理员。我的sql查询的一个非常简化的版本是:SELECT * FROM usermeta LEFT JOIN users ON users.ID = user_id WHERE meta_key = \'last_name\' AND user_role != \'admin\' ORDER BY meta_value ASC LIMIT 0, 25 user_role 不是字段,我看