gpt4 book ai didi

javascript - Knex 迁移导致 gulp 进程挂起

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:32:33 25 4
gpt4 key购买 nike

使用 Migrations APIknex.js在 gulp 任务中导致任务进程挂起而不退出。是什么原因造成的,我该如何解决?

gulp.task('migrate:latest', function () { 
return knex.migrate.latest({
migrations: {
tableName: 'migrations'
}
})
.then(function () {
return knex.migrate.currentVersion();
})
.then(function (version) {
console.log("Kicked database to version: " + version);
})
.catch(function (err) {
console.error(err);
});
});

最佳答案

看起来 Knex 保留了对打开的数据库连接的引用,它不会在迁移完成后自动销毁 - 这会导致进程挂起。要解决此问题,请在迁移解决后调用 knex.destroy。这将使 gulp 进程正常退出。

关于 knex 的连接池和显式销毁命令的文档是 here .

gulp 任务变成这样:

gulp.task('migrate:latest', function () {    
return knex.migrate.latest({
migrations: {
tableName: 'migrations'
}
})
.then(function () {
return knex.migrate.currentVersion();
})
.then(function (version) {
console.log("Kicked database to version: " + version);
knex.destroy();
})
.catch(function (err) {
console.error(err);
knex.destroy();
});
});

请注意,如果您在 gulpfile 中将 knex 配置为变量,那么即使该任务不使用您的 knex 实例,您的所有任务也会发生这种情况。解决方法是将 knex 配置定义为一个函数,然后在需要时调用它,如下所示:

var knex = function () {
return require('knex')({
client: 'postgresql',
connection: {
host: process.env.DB_HOSTNAME,
user: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE,
charset: 'utf8'
},
pool: {
min: 2,
max: 10
},
migrations: {
tableName: 'migrations'
}
});
};

gulp.task('migrate:latest', function () {
return knex().migrate.latest({ // Call the function to set up your config.
migrations: {
tableName: 'migrations'
}
})
...

这使您不必在不需要的任务中调用 knex.destroy。希望这可以帮助某人。

关于javascript - Knex 迁移导致 gulp 进程挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31479924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com