【发布时间】:2017-09-04 09:09:30
【问题描述】:
我是 knex 迁移的新手,在过去的 2 天里,我一直在努力让它工作,但没有任何反应。我正在尝试使用 knex.migration 对象以编程方式运行我的迁移。
首先使用 cli,我在迁移目录中创建了一个迁移文件。以下是它的内容:
exports.up = function(knex, Promise) {
return Promise.all([
knex.schema.createTable('users', function (table) {
table.increments('id').primary();
table.string('username');
table.string('password');
table.string('email');
table.string('name');
table.timestamp('date');
}),
]);
};
exports.down = function(knex, Promise) {
};
然后从我的代码中初始化 Knex 对象:
var knex = Knex({
client:'sqlite3',
connection:{
filename: './knex.sqlite'
}
});
然后我执行迁移:
knex.migrate.latest().then(()=>{
// console.log()
}).catch(err =>{
//
});
但绝对没有任何反应。我的迁移文件永远不会执行,也没有错误或警告消息。所以我不知道从哪里开始寻找问题。当我查看我的 sqlite 数据库时,我可以看到表 knex_migrations、knex_migrations_lock 和 sqlite_sequence 已创建。
那么我在这里做错了什么?有什么我想念的吗? 感谢您的任何建议
【问题讨论】:
-
从数据库中删除 knex_migrations、knex_migrations_lock 表并重新运行。并且控制台在 catch 块上记录错误。
-
你的目录结构和knexfile怎么样?会不会是你的迁移放在了错误的文件夹中?
-
是的,我的迁移文件夹不在项目的根目录中,而是在子文件夹中。但我确保使用配置选项中的 migrations.direction 选项指向正确的文件夹。同样通过调试,我进入了源代码,我可以看到 Knex 找到了我的文件夹并列出了它的内容......但由于某些原因它没有运行迁移......
-
没有属性
migrations.direction。如果您在调试器中单步执行该代码,您应该能够看到为什么找不到迁移文件。无论如何,根据这个问题中给出的数据,没有办法为您提供更多帮助。尝试编写一个示例 knex 应用程序,当你开始工作时,找出你在真实应用程序上的不同之处。 -
但是有 migrations.directory 属性。改用它。