node.js - Sequelize 不从 .env 文件中获取主机名,默认为机器的 IP 地址
问题描述
我的 sequelize config.js 如下所示。
const dotenv = require('dotenv');
dotenv.config();
module.exports = {
development: {
username: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE,
host: process.env.DB_HOST,
dialect: 'mysql'
},
test: {
username: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE,
host: process.env.DB_HOST,
dialect: 'mysql'
},
production: {
username: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE,
host: process.env.DB_HOST,
dialect: 'mysql'
}
}
我正在定义 .env 文件如下:
DB_USERNAME=mysqldev
DB_PASSWORD=password
DB_DATABASE=mydatabase
DB_HOST=hostname.on.aws.com
当我在本地机器上运行 sequelize-cli db:migrate 命令时,它可以工作(我将 DB_HOST 设置为 127.0.0.1)。但是当我在 AWS 上的开发服务器上运行时,我收到以下错误。
CREATE command denied to user 'mysqldev'@'<aws ip address>' for table 'SequelizeMeta'
如果我将主机名直接保存在配置文件中而不是使用环境变量事件,那么我会得到同样的错误。
development: {
username: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE,
host: hostname.on.aws.com, // <-- this does not work, I get the same error.
dialect: 'mysql'
},
因此,它似乎总是在本地服务器中查找数据库,而我的数据库在 AWS 上。注意:只有 Sequelize 迁移命令不起作用。我的应用程序能够连接到 AWS 上的数据库。
此配置可能有什么问题?我错过了什么吗?
我正在使用 sequelize 5.19 版和 sequelize-cli 5.5.1 版。
解决方案
尝试通过连接到数据库(在 AWS 上)来检查用户(mysqldev)及其权限。
可能是权限问题。据我说,它能够连接到数据库,但没有权限。
推荐阅读
- java - .next() 在 Java 的 ResultSet 中不起作用
- sqlite - 如何在 Julia 中以只读方式打开 SQLite 数据库?
- java - 如何使用 Oracle 10g 在 Spring JPA 存储库中获取分页结果
- javascript - 有没有办法直接在html中检查打开的文件大小而不上传?
- javascript - 检查段落是否以字符开头,如果是则在其上应用 HTML 样式
- r - 提取产品名称、数量和单价,并将它们放入包含每个订单中的项目的数据框中
- ios - 在外部函数swift中使用表行中的indexPath
- sql - 使用正则表达式从下划线分隔的字符串中提取所有元素
- node.js - 在 Node.js 中使用 Let's Encrypt 证书最安全的方法是什么?
- r - 是否有一个 R 函数可以将数据框中的两列包含向量相乘?