AWS ElasticBeanstalk EC2 出现 postgresql 连接错误

问题描述 投票:0回答:3

当我使用

eb deploy
在 aws beanstalk 上部署我的应用程序时,出现错误

rake aborted!
PG::ConnectionBad: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

.ebextensions/postgres.config:

packages:
yum:
 postgresql93-devel: []

配置/数据库.yml:

default: &default
adapter: postgresql
encoding: unicode
# For details on connection pooling, see rails configuration guide
# http://guides.rubyonrails.org/configuring.html#database-pooling
pool: 5

production:
<<: *default
database: <%= ENV['RDS_DB_NAME'] %>
username: <%= ENV['RDS_USERNAME'] %>
password: <%= ENV['RDS_PASSWORD'] %>
host: <%= ENV['RDS_HOSTNAME'] %>
port: <%= ENV['RDS_PORT'] %>
ruby-on-rails postgresql amazon-web-services amazon-ec2 amazon-rds
3个回答
4
投票

我也遇到了完全相同的问题。

问题是您必须通过环境变量将数据库连接到应用程序。

首先您需要创建一个要连接的 RDS 实例。此链接向您展示了如何操作:https://aws.amazon.com/getting-started/tutorials/create-connect-postgresql-db/?nc1=h_ls

然后,实例创建完成后,您需要进入RDS服务页面,在左侧菜单中选择实例。选择您在列表中创建的实例,然后进入“连接”部分。这些是您放入这些环境变量中的值,其中 HOSTNAME 值是端点。

希望它有帮助,对我有用!


2
投票

我遇到了类似的问题,但就我而言,RDS 连接超时。解决方案是将我的 EC2 实例的安全组添加到 RDS 安全组的“入站”部分。

为此,请转到 EC2 页面并搜索“安全组”,您可以在其中找到您的 RDS 和 EC2 安全组,单击 RDS 安全组并添加 EC2 安全组。


0
投票

我也遇到了

PG::ConnectionBad
错误,超时了。感谢@Mateus 指出该怎么做,但我会扩展他的答案以获得帮助。

诊断和测试

为了证明问题(并且您已经解决了它),只需向您的服务器发送简单的

eb ssh
,然后运行:

psql -h xxxxxxxxxxx.xxxxxxxxxxxxxx.ap-southeast-2.rds.amazonaws.com -d ebdb -U postgres

直接连接到RDS实例。它要么立即失败,要么需要很长时间然后超时。完成后,它会询问您的密码,然后就可以工作了!

解决问题

我必须将 EC2 实例的安全组添加到 RDS 安全组的入站部分。

要对 ElasticBeanstalk 执行此操作:

  • 转到 AWS 控制台中的 RDS,然后选择您的数据库实例
  • 向下滚动到“安全组规则”,然后单击“入站”安全组。 (EC2 安全组 - 入站)
  • 这将带您进入安全组列表,筛选到 RDS 组。我建议复制此选项卡,删除过滤器,然后找到您的new EB 环境组。其中有 2 个。找到与已经具有入站规则的安全组 ID 等效的组 ID。并复制该安全组 ID。
  • 返回选定安全组的第一个选项卡,单击“入站规则”选项卡 ->“编辑入站规则”
    • 类型:PostgreSQL(协议 TCP;端口范围 5432)
    • 来源:定制
    • 粘贴新 EB 的安全组 ID
    • 描述:
  • 保存。

然后重新运行上面的测试,应该可以了!

© www.soinside.com 2019 - 2024. All rights reserved.