【问题标题】:Version Control for SAAS WorkflowSAAS 工作流的版本控制
【发布时间】:2011-05-05 05:49:37
【问题描述】:

很抱歉,如果这已被涵盖,但我可以坦率地说,我已经花了至少 3 天的时间来尝试提出版本控制解决方案,但我的脑袋快要爆炸了。

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

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

该应用程序是用 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,但我想在深入挖掘自己之前,我会寻求一些关于如何进行的建议。

谢谢

【问题讨论】:

    标签: php git version-control saas


    【解决方案1】:

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

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

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

    【讨论】:

    • 我非常喜欢这个想法。我曾梦想做这样的事情,但从来不知道如何去做。我唯一的问题是......是否仍有可能在他们的目录中保留一些特定于每个用户的静态文件,例如他们的数据库配置文件?
    • @Tim:是的,您可以将特定于用户的文件保存在用户目录中,并且只对每个人都相同的文件使用公共目录。
    【解决方案2】:

    获取源代码

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

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

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

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

    对于数据库

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

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

    【讨论】:

      【解决方案3】:

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

      1. 为每次部署克隆 git 存储库
      2. 为每个部署进行任何自定义编辑
      3. 对于每次软件升级,您都将完成每次部署并合并默认(主)存储库中的更改。

      这应该合并更改而不会弄乱应用程序中的任何内容。唯一的变化是编写一个脚本,可以在部署新代码后进行数据库升级/迁移。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-10
        • 2011-12-10
        • 1970-01-01
        相关资源
        最近更新 更多