sequelize的文档似乎已经过时,因为它们不再支持从sequelize本身运行迁移,而是依赖于sequelize-cli.是否有一个如何以编程方式使用sequeliz-cli来运行最新迁移的示例?所有文档似乎都专注于在shell中使用客户端.
db.js似乎有我可以包含的函数db:migrate.
https://github.com/sequelize/cli/blob/master/lib/tasks/db.js
小智 18
我遇到了完全相同的问题并实现了接受的答案。然而,我在将其作为单独的进程运行时遇到了并发问题,尤其是在测试期间。
我认为这个问题相当老了,但它在搜索结果中仍然出现得很靠前。今天,使用 umzug 运行它是一个更好的主意。这是sequelize 用于管理其最终迁移的库,并且由docs建议。
const fs = require('fs');
const Umzug = require('umzug');
const path = require('path');
const Sequelize = require('sequelize');
const { sequelize } = require('../models/index.js');
const umzug = new Umzug({
migrations: {
// indicates the folder containing the migration .js files
path: path.join(process.cwd(), './migrations'),
// inject sequelize's QueryInterface in the migrations
params: [
sequelize.getQueryInterface(),
Sequelize,
],
},
// indicates that the migration data should be store in the database
// itself through sequelize. The default configuration creates a table
// named `SequelizeMeta`.
storage: 'sequelize',
storageOptions: {
sequelize,
},
});
async function migrate() {
return umzug.up();
}
async function revert() {
return umzug.down({ to: 0 });
Run Code Online (Sandbox Code Playgroud)
这样,您就可以完成迁移所需的所有操作,而无需产生不同的进程,这会让您面临各种竞争条件和问题。阅读有关如何使用 umzug 和github上的文档的更多信息
bro*_*ofa 17
我深入研究了sequelize db:migrate命令的代码,那里有足够的东西,恕我直言,最简单/最好的方法是在子进程中运行命令。这是我用于此的代码(作为等待的承诺):
const {exec} = require('child_process');
await new Promise((resolve, reject) => {
const migrate = exec(
'sequelize db:migrate',
{env: process.env},
err => (err ? reject(err): resolve())
);
// Forward stdout+stderr to this process
migrate.stdout.pipe(process.stdout);
migrate.stderr.pipe(process.stderr);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2283 次 |
| 最近记录: |