V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Licsber
V2EX  ?  Django

大家怎么处理开发时 Migration 一大堆,修修改改啰啰嗦嗦,同步到生产之前还得检查合并下这个问题的?

  •  
  •   Licsber ·
    licsber · 98 天前 · 1768 次点击
    这是一个创建于 98 天前的主题,其中的信息可能已经有所发展或是发生改变。

    腾讯云最新优惠活动来了:云产品限时1折,云服务器低至88元/年 ,点击这里立即抢购:9i0i.cn/qcloud,更有2860元代金券免费领取,付款直接抵现金用,点击这里立即领取:9i0i.cn/qcloudquan

    (福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

    开发的时候总会修修改改

    然后就看到 migrate 文件一直叠加生成

    问题是开发的时候 DB 结构可能被我改来改去 过一会甚至还会有回退的 migrate 文件(

    然后强迫症就很不爽 我会在确认修改后把本地数据库整个清掉 然后 git reset 掉所有开发期间的 migrate 文件

    再重新生成一遍 migrate 再同步到生产库去

    这是正常开发流程吗 怎么感觉一点都不优雅

    17 条回复  ?  2024-02-03 11:07:16 +08:00
    Vegetable
        1
    Vegetable  
       98 天前   ?? 1
    是正常流程,不优雅的是你将数据库改来改去,而你也在最后通过自己的手段压缩了变更,别人看起来就挺优雅的了。
    不过这个流程挺容易出事故的,轻则发布失败,重则数据丢失,多人合作很难要求别人整理 migrations 。
    stimw
        2
    stimw  
       98 天前   ?? 1
    有些语言框架你还得手动写 migration 呢。。比如写 go 的时候用 sqlc
    Jat001
        3
    Jat001  
       98 天前 via iPhone   ?? 1
    db 修改我都是手写 sql ,原来还有自动的……
    Licsber
        4
    Licsber  
    OP
       98 天前
    @Vegetable #1 啊啊啊啊啊 主要是很难受
    就开发的时候 自己改着改着 就看到 0004 、0005 、0006 、0007
    其中 0006 可能是撤销 0004 的 然后本地如果提交上去我就会看着很不爽
    所以手动删掉从本地的 0004-0007 再重新生成一遍 0004 往生产去交

    我还以为有更好的方案 可以自动帮我完成 git 和 migrate 的合体(
    songray
        5
    songray  
       98 天前   ?? 1
    不用 Django, 但是用 Rails.
    许多公司的 devops 流程是表结构在「开发设计评审」阶段就确认, 后续修改都要和 code review 的同事对齐. 即便是开发阶段也是不能随便修改.
    自己的项目那就随便拉, 只要能跑起来就无所谓.
    只有带着镣铐跳舞才能优雅, 这就是为啥公司会有一堆条条框框, 你把镣铐解除了那自然优雅不了辣...
    说起来, njit 前辈?
    Licsber
        6
    Licsber  
    OP
       98 天前
    @songray #5 哈哈 自己的小项目 都是没有这些条条框框
    直接表结构觉得设计的不对就上手改
    是滴 学弟嘛?可以加我
    songray
        7
    songray  
       98 天前
    @Licsber 请看邮箱
    yph007595
        8
    yph007595  
       98 天前   ?? 1
    多人开发 django 项目,migrations 文件夹不提交 git ,每次合并到 master 的时候,重新生成 migrations 文件
    HashV2
        9
    HashV2  
       98 天前   ?? 1
    @Licsber #4 我就是这样处理的,但是我是按照需求来进行的,比如一个需求产生了 0004 0005 0006 我就三合一再提交,要注意的几个点,一得默认值什么的检查仔细点,二是记得同步 django_migrations 那张表
    abersheeran
        10
    abersheeran  
       98 天前   ?? 1
    奇怪的强迫症。模型字段不仔细思考就改,是你这个问题的根源。
    phithon
        11
    phithon  
       98 天前   ?? 1
    上线前我也会这样,上线后就只正经用 migration 来改数据库了。
    sampeng
        12
    sampeng  
       98 天前   ?? 1
    这也是我一开始碰到的疑问。。后来一看,就 3-4 个人。。我脑子有包有个变更就+1 版本。直接 new 一个版本,在这个版本上改对为止。一次迭代有且只有一个版本
    lyxxxh2
        13
    lyxxxh2  
       98 天前   ?? 1
    开发时 不用那么每次改数据库都要搞一个版本 怎么方便怎么来

    确保提交时的 migration 没问题就行
    Licsber
        14
    Licsber  
    OP
       98 天前
    @songray #7 哈哈 学校邮箱吗 好像最近总是出问题 我只能收到大概好几天前的邮件
    而且今年过后应该就被回收了 可以发 YWRtaW4jbGljc2Jlci5zaXRl

    @yph007595 #8
    @HashV2 #9
    @sampeng #12
    @lyxxxh2 #13 是滴 看来大家都是这样 基本上一个提交就是一个小需求 然后合并开发期间的所有 migrate

    @abersheeran #10 自己的小玩具项目 都是想哪改哪 又时候还会返工

    @phithon #11 上线后那必须固定下来 migrate 文件了 不然那就是真乱套了 线形历史还是要遵循的
    songray
        15
    songray  
       97 天前
    @Licsber 其实是你的 gmail
    qsnow6
        16
    qsnow6  
       94 天前   ?? 1
    测试环境开发完了,把生成的 migrate 文件全删了重新生成,这样只会有一个 migrate 文件,这个不是基操了吗?
    Licsber
        17
    Licsber  
    OP
       93 天前
    @qsnow6 #15 觉得很麻烦 觉得会有一种更优雅的方案 没想到大家都是这样哈哈哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3129 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 14:18 · PVG 22:18 · LAX 07:18 · JFK 10:18
    Developed with CodeLauncher
    ? Do have faith in what you're doing.


    http://www.vxiaotou.com