Wordpress网站的团队开发

时间:2012-10-18 12:33:58

标签: wordpress

我不是Wordpress开发人员,但我正在尝试确定一个团队使用Wordpress的最佳方式。对于Rails项目或大多数其他任何东西,它很容易在本地工作并在上游部署,但我的理解是Wordpress不会让这很容易。也许这是一个神话?

从我收集的内容来看,将URL和文件路径存储在数据库中的情况并不少见,这似乎很难从dev部署WP项目 - > stg - > prd(每个环境都有自己的URL和可能不同的文件路径),更不用说个别开发人员拥有自己的开发环境,需要将其“合并”到一个统一的副本中进行部署。

我可以将所有开发人员沙箱配置为使用单个数据库,但同样,如果存储了URL和文件路径,则无法获取任何内容。

这里有一系列较小的问题,但是我越是想到这些问题,我就越发现我真正要求的是关于如何为最佳开发WordPress网站构建内容的建议将被黑客攻击由开发团队组成。我喜欢我们用于其他项目的沙盒方法,但我不知道在所有开发完成后是否可以统一事物。

李在这里帮帮忙?

感谢。

5 个答案:

答案 0 :(得分:1)

警告:传入的文字墙..

@Rob,WP在团队合作方面很不错;但是,通过一些工作(以及一些符号链接魔术),您可以设置WP项目,以便您的主题或插件的工作文件可以与WP核心分开存在。其中一些使用WP的内置机制,其中一些与SVN外部(提示)有关。我会让你谷歌,因为它不在你的问题范围内。

关于WP GUID的说明

警告:请勿更换guids。 WP GUID适用于外部供稿阅读器。 Feed阅读器使用GUID来确定内容是否是最新的。更改它基本上告诉那些读者,Feed中的每个条目都是新的(特别是对于帖子。)这为您不需要的旧内容带来了大量额外开销。 GUID是很久以前应该更改为UUID的遗留功能。从技术上讲,你可以在guid字段中使用任何东西,但是WP使用永久链接来填充该字段 - 遗产。

改变GUID的唯一时间是新的wp项目,其中内容是品牌spankin'新。

回答你的问题:

WP在其数据库的十几个位置存储对当前域的显式引用。这些位置很难跟踪和更改,您要做的最后一件事是处理对您要导入生产的* .sql转储文件的手动编辑。它只是糟糕的开发实践。

有几种方法可以解决这个问题,但如果您的开发生命周期已经进一步缩短,这意味着需要做一些工作。我将解决第一个案例。

案例1:项目开始

当您启动项目时,您可能已准备好开发沙箱和数据库。您现在可能已经安装了WP,因此它基本上是干净的,无论出于何种目的。

您要做的第一件事就是更改配置文件的工作方式。大多数人都使用标准的wp-config.php文件(除了团队生产项目之外,没有任何理由可以编辑它。)但是,您可以使用某些逻辑来设置它以包含特定于开发人员的环境或环境特定的配置文件。例如:

<强> WP-config.php中

switch( $current_environment )
{
 case 'jack.local'  : include( 'wp-config-jack.php' )  break; // Jack's sandbox
 case 'jill.local'  : include( 'wp-config-jill.php' ) break; // Jill's sandbox
 default : ...  break; // Staging & Production
}

您接下来要做的是将wp-config.php文件的正常内容包含在wp-config-remote.php文件中,以便用于登台/制作。接下来,编辑wp-config-remote.php文件,以便在多个环境中使用1个配置文件(分段,生产)。您只需要if(...)switch(...)块,例如

if( (strpos( $_SERVER[ "HTTP_HOST" ], "localhost" ) !== false) || (strpos( $_SERVER[ "HTTP_HOST" ], "local" ) !== false) )

(有更好的方法来写这个条件......这只是一个粗略的例子。)

配置特定于每个远程环境的所有WP设置。希望您能将其检入源控制存储库。

这基本上让您自由地让您的团队拥有特定于其环境的配置设置,同时让您检查每个远程环境的设置一次

您要做的第二件事是构建拦截和过滤特定于域的链接的机制。此机制背后的意图是使用令牌/占位符替换对当前域的任何引用。我在此处概述了执行此操作的技巧:http://www.farfromfearless.com/2010/09/07/url-token-replacement-techniques-for-wordpress-3-0/

