WordPress站点的团队开发

gzszwxb4  于 2023-02-03  发布在  WordPress
关注(0)|答案(5)|浏览(140)

我不是一个WordPress开发者,但我正在努力为一个团队的人确定使用WordPress的最佳方式。对于一个Rails项目或其他大多数项目,很容易在本地工作,并部署上游,但我的理解是,WordPress并没有使这一点很容易。也许这是一个神话?
据我所知,URL和文件路径存储在数据库中并不罕见,这似乎会使从dev --〉stg --〉prd部署WP项目变得困难(每个环境都有自己的URL和可能不同的文件路径),更不用说单个开发人员拥有自己的dev环境,需要将其“合并”到一个统一的副本中进行部署。
我可以将所有开发人员沙箱配置为使用单个数据库,但这里再次强调,如果存储URL和文件路径,则什么也得不到。
这里有一系列的小问题,但我越想这些,我越意识到我真正需要的是关于如何构建一个WordPress站点的最佳开发的建议,这个站点将被一个开发团队攻击。我 * 更喜欢 * 我们在其他项目中使用的沙盒方法,但我不知道一旦所有的开发完成,是否/如何能够统一。

uurv41yg

uurv41yg1#

**警告:**传入文本墙..

@Rob,说到团队合作,WP就是地狱;然而,通过一些工作(和一些符号链接魔术),你可以设置你的WP项目,这样你的主题或插件的工作文件可以独立于WP核心。其中一些使用WP的内置机制,一些与SVN外部(提示)有关。我会让你谷歌,因为它超出了你的问题范围。

关于WP GUID的说明

**警告:**不要替换GUID。WP GUID用于外部源阅读器。源阅读器使用GUID来确定内容是否是最近的。更改GUID基本上会告诉这些阅读器源中的每个条目都是新的(尤其是帖子)。这会为您不需要的旧内容引入大量额外的开销。GUID是一个旧功能,很久以前就应该更改为UUID。从技术上讲,您可以在GUID字段中使用任何内容,但WP使用永久链接来填充该字段-旧。

唯一可以接受更改GUID的情况是对于内容全新的新wp项目。

回答您的问题:

WP在DB中的十几个地方存储了对当前域的显式引用。这些位置很难跟踪和更改,而您最不想做的事情就是手动编辑要导入到生产中的 *.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文件,以便您可以跨多个环境(过渡、生产)使用一个配置文件。您只需要一个if(...)switch(...)块,例如:

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

(有更好的方法来写那个条件......这只是一个粗略的例子。)
配置你的所有WP设置到你的每一个远程环境。希望你会签入到一个源代码控制库。
这基本上解放了您,让您的团队拥有特定于其环境的配置设置,同时允许您一次签入每个远程环境的设置。
你要做的第二件事是建立一个机制来拦截和过滤特定域的链接。这个机制背后的意图是用一个token/placeholder来替换任何对当前域的引用。我在这里概述了实现这一点的技术:http://www.farfromfearless.com/2010/09/07/url-token-replacement-techniques-for-wordpress-3-0/
它基本上相当于创建一个过滤器,在内容提交到数据库之前和内容呈现到页面之前对内容进行过滤。该技术是透明的,因为它不会影响正常的编辑实践。您仍然可以在编辑器中创建您的内容,引用其他页面,帖子,图像等,并且它们在不同的环境中编辑时也会显示得很好。
在最近的项目中,我已经将所有这些和一些其他的WP“规范化”特性打包到一个单独的引导插件中,我设置并忘记了它。

案例2:项目正在进行中

现在,在您的情况下,您已经进入了开发生命周期的更深阶段。替换这些域引用需要一些工作,但是如果您遵循我上面概述的步骤,您应该只需要做一次。我上面提供的链接为您提供了完成这项工作所需的SQL。需要注意的是,在多站点环境中,您需要为您创建的每个“子站点”执行此操作。
一旦您更新了DB,我建议您执行CASE 1中的步骤,这样您就不必重复这些步骤了。

附加功能:同步内容

同步内容是一件痛苦的事情。我在最近的项目中所做的是让客户端在临时服务器上工作,并将上游的更改提升到生产中。因此,这就剩下了下游的同步到沙箱(es).编写一个shell脚本,从您的临时DB转储SPECIFIC内容表的副本,并将它们导入到沙箱DB中(有效地替换了内容表)。您应该能够看到域令牌替换技术的好处。

未签入源代码管理的图像,例如客户端图像,应该被推到一个公共位置,例如S3 Bucket。有WP插件可以帮助你做到这一点。这将保存大量的时间,必须同步跨环境的资产。
我希望这对您有所帮助--如果没有帮助,SilverStripe总是存在的;)

dxxyhpgq

dxxyhpgq2#

我们可以很容易地在开发服务器上构建并使用以下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');
qcuzuvrc

qcuzuvrc3#

去年我写了一个bash脚本来镜像一个实时的MU安装到一个沙箱中。它不是完美的,也不是理想的,但是一个很好的起点。它包括镜像数据库,文件和重写镜像数据库来反映沙箱。
参见http://pp19dd.com/2011/01/bash-script-to-mirror-wordpress-mu-installation-into-a-sandbox/
对于开发人员来说,能够拍摄实时和准确的内容快照以复制条件是很重要的。

s1ag04yj

s1ag04yj4#

我刚刚在启动一个新网站时遇到了这个问题。我的解决方案是使用Vagrant。Vagrant也是平台不可知论者,所以你可以在Mac上开发,而一个队友使用Windows。同一个Vagrant项目可以在两者上运行。
我写了一本指南,教你如何在本地运行的生产环境中设置Vagrant和Wordpress。我不经常使用Wordpress,但每次我都很麻烦,要在Mac上设置Apache和PHP,然后确保数据库中所有的Wordpress网站URL都更新了。
配置好Vagrant项目后,团队中的任何开发人员只需一个命令就可以启动并运行Wordpress的本地示例,简而言之,Vagrant会将项目目录从主机挂载到客户机,并运行Apache、MySQLPHP。您仍然使用主机的IDE(就像你通常会做的那样)和你的主机浏览器。没有任何文件上传到任何地方,它只是代码,保存,刷新浏览器都在你的本地机器上。
http://www.distilnetworks.com/wordpress-development-with-vagrant/〈-解释如何使用Vagrant进行设置
https://gist.github.com/markmalek/fd2e6e65385400d9cd47〈-调配Vagrant时的shell脚本
shell脚本可能会更好,这是我的工作,但我想听到一些更好的建议或想法。我是新的流浪汉,现在使用它为我们的一些其他项目,所以认为这将是一个很好的适合在这里。
我确实更新了shell脚本中的GUID,我在另一个答案中读到过,你不应该这样做,因为提要阅读器使用这个。在这个例子中,它是无关紧要的,因为它只是针对你的本地WordPress示例,但我不会在生产中进行这个更改。请参阅这个答案以获得更好的解释。

5rgfhyps

5rgfhyps5#

没什么大不了的,只需备份您的整个网站与所有在一个可湿性粉剂迁移插件和导入现场服务器安装,插件将取代所有网址自动。

相关问题