网站版本pipe理实践

我试图search,但我不能真正找出最好的search条件来find我的答案。

我有一个Apache 10.04的Ubuntu 10.04服务器。 我想build立一个将被版本化的网站,所以我的文件结构如下所示:

/var/www/MyApp1.0 /var/www/MyApp1.1 /var/www/dev -> /var/www/html/MyApp1.1 /var/www/test -> /var/www/html/MyApp1.0 

其中“dev”和“test”是指向其他文件夹的符号链接。 所以我的这两个环境的URL将是“ http://my-url.com/dev ”或“ http://my-url.com/test ”。 对于我的产品环境,我希望浏览器中的URL只是“ http://my-url.com ”,而不要redirect到“ http://my-url.com/prod ”。

我怎样才能设置它,使基地址指向一个特定的版本,没有redirect改变的URL?

谢谢,

特拉维斯


编辑:

我觉得我应该更详细地介绍一下我们目前的设置,并且告诉我们,我们没有太多的时间花费在做大量的改变上。 原谅的长度,但我想画一个准确的形象,我们目前的设置,以获得最佳的解决scheme。

我们的开发团队由9人组成,其中5人负责我们的主要项目(C ++),3负责为我们的主要项目提供艺术服务,我负责所有的网页devise,以补充我们的主要项目。 我们使用MS SourceSafe进行版本控制。 我知道有很多人对此抱怨,但是我们已经使用了一段时间,而且现在不想改变它,因为我们有太多其他的优先事项。

开发团队的每个成员(包括我自己)都在Windows工作站上工作。 我们没有在我们的任何本地机器上安装Apache。 在我开始在这里工作之前,他们有一台安装了Apache的Ubuntu Linux服务器来安装这个站点。 他们会在Linux服务器的开发区域进行开发,每当他们要创build一个新的Web构build时,他们都会将这些文件复制到他们的本地机器上,然后从那里检查到SourceSafe。

由于我一直在这里,我在Linux服务器上设置了一个Samba共享,并将其映射到我的Windows工作站上的networking驱动器。 这样,我可以检查文件,而不需要将它们复制到我的本地计算机。 由于我现在是唯一一个在networking上工作的人,所以我一直保留这些文件,并写了一个批处理脚本来完成“构build”过程。 每当我想用新版本更新我们的testing环境时,我都运行批处理脚本,并执行以下操作:

  • 创build一个新的文件夹来包含新的网站版本
  • 将文件从开发环境复制到新文件夹
  • 更新“testing”链接指向新的文件夹
  • 检查项目到SourceSafe,保持文件签出
  • 使用我更新的文本更改日志中的注释来标记项目

所以我们确实有一个版本控制系统,可能不是最好的,但为我们工作。 我想我可以停止创build版本化的文件夹和使用符号链接,但我有点喜欢有能力轻松快速地更新符号链接在不同版本之间切换。

我真的很感谢答案,让我知道实际的最佳实践是什么(我现在意识到,我没有给我的问题这个话题的好标题)。 我发现那些信息很丰富,而且作为一个真正自己工作的人,或者是一个同样缺乏经验的小团队,我之前并不了解这些信息,并会在未来的努力中遵循这些做法。

但是,为了时间和方便,是否有一个很好的方式来保持我目前的设置,只是redirect基地址到不同的文件夹而不改变URL? 本质上,我将/ var / www作为MyApp1.0的符号链接,但是我遇到的问题是我无法访问/ var / www / dev或/ var / www / test了。

再次感谢,

特拉维斯

我不会用符号链接来做; 我会用mod_rewrite来完成。

 RewriteEngine on RewriteRule /dev/(.*) /var/www/MyApp1.1/$1 [L] RewriteRule /test/(.*) /var/www/MyApp1.0/$1 [L] RewriteRule /(.*) /var/www/MyApp0.9/$1 [L] 

最佳做法是使用版本控制系统,如subversion,mercurial或git来处理版本。

