在我的 Node.js 应用程序中使用 Knex.js 删除迁移

新手上路,请多包涵

我想让 knex 在我的 node.js 应用程序中工作。我正在学习教程并在某个时候创建了一个表但无法重复该过程。我删除了表格并删除了所有迁移文件夹。此时我重新开始,但在创建新迁移然后运行 knex migrate:latest ,我收到一条错误消息,指出迁移目录已损坏,因为我的原始迁移丢失了。

我的印象是,如果文件丢失,它不应该知道它曾经存在过。

从我的项目中删除迁移的正确方法是什么?

knex文件.js

  development: {
    client: 'pg',
    connection: {
    host: '127.0.0.1',
    user:     'postgres',
    password: 'password',
    database: 'myDatabase'
    },
     pool: {
      min: 10,
      max: 20
    },
    migrations: {
      directory: __dirname + '/db/migrations'
    },
    seeds: {
      directory: __dirname + '/db/seeds/development'
    }

数据库.js

 var config      = require('../knexfile.js');
var env         = 'development';
var knex        = require('knex')(config[env]);

module.exports = knex;
console.log('Getting knex');
knex.migrate.latest([config]);
console.log('Applying migration...');

运行这个会出错,

 knex migrate:latest

Using environment: development
Error: The migration directory is corrupt, the following files are missing: 20161110130954_auth_level.js

但是这个迁移不存在,因为我删除了它。

原文由 wuno 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 783
2 个回答

在删除文件之前,您必须回滚迁移( knex migrate:rollback ),我想您可以做的是:

touch [full_path_to_migrations_here]/migrations/20161110130954_auth_level.js

knex migrate:rollback

rm [full_path_to_migrations_here]/migrations/20161110130954_auth_level.js

参考这里 https://github.com/tgriesser/knex/issues/1569

原文由 marman 发布,翻译遵循 CC BY-SA 3.0 许可协议

您的迁移文件已被删除,但它们仍在名为“迁移”的表中引用

(见下面的更新),由 knex 生成。

您应该能够通过连接到本地数据库来检查它。

我遇到了同样的问题,我通过删除与我已删除的迁移文件对应的记录来解决它。

 delete from migrations
where migrations."name" in ('20191027220145_your_migration_file.js', ...);

编辑: 迁移 表名称可能会根据 选项 或您使用的版本而改变。

常量 在这里 设置并在 那里 使用。

为确定名称,您可以按照@MohamedAllal 的建议 列出所有表格

希望能帮助到你

原文由 fservantdev 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题