使用 sequelize ORM 连接到 node.js 上的 Amazon RDS Postgres 数据库的问题
Posted
技术标签:
【中文标题】使用 sequelize ORM 连接到 node.js 上的 Amazon RDS Postgres 数据库的问题【英文标题】:Issues connecting to Amazon RDS Postgres database on node.js using sequelize ORM 【发布时间】:2016-06-04 20:51:39 【问题描述】:我目前正在将 Heroku 中设置的环境迁移到 Amazon Web Services 堆栈(RDS PostgreSQL、Elastic Beanstalk)。
我在尝试通过 sequelize.js ORM 连接到 PostgreSQL 时遇到了一些问题。错误信息如下:
未处理的拒绝 SequelizeHostNotFoundError: getaddrinfo ENOTFOUND [主持人]。
我可以通过 pgAdmin 连接到数据库,所以我知道该服务正在运行,并且以下配置已在 Heroku 上运行:
sequelize = new Sequelize(process.env.DATABASE_URI,
dialect: 'postgres',
protocol: 'postgres',
logging: true,
timestamps: false
)
DATABASE_URI 的格式如下:
postgres://[db_username]:[db_password]@[hostname]:[port]/[db_name]
任何帮助将不胜感激。提前致谢!
【问题讨论】:
【参考方案1】:我能够在这里解决我的问题。本质上,我通过在环境中正确设置以下内容来解决它。:
-
正确格式化 URI -(按照上面的语法,我能够让它工作)
为 Amazon RDS 和 Elastic Beanstalk 启用安全规定 - 我必须为运行 Elastic Beanstalk 的安全组/实例角色启用对 Amazon RDS 实例的入站访问。 (我发现我能够通过我的本地计算机访问 RDS。默认情况下,似乎 RDS 设置了您正在使用的 IP 以便能够使用它......这是有道理的..)
【讨论】:
我仍在与此作斗争。获取连接超时错误。您能否详细说明您的解决方案? 嗨 Nuru,您是否能够通过 curl 或 pgAdmin 之类的工具在本地连接到您的数据库?如果是这样,之后您需要确保检查 RDS 和 Elastic Beanstalk 实例之间的安全组,并确保“入站”设置配置正确。【参考方案2】:我遇到了一个非常相似的问题,结果发现我的密码中有一个问号——导致一半的密码和连接 URL 的其余部分被忽略(显然是 URL 搜索部分的一部分)。
类似:
new Sequelize("postgres://fred:xj78?23@example.com/db");
我们最终的用户名:fred,密码:xj78,其他所有内容均为空白。
将问号转义为 %3F 可以解决问题。
【讨论】:
遇到了同样的问题。更改密码解决了这个问题。以上是关于使用 sequelize ORM 连接到 node.js 上的 Amazon RDS Postgres 数据库的问题的主要内容,如果未能解决你的问题,请参考以下文章
使用 Sequelize 从 ec2 连接到 postgres RDS
启动新的 Sequelize 后端并且无法连接到 SQLite DB