代码之家  ›  专栏  ›  技术社区  ›  Ty W

在从SVN部署期间维护dev和活动环境之间的配置差异

  •  4
  • Ty W  · 技术社区  · 16 年前

    我们使用ExpressionEngineCMS(PHP)创建网站。对于每个站点,我们都设置了一个Subversion存储库并提交EE安装以及使用的任何自定义模板、图像、JavaScript等。存储库中包含包含所有环境变量和.htaccess文件的文件。

    我们有一个开发服务器,其中有一个通过提交后更新的存储库的工作副本,用于开发。准备发布时,我们在Subversion中创建一个分支,对生产环境进行任何必要的更改,标记发布号,导出存储库,将其上载到Live服务器上的新目录,并将文件符号链接到适当的位置。回滚就像符号链接回上一版本一样简单。

    问题是,在这一步中,我们必须修改开发和生产服务器需要不同的环境变量。这就像(un)评论htaccess规则,这些规则会重定向到错误的地方,因为域不同而交换google map api键,运行脚本,将javascript最小化为一个模糊文件,以保持大小和HTTP连接的关闭等等。

    问题是,如何才能更自动化?我们希望把发布过程降到最低限度。我熟悉Capistrano和Make等工具的存在,但我不确定如何让它们修改所有必需的文件…你将如何组织这样的事情?当这种情况发生时,是否值得花时间自动化?可能每两周一次?

    4 回复  |  直到 15 年前
        1
  •  3
  •   Ben    16 年前

    很多配置选项都可以通过打开$\u服务器['http\u主机']来处理。

    例如

    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>
    
        2
  •  0
  •   Community CDub    8 年前

    我通过将配置文件添加到 Subversion忽略列表 . 在StackOverflow上已经在这里解决了这个问题: see question #149485

    基本上,我只保留 setup.default.php 在SVN中,在每个安装中,我手动将其复制到 setup.php 在忽略列表中。这将阻止将文件签回回购。此文件很少有更改,可以根据需要进行处理。

        3
  •  0
  •   Jon Watte    16 年前

    另一种选择是将配置文件分支一次,放到一个发布分支中,然后在目标上标记为已编辑,然后使用一个合并脚本来记住如何进行三向合并。如果源上的配置发生更改,那么很可能会产生冲突,这是一件好事,因为您可能需要在目标上进行类似的更改。

    因此,在项目的生命周期中,您可以保留两棵树:开发和发布。随着开发的成熟,您可以将它们集成到发布中。如果您有一个更复杂的发布过程,那么您也可以有第三个,QA,Tree。

    当您提取一个新的发布时,您将从工作区复制到“发布”区域(作为合并/集成),而不是提取一个全新的分支。如果您还希望在发布树的那个时间点有一个快照,那么就创建一个单独的分支/复制/标记,您只用于存档目的。

    顺便说一句:这是性能闪耀的领域之一——它会记住您已经合并的内容,并且永远不会尝试两次合并。

        4
  •  0
  •   user111013    16 年前

    我们通过维护一个特定于配置的目录来处理这个问题。

    因此,例如,如果在dev和production之间有不同的.htaccess和config.php文件,它们将在/trunk/config/环境中维护。/

    我们使用ant/nant脚本来创建发布包,这些脚本为每个环境都有一个构建任务。这些任务收集特定于配置的文件。

    ——

    另一个评论建议打开http-post。不幸的是,我不能直接评论(没有足够高的代表)。使用http-post确定环境配置有潜在的安全问题,因为它的值来自客户端。