它基本上相当于创建一个过滤器,该过滤器在内容提交到数据库之前以及在将内容呈现给页面之前对内容起作用。该技术是透明的,因为它不会影响正常的编辑实践。您仍然可以在编辑器中创建内容,引用其他页面,帖子,图像等,并且在不同环境中进行编辑时,它们会很好地显示。

在最近的项目中,我已经完成了所有这些以及其他一些WP&#34;标准化&#34;功能集成到我设置的单个引导程序插件中忘记。

案例2:项目正在进行中

现在,在您的情况下,您将在开发生命周期中继续前进。它会采取一些工作来取代这些域名引用,但如果你按照我上面提到的步骤进行操作,你应该只需要执行一次。我上面提供的链接为您提供了您需要完成这项工作的SQL。重要的是要注意,在多站点环境中,您需要为每个&#34;子站点执行此操作&#34;你已经创造了。

一旦您更新了数据库,我建议您执行 CASE 1 中的步骤,这样您就不必再重复这些步骤。

奖励:同步内容

同步内容很痛苦。我在最近的项目中所做的是让客户在登台服务器上工作并促进上游到生产的变化。那么,这将使您在下游与沙箱同步。编写一个shell脚本,从您的登台数据库转储SPECIFIC内容表的副本,并将它们导入您的沙箱数据库(有效地替换内容表。)您应该能够看到域令牌替换技术的好处。

未检入源代码管理的图片,例如应将客户端图像推送到公共位置,例如一个S3桶。有WP插件可以帮助你。这样可以节省大量时间来跨环境同步资产。

我希望这可以帮助你 - 如果没有,那总是SilverStripe;)

答案 1 :(得分:0)

我们很容易在开发服务器上构建并使用此sql查询转移到实时服务器:

UPDATE wp_posts SET guid = REPLACE(guid, 'devserver.com', 'liveserver.com');
UPDATE wp_posts SET post_content = REPLACE(post_content, 'devserver.com', 'liveserver.com');
UPDATE wp_options SET option_value = REPLACE(option_value, 'devserver.com', 'liveserver.com');

答案 2 :(得分:0)

去年我编写了一个bash脚本,将实时MU安装镜像到沙盒中。它并不完美而且不理想,但却是一个很好的起点。它包括镜像数据库,文件和重写镜像数据库以反映沙箱。

请参阅http://pp19dd.com/2011/01/bash-script-to-mirror-wordpress-mu-installation-into-a-sandbox/

对于开发人员来说,能够拍摄实时和精确内容快照以复制条件非常重要。

答案 3 :(得分:0)

我刚刚开始使用这个新版本的网站。我的解决方案是使用Vagrant。 Vagrant也是平台无关的,所以你可以在Mac上开发,而队友正在使用Windows。同一个Vagrant项目同时运行。

我写了一篇关于如何在你的机器上本地运行的生产环境中使用Wordpress设置Vagrant的指南。我不经常使用Wordpress,但每次我总是麻烦在我的Mac上设置Apache和PHP,然后确保所有的Wordpress网站网址都在数据库中更新。

一旦配置了Vagrant项目,它就可以让团队中的任何开发人员使用Wordpress的本地实例运行该命令。简而言之,Vagrant将从客户机中的主机安装项目目录,并通过客户机运行Apache,MySQL,PHP。您仍然使用主机的IDE(正常情况下)和主机浏览器。无需在任何地方上传文件,只需在本地计算机上保存,刷新浏览器。

http://www.distilnetworks.com/wordpress-development-with-vagrant/&lt; - 解释如何使用Vagrant

设置它

https://gist.github.com/markmalek/fd2e6e65385400d9cd47&lt; - 配置Vagrant时的shell脚本

shell脚本可能会好很多,这对我有用,但我很想听到一些更好的建议或想法。我是Vagrant的新手,现在将它用于我们的其他一些项目,所以我认为它也适合这里。

我确实更新了shell脚本中的GUID,我在另一个答案中读到了你不应该这样做,因为feed阅读器使用它。在这种情况下,它不相关,因为它仅适用于您的本地Wordpress实例,但我不会在生产中进行此更改。有关更好的说明,请参阅this answer

答案 4 :(得分:0)

没什么大不了的,只需用一个wp迁移插件将您的整个站点备份并在实时服务器安装上导入,该插件就会自动替换所有url。