在 Heroku Postgres 中继续迁移:错误链
Sequelize migration in Heroku Postgres: Chain of errors
我的 express.js 应用程序在 heroku dyno 上。我为 crud 操作创建了一些 rest api 端点(连接到 heroku-postgres db)并检查它们是否与 Postman 一起工作。
我的问题是在我尝试合并迁移后开始出现的。我只是一个jr。 dev 所以请让我知道我是否正在调查死线索,以及提供哪些其他信息来正确诊断这些错误消息。
使用 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
中指定了方言(这是在 sequelize model:create...
命令中与 config.json
一起生成的)
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
.
这让我更加困惑,因为我认为它已经在 index.js
的 const env = ...
行中定义了。
然后我尝试在迁移命令中指定 url - sequelize db:migrate --url 'postgres://username:password@localhost/test1'
.
我提供的这个 url 通过 Postman 以及通过前端收集表单数据用于 CRUD 测试。
现在错误是 ERROR: connect ECONNREFUSED 127.0.0.1:5432
。我不确定如何从这一点开始,也不确定自方言错误以来我采取的步骤是否是解决这些问题的正确方法。
我的问题确实是造成这些错误的原因。
1) 我还需要在哪里指定方言?
2) 为什么当我 export NODE_ENV
时方言错误消失了,即使环境已经在 index.js
中指定?
3) 同样对于 url,为什么我的 .env
中的 url 与 require('dotenv').config()
一起被接受?
使用 sequelize-cli 生成迁移和模型文件一切都很好。我已将这些更改推送到 heroku,但 运行 在本地执行迁移命令。 (我没有本地开发数据库,我唯一的环境是生产环境)。
另一个问题是,当 heroku run bash
为 运行 时,我只能将 heroku bash 运行 描述为应用程序状态的快照。这意味着即使我创建、编辑和推送都很好,迁移命令在旧版本上将是 'stuck',直到 bash 重新启动。
我的 express.js 应用程序在 heroku dyno 上。我为 crud 操作创建了一些 rest api 端点(连接到 heroku-postgres db)并检查它们是否与 Postman 一起工作。
我的问题是在我尝试合并迁移后开始出现的。我只是一个jr。 dev 所以请让我知道我是否正在调查死线索,以及提供哪些其他信息来正确诊断这些错误消息。
使用 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
中指定了方言(这是在 sequelize model:create...
命令中与 config.json
一起生成的)
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
.
这让我更加困惑,因为我认为它已经在 index.js
的 const env = ...
行中定义了。
然后我尝试在迁移命令中指定 url - sequelize db:migrate --url 'postgres://username:password@localhost/test1'
.
我提供的这个 url 通过 Postman 以及通过前端收集表单数据用于 CRUD 测试。
现在错误是 ERROR: connect ECONNREFUSED 127.0.0.1:5432
。我不确定如何从这一点开始,也不确定自方言错误以来我采取的步骤是否是解决这些问题的正确方法。
我的问题确实是造成这些错误的原因。
1) 我还需要在哪里指定方言?
2) 为什么当我 export NODE_ENV
时方言错误消失了,即使环境已经在 index.js
中指定?
3) 同样对于 url,为什么我的 .env
中的 url 与 require('dotenv').config()
一起被接受?
使用 sequelize-cli 生成迁移和模型文件一切都很好。我已将这些更改推送到 heroku,但 运行 在本地执行迁移命令。 (我没有本地开发数据库,我唯一的环境是生产环境)。
另一个问题是,当 heroku run bash
为 运行 时,我只能将 heroku bash 运行 描述为应用程序状态的快照。这意味着即使我创建、编辑和推送都很好,迁移命令在旧版本上将是 'stuck',直到 bash 重新启动。