当我不迁移时,使用Sequelize连接到我的DigitalOcean数据库可以很好地工作。例如,尝试创建一个新表的效果很好;下面的代码成功地连接并创建了一个新表。
sequelize = new Sequelize(config.use_env_variable, config);
sequelize.authenticate().then(console.log('success')).catch((error) => console.log(error));
sequelize.define('test-table', {
test_id: {
type: Sequelize.INTEGER,
},
});
sequelize.sync();
我有一个从DigitalOcean下载的CA证书.crt
文件,我正在通过Sequelize选项传递该文件。我的config.js
看起来像
development: {
use_env_variable: 'postgresql://[digitalocean_host_url]?sslmode=require',
ssl: true,
dialectOptions: {
ssl: {
require: true,
rejectUnauthorized: false,
ca: fs.readFileSync(`${__dirname}/../.postgresql/root.crt`),
},
},
},
但是,当我尝试使用迁移创建表时
npx sequelize-cli db:migrate
我收到以下输出和错误:
Parsed url postgresql://[digitalocean_host_url]?sslmode=require
ERROR: no pg_hba.conf entry for host [host], user [user], database [database], SSL off
这很奇怪,因为当我只使用Sequelize sync创建表时,SSL正在工作。我有一个用于sequelize-cli配置的.sequelizerc
文件,它看起来像这样:
const path = require('path');
const env = process.env.NODE_ENV || 'development'
const config = require('./config/config')[env];
module.exports = {
'config': path.resolve('config', 'config.js'),
'url': config.use_env_variable,
'options-path': path.resolve('config', 'sql-options.json')
}
在我的sql-options.json
中,我有以下
{
"use_env_variable": "postgresql://[digitalocean_host_url]?sslmode=require",
"dialect":"postgres",
"ssl": true,
"dialectOptions": {
"ssl": {
"required": true,
"rejectUnauthorized": true,
"ca": "/../.postgresql/root.crt"
}
}
}
我已经尝试了来自各种资源的许多建议,包括sequelize/cli repo。但这些似乎都不起作用。任何建议都会有帮助。
我也遇到了同样的问题,修复方法是在迁移配置文件中添加下面的代码,尽管数据库连接文件中已经有了它。以下代码位于config/config.js文件中,用于迁移。
production: {
username: ****,
password: ****,
database: ****,
host: ****,
dialect: ****,
port: ****,
dialectOptions: {
ssl: {
require: true,
rejectUnauthorized: false,
},
},
},
这就是我的数据库连接正常工作的样子。
const sequelize = new Sequelize({
host: ****,
database: ****,
username: ****,
password: ****,
dialect: ****,
port: ****,
dialectOptions: {
ssl: {
require: true,
rejectUnauthorized: false,
},
},
});