【问题标题】:Error with Sequelize Serverless Offline MigrationsSequelize Serverless 离线迁移出错
【发布时间】:2020-11-18 07:29:34
【问题描述】:

使用此命令sls offline start --httpPort 12012 -s local 服务器在本地环境中成功启动。

但是这个命令结果是错误sls offline migrations --httpPort 12012 -s local

  Serverless Error ---------------------------------------
 
  "migrations" is not a valid sub command. Run "serverless offline" to see a more helpful error message for this command.
 
  Get Support --------------------------------------------
     Docs:          docs.serverless.com
     Bugs:          github.com/serverless/serverless/issues
     Issues:        forum.serverless.com
 
  Your Environment Information ---------------------------
     Operating System:          linux
     Node Version:              14.4.0
     Framework Version:         1.75.1
     Plugin Version:            3.6.16
     SDK Version:               2.3.1
     Components Version:        2.32.0

如果我运行serverless migrations up,则会发生错误。

Serverless: Setting up connections...
Serverless: Looking for pending migrations...
Executing (default): CREATE TABLE IF NOT EXISTS `SequelizeMeta` (`name` VARCHAR(255) NOT NULL UNIQUE , PRIMARY KEY (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci;
Executing (default): SHOW INDEX FROM `SequelizeMeta`
Executing (default): SELECT `name` FROM `SequelizeMeta` AS `SequelizeMeta` ORDER BY `SequelizeMeta`.`name` ASC;
Serverless: Applying pending migrations...
Executing (default): CREATE TABLE IF NOT EXISTS `SequelizeMeta` (`name` VARCHAR(255) NOT NULL UNIQUE , PRIMARY KEY (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci;
Executing (default): SHOW INDEX FROM `SequelizeMeta`
Executing (default): SELECT `name` FROM `SequelizeMeta` AS `SequelizeMeta` ORDER BY `SequelizeMeta`.`name` ASC;
Executing (default): CREATE TABLE IF NOT EXISTS `SequelizeMeta` (`name` VARCHAR(255) NOT NULL UNIQUE , PRIMARY KEY (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci;
Executing (default): SHOW INDEX FROM `SequelizeMeta`
Executing (default): SELECT `name` FROM `SequelizeMeta` AS `SequelizeMeta` ORDER BY `SequelizeMeta`.`name` ASC;
Serverless: Error while applying migrations
Serverless: Looking for migration that has problems...
Executing (default): CREATE TABLE IF NOT EXISTS `SequelizeMeta` (`name` VARCHAR(255) NOT NULL UNIQUE , PRIMARY KEY (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci;
Executing (default): SHOW INDEX FROM `SequelizeMeta`
Executing (default): SELECT `name` FROM `SequelizeMeta` AS `SequelizeMeta` ORDER BY `SequelizeMeta`.`name` ASC;
Serverless: Something wrong with 20200728165728-init.js

目前,数据库是通过使用 sequelize sync 更新的,这有时会锁定表。

import Sequelize from 'sequelize';
import mysql2 from 'mysql2';

const db = new Sequelize(
  process.env.DB_NAME,
  process.env.DB_USERNAME,
  process.env.DB_PASSWORD,
  {
    omitNull: true,
    dialect: process.env.DB_DIALECT,
    dialectModule: mysql2,
    dialectOptions: {
        supportBigNumbers: true
    },
    host: process.env.DB_HOST,
});

let synced = false;
const getSequelize = () => {
    if (!synced) {
        db.sync({ alter: true })
          .then(() => {
              console.log(`Database & tables synchronised!`)
          });

        synced = true;
    }

    return db;
}

export default getSequelize();

这些是包含在配置文件中的插件

plugins:
  - serverless-webpack
  - serverless-offline
  - serverless-pseudo-parameters
  - serverless-prune-plugin
  - serverless-sequelize-migrations

【问题讨论】:

  • migrationsoffline 是具有不同命令的不同插件,您看到的错误是正确的。你到底想做什么?如果您的迁移失败,您应该查看迁移代码和文档。

标签: amazon-web-services sequelize.js nodes database-migration serverless


【解决方案1】:

您似乎拼错了migrations

错误信息说:

"migratins" is not a valid sub command. Run "serverless offline" to see a more helpful error message for this command.

【讨论】:

  • 是的,你是对的。在这种情况下,它拼写错误。但是对于正确的命令,错误是相同的。我现在确实更新了问题。
【解决方案2】:

解决方法很简单,

serverless.yml 文件中导入插件时,在主插件之前导入所有插件非常重要。

在这种情况下,serverless-sequelize-migrations 是在 serverless-offline 之后导入的

所以可行的解决方案是:

plugins:
  - serverless-webpack
  - serverless-sequelize-migrations
  - serverless-offline
  - serverless-pseudo-parameters
  - serverless-prune-plugin

这个迁移是用下一个命令执行的

serverless migrations up
  

【讨论】:

    猜你喜欢
    • 2015-02-15
    • 2017-06-26
    • 2020-09-04
    • 1970-01-01
    • 2018-10-23
    • 2021-11-05
    • 1970-01-01
    • 2016-03-01
    • 2020-05-01
    相关资源
    最近更新 更多