【问题标题】:Simplest way to use mercurial to manage differences between web development and deployment?使用 mercurial 管理 Web 开发和部署之间差异的最简单方法?
【发布时间】:2010-10-27 06:44:33
【问题描述】:

我正在使用 mercurial 进行网站开发。我“认为”我使用正确。

我在我的开发机器上开发,相当定期地提交。我会定期将我的提交推送到我的托管站点开发存储库。

如果事情是按照我希望的方式为实时站点设置的,我会从我的开发机器推送到托管的站点实时存储库。然后我从该存储库下拉到实时服务器。

但是,需要进行一些更改(将目录从 localhost 更改为 www.example.com,更改数据库连接内容等)。

我所做的是在我的 live 机器上进行这些更改,然后将它们推送回 site-live 存储库。我真的不知道我为什么要这样做,但至少有一个变更集坐在那里进行必要的配置更改。

我不知道如何管理这个过程。除了与 hg 一起提交、推和拉之外,我有点迷失了。我是一个开发者,甚至还没有完成合并。

是否有某种方法可以识别特定的变更集并应用它,希望甚至在我从 repo 拉到实时服务器之前?

我想你可以从我的问题中看出,我现在对 hg 和工作流程有点不知所措;)

【问题讨论】:

  • 我基本上遵循了以下 pyfunc 的建议,并使用了 CodeIgniter 论坛的一些帮助。我在 index.php 引导文件中添加了一个常量“IS_PRODUCTION”,该文件是根据 $_SERVER['SERVER_NAME'] != 'localhost' 是否有条件地分配的。然后我只是在我的配置文件中引用了这个常量,并根据它的值有条件地设置参数。我将 .htaccess 文件保留在 mercurial 之外并手动上传,一切都像魅力一样工作。我可以从我的开发推送到 repo,从那里拉到实时站点,而不改变任何东西。

标签: deployment mercurial workflow


【解决方案1】:

这是我的理解:

本质上,您要做的是拥有一个开发、登台和部署环境。您使用“开发”存储库进行开发,在暂存环境中对其进行测试,然后一旦满意,将这些更改拉入部署存储库。 而且,当您从 staging 拉到部署时,您需要更改您的环境/配置数据。

我认为您根本不应该更改配置。

你应该有配置文件,这样你就有一个

  1. 基本配置文件

    basic.conf

  2. 环境特定覆盖

    basic.dev.conf、basic.staging.conf 和基本。部署.conf

  3. 使用环境变量:

    应通过环境定义对基本配置数据的覆盖
    特定变量:APP_ENV:dev 或 staging 或 deploy

这样您应该能够在不更改配置信息的情况下根据环境覆盖配置。

每次将代码从开发拉到登台再到部署时,依赖于对配置文件进行更改并不是一个好主意。

【讨论】:

  • 是的,我认为这是个坏主意! :) 我想我可以弄清楚如何根据查询环境并根据结果使用不同的配置文件来更改我所有的 php 内容。我认为我会被卡住的是 .htaccess 文件。我假设这一切都会以某种方式通过 Apache 完成?
  • @neomech:你可以排除在外,也可以将实时服务器保留在版本控制中。但是创建一个基于 env 的配置覆盖机制,您将拥有一个完美的工作流程。
  • 好的,我正朝着那个方向前进。我想我只是将 .htaccess 文件放在 .hgignore 列表中,根据需要根据各种环境进行修改。我可以通过 php getenv 和 if 语句(我认为)处理其他配置更改。感谢您的反馈。
【解决方案2】:

我会将实时服务器置于版本控制之外。这意味着我将有一个小的“安装”脚本,它从存储库中提取更新,删除任何不必要的开发文件,并应用正确的配置文件。开发和生产配置文件都应该在版本控制中。

【讨论】:

  • 目前制作安装脚本超出了我的能力范围,但我会在以后看看它。谢谢!
  • 根据我的经验,最好从一个产品的安装脚本开始,每次出现新的特殊情况时更新它。最后做比较麻烦,因为你需要在它们出现很长时间后附加所有特殊情况。
猜你喜欢
  • 1970-01-01
  • 2021-11-30
  • 2016-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
相关资源
最近更新 更多