继承Heroku Postgres中的迁移:错误链

时间:2018-12-03 00:48:47

标签: node.js postgresql heroku sequelize.js heroku-postgres

我的express.js应用程序在heroku dyno上。我为Crud操作(连接到heroku-postgres db)创建了一些rest api端点,并检查它们是否与Postman一起使用。

尝试合并迁移后,我的问题开始了。我只是一个小。开发人员,所以请让我知道我是否正在调查无用的线索,以及提供哪些其他信息以正确诊断这些错误消息。

sequelize model:create --name tableName --attributes ...开始迁移很好。

运行sequelize db:migrate时,出现的错误是:

ERROR: Dialect needs to be explicitly supplied as of v4.0.0

我当前的config.json

{
  "production": {
    "use_env_variable": "DATABASE_URL",
    "dialect": "postgres",
    "dialectOptions": {
      "ssl": {
        "require": true
      }
    },
    "ssl": true
  }
}

并且我还在models/index.js中指定了方言(这是在config.json命令中与sequelize model:create...一起生成的)

require('dotenv').config();
const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = 'production' || process.env.NODE_ENV;
const config = require(__dirname + '/../config/config.json')[env];
const db = {};

const sequelize = new Sequelize(process.env.DATABASE_URL, {
  logging: false,
  dialect: "postgres",
  dialectOptions: {
    ssl: true,
  }
});
// let sequelize;
// if (config.use_env_variable) {
//   sequelize = new Sequelize(process.env[config.use_env_variable], config);
// } else {
//   sequelize = new Sequelize(config.database, config.username, config.password, config);
// }

如果将const sequelize = ...注释掉,而使用let sequelize; ...,则会出现相同的方言错误。

有趣的是,当我设置shell变量export NODE_ENV=production时,发生了一个新错误-ERROR: Error parsing url: undefined

这让我感到困惑,因为我认为它已经在const env = ...的{​​{1}}行中定义了。

因此,我尝试在迁移命令-index.js中指定url。

我提供的这个URL通过Postman以及通过前端收集表单数据进行了CRUD测试。

现在错误为sequelize db:migrate --url 'postgres://username:password@localhost/test1'。我不确定如何从这一点着手,也不确定由于方言错误而采取的措施是否是解决这些问题的正确方法。

我的问题确实是这些错误的原因。

1)我还需要在哪里指定方言?

2)即使在ERROR: connect ECONNREFUSED 127.0.0.1:5432中已指定环境,为什么在我export NODE_ENV时方言错误仍然消失?

3)同样,对于网址,为什么不接受由index.js带来的我的.env中的网址?

1 个答案:

答案 0 :(得分:0)

使用sequelize-cli生成迁移和模型文件非常好。我已将这些更改推送到heroku,但正在本地运行迁移命令。 (我没有本地开发数据库,​​我的唯一环境是生产环境。)

另一个问题是,运行heroku run bash时,heroku bash运行时只能描述为应用程序状态的快照。这意味着即使我可以很好地创建,编辑和推送,迁移命令仍会“卡在”旧版本上,直到bash重新启动为止。