【问题标题】:Knex migrations with Postgres always say 'Already up to date'Postgres 的 Knex 迁移总是说“已经是最新的”
【发布时间】:2017-07-03 08:59:13
【问题描述】:

我正在尝试使用 Knex 迁移更改我的 Postgres 数据库,但它们不起作用。

我的 knexfile.js 看起来像这样:

module.exports = {
  development: {
    client: 'pg',
    connection: {
      database: 'cms_dev',
    },
  },
};

然后我有一个看起来像这样的db.js

const config = require('../knexfile.js');

const env = 'development';
const knex = require('knex')(config[env]);

module.exports = knex;

knex.migrate.latest([config]);

如果我从一个新的数据库开始,我的第一次迁移工作,但如果我尝试使用新的(第二次)迁移更新数据库,它什么也不做。

当我尝试运行 knex migrate:latest --env development 时,它会说:

Using environment: development
Already up to date

*****编辑*****

我最终生成了另一个新的(第 3 次)迁移,并粘贴了与之前被忽略的完全相同的代码,并且它有效。不知道为什么第二次迁移失败了,而第三次成功了。

【问题讨论】:

  • 刷表knex_migrationsknex_migrations_lock
  • 第一次运行knex migrate:latest 后,您是否尝试为每个新数据库创建一个额外的迁移?还是您只是创建一个新数据库并运行knex migrate:latest,然后尝试再次运行它并认为它失败了?

标签: postgresql knex.js


【解决方案1】:

我发现了这个问题。我忘记配置 nodemon 以忽略我的迁移文件夹。

因为我在db.js中有这条线:

knex.migrate.latest([config]);

如果我在创建迁移时完全保存,我的服务器将重新启动并导致最新且不完整的迁移启动。由于迁移只运行一次,Knex 会认为数据库已经是最新的。

【讨论】:

    【解决方案2】:

    如果您只是想从头开始重新运行任何迁移,请删除您选择的架构/数据库中的迁移表。

    【讨论】:

      猜你喜欢
      • 2020-10-30
      • 2018-11-27
      • 2017-10-08
      • 2012-04-25
      • 1970-01-01
      • 2014-11-11
      • 2018-06-27
      • 2015-05-07
      • 2018-04-04
      相关资源
      最近更新 更多