SAAS工作流的版本控制

时间:2011-05-05 05:49:37

标签: php git version-control saas

我很抱歉,如果这已被涵盖,但我可以诚实地说,我已经花了至少 3天试图提出一个版本控制解决方案,我的脑袋即将爆炸。< / p>

我也浏览了颠覆书,但我仍然很困惑。

基本上我有一个稳定增长的SAAS应用程序。目前它真的只有一个开发人员(我)在应用程序上工作,但如果对它的兴趣继续下去,我可能不得不开始招聘。

该应用程序是用PHP编写的,使用MySQL数据库并托管在沼泽标准LAMP堆栈上。

目前我在我的开发机器上安装了GIT,但是我的缺乏理解意味着我的提交是不规则的并且通常无关紧要,我遇到的问题是它没有跟踪目录的更改。

我主要担心的是部署到我们的生产服务器。我们的客户都有自己的应用程序文件夹和自己的数据库。

目前,当我们运行更新时,我们必须编写一个自定义更新脚本:

1.Duplicates clients installation into a backup folder
2.Removes the live installation folder
3.Copies the new updated installation folder
4.Copies the users config files from the backup to the live install
5.Tells the operator to make the changes to the users database using a third party app
6.Cleans up.

有5个用户很无聊,但现在我们已接近50,这绝对是一场噩梦。

为了使事情变得复杂(并且更加安全),每个安装文件夹都包含唯一的数据库设置,这意味着只能从该应用程序中更新数据库模式。

我一直在考虑设置一个gitorious server,但我想在我深入挖掘自己之前会先寻求一些建议。

由于

3 个答案:

答案 0 :(得分:2)

也许您可以将应用程序文件保存在用户主目录之外的单独目录中,并在每个用户目录中创建一个指向您的应用程序的符号链接?例如:

ln -s /var/myapp/publicfiles /home/someuser/lib

这样,您只需更新代码一次,然后更新每个用户的架构。可以从git存储库更新publicfiles目录,因此不需要手动复制文件。

答案 1 :(得分:1)

对于源代码

如果每个客户端具有不同的配置和可能略有不同的源文件,您可能希望为每个客户端保留一个单独的git存储库,并使用rebase从主存储库引入更改。

即,在服务器上有一个目录 - 持有主存储库( git存储库)。您更改推送到此主存储库,然后为每个客户端执行 rebase 操作。

在每个客户端中,您可以签入其他文件或更改现有文件。 rebase的工作方式是撤消本地更改,从主服务器中提取所有更改,然后重新应用本地更改。基本上,本地更改/配置会覆盖主服务器(通用配置)。

  • 注意:如果您可以将每个客户端文件与源树的其余部分分开,则可以使用Kaivosukeltaja的符号链接方法。但是,您可能仍希望对这些每个客户端文件进行版本控制,除非它们以某种方式由应用程序本身进行管理。

对于数据库

您可能希望使用类似于Rails(可能还有其他)的某种迁移文件。在您的源代码树中,有一个迁移文件目录(可能是SQL命令)对数据库进行必要的更改(如果您同时拥有“向前迁移”和“向后迁移”文件,则最好)。

原则上,您可以使用post-rebase挂钩来自动运行脚本并应用新的迁移脚本来更新数据库。在实践中,我会更加小心客户数据。

答案 2 :(得分:0)

我认为您的问题是您拥有的部署数量。这就是造成最大噩梦的原因。但是,它仍然可以通过这种形式进行管理。基本上,你想要做的是:

  1. 为每个部署克隆您的git存储库
  2. 为每个部署进行任何自定义编辑
  3. 对于每次软件升级,您将完成每个部署并合并默认(主)存储库中的更改。
  4. 这应该在更改中合并,而不会弄乱应用程序中的任何内容。唯一的变化是编写一个脚本,可以在部署新代码后进行数据库升级/迁移。