我如何改进我的开发和部署策略?

时间:2010-01-02 19:31:22

标签: svn workflow lamp

我正在开发一个在LAMP堆栈(Linux Apache Mysql PHP)上运行的Web应用程序,并希望有关改进我的工作流程的建议。

我有3个环境:

  1. 我的本地机器AKA我的开发环境
  2. 我的专用服务器上的暂存帐户,以便我可以测试该网络应用
  3. 我的专用服务器上的生产帐户
  4. 我在本地计算机上进行所有开发,并使用位于我的专用服务器上的subversion服务器。我设置了一个钩子脚本,这样每当我提交时,我的“staging”帐户都会使用新代码进行更新。

    偶尔我会确保暂存帐户中的所有内容都能正常运行,并通过一个小脚本将更改推送到我的生产帐户。

    这在大多数情况下运作良好,但有一些烦恼:

    • 我的域名在几个地方都是硬编码的,因此在环境之间切换非常耗时。我可以手动修改我的主机文件,但它不是很快,并且它不适用于同一台服务器上的2个帐户(prod / staging)。

    • 我无法在所有三种环境中使数据库保持最新状态。我可以在所有环境中使用相同的数据库,但我必须承担破坏生产环境的风险。

    所以,我的问题是:我该怎样做才能缓解这些问题?

    更新:硬编码域问题是由第三方软件引入的,因此,“不硬编码”目前不是一种选择。

2 个答案:

答案 0 :(得分:1)

理想情况下,您希望将分段作为生产的精确副本。这样,你在演出中看到的,你可以合理地相信你会在制作中看到。提交时自动推送到暂存将不会这样做,因为您通过提交引入的任何错误都会立即发送到暂存。

您可能想要的是设置另一个环境并将其称为测试。这将是您自动推送到提交的位置。使用该环境进行QA,然后您可以将代码打包并推送到分段以进行最终测试。如果在分段上一切顺利,那么将包推送到生产阶段。

至于域名问题,我建议不要硬编码,如果你能逃脱它。或者至少使用不同环境的子域,以便更容易地以编程方式确定您所处的环境。

要使您的数据库在各种环境中保持最新,您可能需要考虑定期从生产中进行转储,并使用该转储更新暂存,测试和开发环境。每天一次应该工作。这样,您就可以开发和测试用户在生产中看到的内容。

答案 1 :(得分:1)

关于你的最后几点,明显的解决方案似乎是(1)不要在任何地方对域进行硬编码,或者如果必须,至少将其拆分为一个未通过更新的“本地设置”文件SVN; (2)编写一个脚本来同步数据库(即将生产数据复制到暂存和/或本地环境,当然不是相反)并偶尔运行它。