无法通过EC2连接到Amazon PostgreSQL RDS

时间:2017-11-29 04:59:22

标签: postgresql amazon-web-services amazon-ec2 amazon-rds amazon-ebs

我目前在Amazon RDS上设置了PostgreSQL数据库。数据库连接到运行Rails应用程序的Elastic Beanstalk服务器,并且Rails应用程序正常工作(在生产站点上,我可以很好地修改数据库。我也可以通过SQL工作台查看数据库就好了,并且我可以看到我在生产站点上所做的更改反映在数据库中。

所以我知道数据库工作正常,我的弹性beanstalk服务器连接到它很好,我的Rails应用程序连接到它也很好。

但是,当我尝试通过我的EC2实例连接到数据库时(注意:此实例位于与我的EB和RDS实例(N. Virginia)不同的区域(俄亥俄州),我收到此错误:

psql: 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"?

目录/var/run/postgresql存在,但该文件不存在。我尝试从root搜索该文件,结果证明它在任何地方都不存在。

这是一个问题,因为我需要能够远程播种数据库,并且尝试从控制台运行rake db:seed会产生此错误。当我在生产中运行rails控制台时,也会出现错误,并尝试查看属于数据库的任何内容。

这是我的config/database.yml文件:

default: &default
  adapter: sqlite3
  pool: 5
  timeout: 5000

development:
  <<: *default
  database: db/development.sqlite3

test:
  <<: *default
  database: db/test.sqlite3

production:
    <<: *default
    adapter: postgresql
    encoding: unicode
    database: <%= ENV['RDS_DB_NAME'] %>
    username: <%= ENV['RDS_USERNAME'] %>
    password: <%= ENV['RDS_PASSWORD'] %>
    host: <%= ENV['RDS_HOSTNAME'] %>
    port: <%= ENV['RDS_PORT'] %>

这是EB在部署时知道连接到PG数据库的方式。

我曾尝试编辑RDS的安全规则,以接受来自EC2的公共IP的PostgreSQL连接,但这似乎不起作用。

任何人都可以帮我吗?

编辑:

好的,我可以使用psql命令连接到远程数据库,其中选项指定服务器就好了。我通过执行一个简单的查询来测试它,我肯定建立了连接。我现在不确定如何告诉服务器自动连接它。

2 个答案:

答案 0 :(得分:1)

您的应用程序似乎正在尝试连接到localhost上的PostgreSQL;看起来你的config/database.yml文件是正确的,因为它正在寻找环境变量RDS_HOSTNAME - 所以我最好的猜测是你没有设置它并且它默认为你的localhost,因为它是空的

您需要设置此环境变量以及其中所述的其他项目(数据库,用户,通行证和端口),以使其正常工作。

This StackOverflow answer解释了如何为Elastic Beanstalk设置环境变量。

答案 1 :(得分:0)

我通过

访问我的EB实例解决了这个问题

eb ssh

然后转到位于

的app目录

var/app/current

并正在运行

rails db:seed

使用seeds.rb

中的值正确地为生产数据库播种