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

Svn 如何改进我的开发和部署策略?,svn,workflow,lamp,Svn,Workflow,Lamp,我正在开发一个运行在LAMP堆栈(Linux-Apache-Mysql-PHP)上的web应用程序,希望得到关于改进我的工作流程的建议 我有3个环境: 我的本地机器也称为我的开发环境 在我的专用服务器上设置一个登台帐户,以便测试web应用程序 我的专用服务器上的生产帐户 我在本地计算机上进行所有开发,并使用位于专用服务器上的subversion服务器。我设置了一个钩子脚本,这样每当我提交时,我的“暂存”帐户都会用新代码更新 偶尔,我会确保登台帐户上的一切正常,并通过一个小脚本将更改推送到我的生产

我正在开发一个运行在LAMP堆栈(Linux-Apache-Mysql-PHP)上的web应用程序,希望得到关于改进我的工作流程的建议

我有3个环境:

  • 我的本地机器也称为我的开发环境
  • 在我的专用服务器上设置一个登台帐户,以便测试web应用程序
  • 我的专用服务器上的生产帐户
  • 我在本地计算机上进行所有开发,并使用位于专用服务器上的subversion服务器。我设置了一个钩子脚本,这样每当我提交时,我的“暂存”帐户都会用新代码更新

    偶尔,我会确保登台帐户上的一切正常,并通过一个小脚本将更改推送到我的生产帐户

    这在大多数情况下都能很好地工作,但也有一些恼人之处:

    • 我的域名有几个地方是硬编码的,因此在不同环境之间切换非常耗时。我可以手动修改我的hosts文件,但速度不太快,而且不适用于同一服务器上的两个帐户(prod/staging)

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

    所以,我的问题是:我能做些什么来缓解这些问题


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

    理想情况下,您希望暂存是生产的精确副本。这样,您在分期中看到的内容可以合理地确定您将在生产中看到。当您提交时自动推送到暂存不会这样做,因为您在提交时引入的任何bug都会立即发送到暂存

    您可能需要设置另一个环境并将其称为测试。这将是您在提交时自动推送的地方。使用该环境进行QA,从那里您可以打包代码并将其推送到最终测试的阶段。如果在准备阶段一切顺利,那么将包推向生产阶段

    至于域名问题,如果你能侥幸逃脱的话,我建议你不要硬编码。或者至少为不同的环境使用子域,以便于通过编程方式确定您所处的环境


    <>将数据库保持在最新的环境中,您可能需要考虑定期从生产中进行转储,并用该转储更新您的分级、测试和DEV环境。一天一次就行了。这样,您就可以根据用户在生产中看到的内容进行开发和测试。

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

    感谢Darell的建议。我理解需要一个与生产完全相同的环境,但现在,由于我是我的应用程序的唯一开发人员/测试人员,我不太可能在测试时犯错误。对于域名问题,我没有真正的权力,因为我使用了第三方软件,该软件负责:/。我看看子域是否工作正常。奥利弗:我编辑了你的问题,试图使它更具体。因此,这不是一个论坛,对于“对此有何评论?”的问题往往效果不佳;我认为你在最后一段中很好地确定了具体的问题,因此试图强调这些问题(也改变了标题的重点,不再是征集轶事),有人能告诉我与dev相关的一般惯例和含义吗,stg和prod。我似乎对它们的含义感到困惑(或者我似乎一直在使用与其他人使用的不同步的约定/语义)。ThanksI相信这是通常的惯例:Dev:environment for developers Staging:environment for quality assurance(在将更改推送到产品之前)Production:public environment