沙盒网站的最佳做法?

时间:2009-07-13 16:39:54

标签: php svn sandbox

我目前在网上商店工作,几乎没有正式流程和数百万个PHP网站,包括自定义CMS和购物车代码等棘手的东西。

我们正在努力改善事物。我正在推动CVS / SVN。

我的问题是,沙盒网站工作的最佳做​​法是什么?我们在LAMP堆栈上。我们的一些网站有当前域的硬编码(或用户输入的链接),因此设置一个不同的域,如preview.mysite.com将打破指向www.mysite.com的链接。如果我们开始应用回归测试,那么这些域应该是统一的测试?这总是可以通过本地主机条目来完成。

所以,考虑到我们有很多站点,最好有一个进程可以在适当的沙箱中进行预览。想知道这将如何与SVN / CVS循环整合。

我只是在寻找行业最佳实践,因为我们正努力实现这一目标。如果这意味着将站点克隆到额外的服务器,那就这样吧。

2 个答案:

答案 0 :(得分:1)

所以是的,你应该有第二个STAGE服务器。我所做的是将我的代码放入我的开发盒中的CVS,并在我进行时定期提交。当我准备将版本推送到“STAGE”服务器时,我会查看我想要STAGE的文件并将它们标记为STAGE:

cvs tag -F STAGE

然后我转到STAGE服务器并使用STAGE标志进行更新以获取STAGE版本的文件:

cvs up -r STAGE

这也将粘性标记设置为这些文件的“STAGE”,因此将来我可以在我的舞台服务器上进行更新时关闭STAGE标记:

cvs up

最后,当我在STAGE服务器上测试我的代码时,我使用rsync将其滚动到生产服务器...

我们有几个开发人员一起工作,因此保持稳定的STAGE版本可能会变得棘手。在这种情况下,如果我只对一个或两个文件进行少量更改,我只会将它们单独scp到生产服务器上。

最后,为了确保我知道生产服务器上的内容,在将文件或文件发送到生产服务器之后,我将我的舞台服务器上的所有文件标记为RELEASE,以及RELEASE20090713或当前的任何文件日期是..这样我可以移动快照,但如果需要,我可以获得。请注意,这不会更新粘性标记,所以我的常规旧

cvs up

舞台服务器上的

仍然可以获取最新的STAGE文件。

现在就你的情况而言,就硬编码的网址而言......你已经知道......糟糕的坏事......所以你要去修复它们......但是你可以使用apache URL重写来重写STAGE上的URL与自定义TCP端口通信。

如果您拥有类似cisco路由器的智能网络设备,则可以将其设置为为您的IP执行PAT(端口地址转换)。端口80可以转发到您的常规生产网络服务器,端口8080可以转发到您的STAGE服务器(其端口80)..然后您所做的就是让您的STAGE服务器上的URL重写URL并将8080附加到它看到的所有主机名。现在您的所有帖子和链接都将转到正确的STAGE服务器,您的apache配置也可以完全相同。

答案 1 :(得分:1)

关于硬编码(或用户输入的)域名:您可以将域名添加到hosts file。这应该可以在开发和预览期间解决您的问题。您的浏览器将检索www.mysite.com的IP并在hosts文件中找到127.0.0.1或预览站点的IP。棘手的部分是,只是通过查看浏览器中的URL,您无法确定是否正在查看生产站点。 (Firefox的ShowIP addon可以为您提供帮助。)

关于CVS / SVN:我真的建议你去SVN。它比CSV更难使用但具有一些优点(例如可以重命名)。有关更多信息,请参阅this question

至于沙箱中的预览,这就是我们所做的:我们在trunk上(或在分支上进行大部分开发,但其余过程几乎相同)。一旦我们准备好向客户展示,我们就会创建一个tag。此标记用于更新预览服务器。如果客户不满意,我们会在主干(或分支机构)上开发更多内容,创建新标签,使用标签更新预览等。一旦客户满意,我们会使用在预览上运行的完全相同的标签来更新生产服务器。这样我们就可以确保预览和生产服务器具有相同的代码库。