mysql - Git环境设置。需要建议

标签 mysql git lamp

背景资料:

  • 我们目前是 3 个网络程序员(好,现实生活中的 friend ,没有不信任问题)。
  • 每个程序员都使用 sudo 权限以自己的用户名通过 SSH 连接到代码所在的单个 Linux 服务器。
  • 我们都同时使用不同的文件。我们问这个问题“你在文件 __ 中吗?”有时。我们使用 Vim,所以我们知道文件是否被打开。
  • 我们的开发代码(尚未生产)位于/var/www/
  • 我们的远程仓库托管在 bitbucket 上。
  • 我对 Git 非常*。我以前使用过 subversion,但我基本上是用勺子喂食的指令,并被告知要输入什么来同步代码和提交。
  • 我阅读了 Scott Chacon 的 Pro Git 的一半左右,这是我对 Git 知识的了解程度。
  • 以防万一,我们运行 Ubuntu 11.04、Apache 2.2.17 和 Git 1.7.4.1。

  • 所以 Jan Hudec 在上一个问题中给了我一些建议。他告诉我,一个好的做法是做到以下几点:
  • 每个开发人员在他们的本地计算机上都有自己的存储库。
  • 让/var/www/成为服务器上的存储库。将 .git 文件夹设置为权限 770。

  • 这意味着每个开发人员的计算机都需要有自己的 LAMP 堆栈(或至少安装 Apache、PHP、MySQL 和 Python)。

    代码主要是 JavaScript 和 PHP 文件,因此克隆它并不是什么大问题。但是我们如何在本地管理数据库呢?

    在这种情况下,我们只有两个表,在本地重新创建整个数据库会很简单(至少用于测试)。但是以后数据库变大的时候,是直接远程登录服务器上的MySQL数据库,还是只是有一个“样本”数据用于开发和测试?

    最佳答案

    您正在做的是从“每个人在一个环境中一起工作”过渡到“每个人都有自己的开发环境”。主要的好处是每个人都不会互相踩踏。

    其他好处包括异构开发环境,也就是说,如果每个人都在同一台机器上开发,软件将变得依赖于这种设置,因为开发人员很懒惰。如果每个人都在不同的环境中开发,即使只是相同东西的版本略有不同,他们也将被迫编写更健壮的代码来处理这个问题。

    正如您所注意到的,主要缺点是设置环境更加困难。特别是,确保数据库正常工作。

    首先,每个开发人员都应该有自己的数据库。这并不意味着他们都必须拥有自己的数据库服务器(尽管它适用于异构目的),但他们应该拥有自己控制的数据库实例。

    其次,您应该有一个架构,而不仅仅是数据库中的任何内容。它应该在一个版本控制文件中。

    第三,建立一个新的数据库应该是自动的。这让开发人员可以轻松设置干净的数据库。

    第四,您需要将有趣的测试数据放入该数据库。这就是事情变得有趣的地方......

    你有几种方法可以做到这一点。

    首先是对包含真实数据的现有数据库进行转储,当然要进行 sanitizer 。这很容易,并且提供了真实的数据,但它非常脆弱。开发人员将不得不四处寻找有趣的数据来进行测试。该数据可能会在下一次转储中更改,从而破坏他们的测试。或者它可能根本不存在。

    其次是编写“测试夹具”。基本上每个测试都用它需要的测试数据填充数据库。这样做的好处是允许开发人员准确地获取他们想要的数据,并准确地知道数据库所处的状态。缺点是它可能非常耗时,而且数据通常太干净。数据不会包含所有可能导致真正错误的真实数据。

    第三是根本不访问数据库,而是“模拟”所有数据库调用。你欺骗了所有通常查询数据库的方法,而不是返回测试数据。这很像编写测试装置,并且具有大部分相同的缺点和优点,但它更具侵入性。除非您的系统被设计为这样做,否则将很难做到。它也从未实际测试您的数据库调用是否有效。

    最后,您可以构建一组为您生成半随机数据的库。我把这称为“模拟人生技术”,因为你创造了假家庭,折磨他们,然后把他们扔掉。例如,假设您有一个需要姓名、年龄、付款对象和 session 对象的用户对象。要测试用户,您可能需要具有不同姓名、年龄、支付能力和登录状态的用户。为了控制您需要为姓名、年龄、付款和 session 生成测试数据的所有内容。所以你写了一个函数来生成名字,一个函数来生成年龄。这些可以像从列表中随机选择一样简单。然后您编写一个使您成为 Payment 对象,一个使您成为 Session 对象。默认情况下,所有属性都是随机的,但有效...除非您另有指定。例如...

    # Generate a random login session, but guarantee that it's logged in.
    session = Session.sim( logged_in = true )
    

    然后你可以用它来组合一个有趣的用户。
    # A user who is logged in but has an invalid Visa card
    # Their name and age will be random but valid
    user = User.sim(
        session = Session.sim( logged_in = true ),
        payment = Payment.sim( invalid = true, type = "Visa" ),
    );
    

    这具有测试装置的所有优点,但由于某些数据是不可预测的,因此它具有真实数据的一些优点。将“有趣”的数据添加到您的默认 sim 和 rand 函数将产生广泛的影响。例如,将 Unicode 名称添加到 random_name很可能会发现各种有趣的错误!不幸的是,建立起来既昂贵又耗时。

    你有它。不幸的是,数据库问题没有简单的答案,但我恳请您不要简单地复制生产数据库,因为从长远来看,这是一个失败的命题。您可能会混合所有选择:复制、固定、模拟、半随机数据。

    关于mysql - Git环境设置。需要建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9014085/

    相关文章:

    git - 如何将 Stash 存储库下载为 .zip?

    git - 什么是 git 标签,如何创建标签以及如何 check out git 远程标签

    mysql - 仅在系统启动时出现 MAMP 1045 错误

    php - 我怎样才能同时防止相同的条目?

    php - 如何在 Laravel 中忽略数组 ID 来验证数组?

    php - 学说 :schema:update doesn't respect column order

    git - 是否可以将提交应用于 git 中的所有分支?

    php - Apache proxfy_fcgi - 将请求分派(dispatch)到时出错

    php - LAMP 应用程序堆栈的(轻量级)备份策略?

    php - 使用 PHP 和 MYSQL 进行过滤