相关疑难解决方法(0)

Sequelize.js:如何使用迁移和同步

我已准备好启动我的项目了.我有很大的计划在发布后,数据库结构将发生变化 - 现有表中的新列以及新表,以及与现有模型和新模型的新关联.

我还没有触及Sequelize中的迁移,因为我只有测试数据,我不介意每次数据库更改时擦除.

为此,目前我正在运行sync force: true应用程序启动时,如果我更改了模型定义.这会删除所有表并从头开始创建它们.我可以省略force让它只创建新表的选项.但如果现有的已经改变,这没有用.

所以,一旦我添加了迁移,事情是如何运作的?显然,我不希望现有的表(包含其中的数据)被消灭,因此sync force: true是不可能的.在我帮助开发的其他应用程序(Laravel和其他框架)作为应用程序部署过程的一部分,我们运行migrate命令来运行任何挂起的迁移.但是在这些应用程序中,第一次迁移有一个骨架数据库,数据库处于开发初期的状态 - 第一个alpha版本或其他任何版本.因此,通过按顺序运行所有迁移,即使是派对迟到的应用程序实例也可以一次性加快速度.

如何在Sequelize中生成这样的"第一次迁移"?如果我没有,那么应用程序的某个新实例将在没有框架数据库的情况下运行迁移,或者它将在开始时运行同步并将使数据库处于新状态新表等,但是当它尝试运行迁移时,它们将没有意义,因为它们是用原始数据库编写的,并且每次连续迭代都在考虑之中.

我的思考过程:在每个阶段,初始数据库加上每个顺序的迁移应该等于(加或减数据)sync force: true运行时生成的数据库.这是因为代码中的模型描述描述了数据库结构.因此,如果没有迁移表,我们只需运行同步并将所有迁移标记为已完成,即使它们未运行.这是我需要做的(怎么样?),或者Sequelize本身应该这样做,还是我咆哮着错误的树?如果我在正确的区域,肯定应该有一个很好的方法来自动生成大部分迁移,给定旧模型(通过提交哈希?甚至每次迁移都可以绑定到提交?我承认我在想在一个非便携式的以git为中心的宇宙中)和新模型.它可以区分结构并生成将数据库从旧变换到新变换所需的命令,然后开发人员可以进入并进行任何必要的调整(删除/转换特定数据等).

当我使用--init命令运行sequelize二进制文件时,它会给我一个空的迁移目录.当我运行sequelize --migrate它时,它使我成为SequelizeMeta表,其中没有任何内容,没有其他表.显然不是,因为二进制文件不知道如何引导我的应用程序并加载模型.

我肯定错过了什么.

TLDR:如何设置我的应用程序及其迁移,以便更新实时应用程序的各种实例,以及没有旧版启动数据库的全新应用程序?

database database-migration node.js sequelize.js

125
推荐指数
4
解决办法
6万
查看次数