javascript – Knex迁移导致gulp进程挂起
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – Knex迁移导致gulp进程挂起,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1630字,纯文字阅读大概需要3分钟。
内容图文
![javascript – Knex迁移导致gulp进程挂起](/upload/InfoBanner/zyjiaocheng/961/0bfd6d463ed941e6ada9b4036108f274.jpg)
在gulp任务中使用knex.js中的Migrations API会导致任务进程挂起而不会退出.是什么导致这种情况,我该如何解决?
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的连接池和显式destroy命令的文档是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();
});
});
请注意,如果将knex配置为gulpfile中的变量,即使该任务不使用您的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进程挂起全部内容,希望文章能够帮你解决javascript – Knex迁移导致gulp进程挂起所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。