我们使用ExpressionEngine CMS(php)来创建网站。对于每个站点,我们设置了一个subversion存储库并提交EE安装以及所使用的任何自定义模板,图像,javascript等。存储库中包含的文件包含所有环境变量和.htaccess文件。
我们有一个开发服务器,其中包含通过我们用于开发的提交后更新的存储库的工作副本。当我们准备发布时,我们在subversion中创建一个分支,进行生产环境所需的任何更改,标记版本号,导出存储库,将其上载到实时服务器上的新目录,并将文件符号链接到位。回滚就像symlinking回到之前的版本一样简单。
问题在于我们必须修改开发和生产服务器需要不同的环境变量的步骤。这就像(联合国)评论将重定向到错误位置的htaccess规则,交换谷歌地图API密钥,因为域不同,运行脚本将javascript最小化为一个混淆文件以保持大小和http连接关闭等等
问题是如何更加自动化?我们希望将发布程序降至最低限度。我熟悉Capistrano和Make等工具的存在,但我不确定如何让他们修改所有必要的文件......你会如何组织这样的事情?是否值得花时间自动化,每隔几周可能会发生一次?
答案 0 :(得分:3)
可以通过启用$ _SERVER ['HTTP_HOST']来处理很多配置选项。
例如
switch ($_SERVER['HTTP_HOST']) {
case 'developement.domain.com':
$api_key = "dev environment api key";
break;
default:
$api_key = "live environment api key";
}
然后,对于.htaccess问题,您可以使用AccessFileName指令在vhost定义中设置备用.htaccess文件:
<VirtualHost *:80>
ServerName sitename
AccessFileName .htaccess-dev
</VirtualHost>
答案 1 :(得分:0)
我通过将配置文件添加到 Subversion忽略列表来解决此问题。它已在Stackoverflow上解决:see question #149485
基本上,我只在{SVN}中保留setup.default.php
,在每次安装中我都会手动将其复制到忽略列表中的setup.php
。这可以防止将文件重新签入回购。该文件很少有变化,可以根据需要进行处理。
答案 2 :(得分:0)
另一种方法是将配置文件分支到一个发布分支,然后在目标上将它们标记为已编辑,然后使用记住如何进行三向合并的合并脚本。如果源上的配置发生变化,那么它可能会产生冲突,这是一件好事,因为您可能需要对目标进行类似的更改。
因此,您可以在项目的整个生命周期中保留两棵树:开发和发布。随着开发过程的成熟,您将它们集成到发布中。如果你有一个更复杂的发布过程,你也可以拥有第三个QA树。
当您提取新版本时,您将从工作区域复制到“发布”区域(作为合并/集成),而不是拉出一个全新的分支。如果您还希望在该点发布树的快照时间,则创建一个单独的分支/复制/标记,仅用于存档目的。
顺便说一下:这是Perforce闪耀的领域之一 - 它会记住你已合并的内容,并且不会尝试合并两次。
答案 3 :(得分:0)
我们通过维护特定于配置的目录来解决这个问题。
因此,例如,如果您在开发和生产之间有不同的.htaccess和config.php文件,它们将保存在/ trunk / config / {environment} /
中我们使用ant / nant脚本来创建发布包,脚本为每个环境都有一个构建任务。这些任务获取配置特定文件。
-
另一位评论者建议开启HTTP_POST。不幸的是我不能直接评论(不是一个足够高的代表)。使用HTTP_POST确定环境配置存在潜在的安全问题,因为其价值来自客户端。