Sequelize 无服务器离线迁移错误
Error with Sequelize Serverless Offline Migrations
使用此命令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
你好像拼错了 migrations
?
错误消息说:
"migratins" is not a valid sub command. Run "serverless offline" to see a more helpful error message for this command.
解决方法很简单,
在 serverless.yml
文件中导入插件时,在主插件之前导入所有插件非常重要。
在这种情况下,serverless-sequelize-migrations
是在 serverless-offline
之后导入的
所以可行的解决方案是:
plugins:
- serverless-webpack
- serverless-sequelize-migrations
- serverless-offline
- serverless-pseudo-parameters
- serverless-prune-plugin
并且此迁移使用下一个命令执行
serverless migrations up
使用此命令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
你好像拼错了 migrations
?
错误消息说:
"migratins" is not a valid sub command. Run "serverless offline" to see a more helpful error message for this command.
解决方法很简单,
在 serverless.yml
文件中导入插件时,在主插件之前导入所有插件非常重要。
在这种情况下,serverless-sequelize-migrations
是在 serverless-offline
所以可行的解决方案是:
plugins:
- serverless-webpack
- serverless-sequelize-migrations
- serverless-offline
- serverless-pseudo-parameters
- serverless-prune-plugin
并且此迁移使用下一个命令执行
serverless migrations up