这个过程就是你在任何地方设置了一个主或者根目录的仓库(它可能在web服务器上,或者也可能在别的地方)。 要对站点进行更改,请查看存储库中的代码,在本地计算机上进行修改和testing,然后在对它们感到满意时提交或合并更改到存储库(甚至在此之前 – 这就是版本控制的美妙之处)。

然后你在Apache中设置了两个站点 – 不多也不less。 一个网站是,而且将永远是你现在的生产现场。 另一个是,而且一直都是您的QA /舞台/预制网站。 当你有一个新的变更集,你想要把你的生活,你首先检查/更新/合并修改适当的版本号从存储库到QA区域,并重新testing所有的东西,以确保它看起来和按预期工作。 假设一切都好,你现在可以为你的现场做同样的事情。

这使您无需每次更新网站时都要设置一组新的链接或文件夹,并且可以与大多数常用于网站开发的工具配合使用。 它也会跟踪你的历史做得更好。

我不知道一个Apache安装将允许您从符号链接服务页面无论如何。 我知道我的不会。

@Ignacio Vazquez-Abrams:

你的答案看起来像我的解决scheme,但我不得不改变一下,我需要一些额外的帮助。 我的.htaccess文件(位于/ var / www / LicenseManager,它是我的域的根目录)如下所示:

 Options +FollowSymLinks Options +Indexes RewriteEngine On RewriteBase / RewriteRule dev(.*) /var/www/LicenseManager/LicenseManager1.02/$1 [L] RewriteRule test(.*) /var/www/LicenseManager/LicenseManager1.02/$1 [L] RewriteRule ^$ /var/www/LicenseManager/LicenseManager1.02/$1 [L] 

我在这方面有几个问题。 通过这种方式设置,如果我的URL是“ http://my-url.com/dev/ ”,但是如果我的URL是“ http://my-url.com/dev ”(没有尾随斜线),那么我的包含文件没有find(CSS和JavaScript文件)。 我不是很熟悉正则expression式,所以也许只是修复这些问题。

另外,我不得不把你的例子中的第四行replace成我的例子,否则我得到一个内部服务器错误。 更改后,它适用于“ http://my-url.com ”或“ http://my-url.com/ ”,但无论如何我仍然有我的包含文件的问题。

那么我怎样才能改变我的.htaccess文件,以便包含文件被find有或没有结尾的斜杠?

再次感谢!

特拉维斯

PS我知道这不应该像一个论坛,我应该发表评论作为一个答案的别人的post,但我的问题会更难以阅读评论框,没有格式。 另外,我太长时间的啰嗦,以满足我在评论框中需要的一切。


编辑:

解决了! 这是我最后的.htaccess文件的样子:

 Options +FollowSymLinks Options +Indexes RewriteEngine On RewriteBase / RewriteRule ^dev$ dev/ [R] RewriteRule ^test$ test/ [R] RewriteRule ^dev/(.*) /var/www/LicenseManager/LicenseManager1.02/$1 [L] RewriteRule ^test/(.*) /var/www/LicenseManager/LicenseManager1.02/$1 [L] RewriteRule ^(src/(.*)|$) /var/www/LicenseManager/LicenseManager1.02/$1 [L] 

我不得不改变正则expression式,因为它们的方式,如果在任何地方都find“dev”或“test”,它们会匹配,所以“ http://my-url.com/garbage/blahdevblah.html ”会被redirect到“ http://my-url.com/dev/ ”。 脱字号(^)确保“开发”只能在开始时被发现,并且美元符号($)确保没有任何东西跟随“开发”。 我改变了其他人,以确保像“ http://my-url.com/garbagedev/nothing.html ”不符合规则。

对于最后一条规则,我意识到如果正则expression式只是(。*),它匹配任何东西,所以即使它redirect后,它仍然匹配,并尝试重新定向,导致无尽的循环,最终显示你500内部服务器错误。 “src”文件夹是我的项目中唯一的目录,而index.php是主文件夹中唯一的脚本(index.php在省略时自动显示)。 所以最后一条规则基本上是说“如果string以”src /“开头,或者是空的,redirect。

再次感谢您的帮助,Ignacio!