续集迁移未运行

Posted

技术标签:

【中文标题】续集迁移未运行【英文标题】:sequelize migrations not running 【发布时间】:2020-08-17 21:08:19 【问题描述】:

我在使用 Sequelize 时遇到了一个以前从未遇到过的奇怪问题,当我尝试运行我的迁移时,没有任何反应。我得到以下输出:

Loaded configuration file "config\config.json"
Using environment "development"

而程序只是存在回来。

我已经多次检查了我的代码,一切都检查好了。

型号代码:

module.exports = 
up: (queryInterface, Sequelize) => 
    return queryInterface.createTable("users", 
        id: 
            allowNull: false,
            autoIncrement: true,
            primaryKey: true,
            type: Sequelize.INTEGER
        ,
        username: 
            type: Sequelize.STRING,
            unique: true,
            allowNull: false,
            validate: 
                notEmpty: true
            
        ,
        email: 
            type: Sequelize.STRING,
            unique: true,
            allowNull: false,
            validate: 
                notEmpty: true,
                isEmail: true
            
        ,
        password: 
            type: Sequelize.STRING,
            allowNull: false,
            validate: 
                notEmpty: true,
                len: [7, 42]
            
        ,
        createdAt: 
            type: Sequelize.DATE
        ,
        updatedAt: 
            type: Sequelize.DATE
        
    )
,
down: (queryInterface, Sequelize) => 
    return queryInterface.dropTable("users")

这是我的模型/index.js 中的一个 sn-p:

const fs = require("fs")
const path = require("path")
const Sequelize = require("sequelize")

const basename = path.basename(__filename)
const env = process.env.TEST_ENV || "development"
const config = require(`$__dirname/../config/config.js`)[env]
const db = 

console.log('config', config)

let sequelize
if (config.use_env_variable) 
    sequelize = new Sequelize(process.env[config.use_env_variable], config)
 else 
    sequelize = new Sequelize(
        config.database,
        config.username,
        config.password,
        config
    )

这几乎就像 sequelize 只是没有获取任何迁移文件。我不确定我应该如何解决这个问题。对此的任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

所以问题出在节点版本上。

我可能应该提供更多的背景信息,但我换了笔记本电脑,在新笔记本电脑上安装了 14.1.0 版本,而在旧笔记本电脑上我安装了 10.13.0 版本!。所以切换版本就可以了。

【讨论】:

你有没有弄清楚为什么版本 14 不起作用(并且可能提出问题)? 不,没什么具体的,但我认为问题在于迁移最初是使用 Node 10.13.0 设置的,所以当我尝试使用 14 运行它们时,出现了某种兼容性问题。 这似乎是 Node 14 和 pg 库之间的兼容性问题。更新到 pg@8.0.3 解决了这个问题,无需降级 Node。 @bradley2w1dl 谢谢,有同样的问题,npm install --save pg@latest 为我修复了它。【参考方案2】:

尝试在终端中运行此命令 sequelize db:migrate:all

【讨论】:

该命令至少在我的 CLI 版本 5.5.1 中不存在 不存在于版本 5 sequelize db:migrate Run pending migrations【参考方案3】:

更新pg 解决了我的问题。

npm install --save pg@latest

【讨论】:

【参考方案4】:

在将节点版本从 12.16.2 更新到 14.15.4 后,我也遇到了这个问题,突然迁移停止工作,没有显示错误消息。要解决此问题,只需运行:

npm install pg@latest

根据 pg 的文档,要使用节点版本 >= 14.x,由于节点 14 分支上的一些内部流更改,您需要安装 pg@8.2.x 或更高版本。

更多阅读请看pg的官方文档here。

【讨论】:

以上是关于续集迁移未运行的主要内容,如果未能解决你的问题,请参考以下文章

在heroku中续集迁移

处理续集迁移和初始化的工作流程?

用 sqlite3 续集不会创建数据库

如何使用续集迁移/种子插入初始数据?

将迁移更改列续集为 FK,然后撤消失败

节点续集 (MSSQL) - 用户 '' 登录失败