【问题标题】:Cannot connect to Amazon PostgreSQL RDS via EC2无法通过 EC2 连接到 Amazon PostgreSQL RDS
【发布时间】:2018-05-12 17:22:44
【问题描述】:

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

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

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

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 存在,但该文件不存在。我尝试从根目录搜索该文件,结果发现它在任何地方都不存在。

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

这是我的config/database.ymlfile:

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 命令和指定服务器的选项连接到远程数据库。我通过执行一个简单的查询对其进行了测试,我确信连接已建立。不过,我现在不确定如何告诉服务器自动连接到它。

【问题讨论】:

  • 你是如何连接的。提供准确的命令。有根据的猜测:您没有指定要连接的主机。
  • @zerkms 编辑了我的帖子。 Elastic Beanstalk 在部署时连接到服务器
  • psql 命令在哪里?
  • @zerkms 没有psql 命令。所有数据库命令都通过 Rails 文件处理,在 debployment (eb deploy) 上,db:migratedb:seed 应自动执行。我在这里错过了一个命令吗?抱歉,我对所有事物的连接方式有点陌生。
  • 您尝试连接到本地套接字上的 postgres。更改配置以包含连接到 RDS 的字符串

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


【解决方案1】:

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

eb ssh

然后转到我的应用目录

var/app/current

正在运行

rails db:seed

它使用我在seeds.rb 中的值正确地为生产数据库播种

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 应用程序可以很好地连接到服务器。我已经通过 SSH 进入 EB 并检查了变量并设置了它们。问题似乎不在于 EB,而是让 EC2 实例为数据库提供种子(当我尝试运行 RAILS_ENV=production rails db:seed 时出现无法连接的错误)
    • 您是否在应用程序目录中,在同一台 EC2 服务器上?如果你运行env,你能看到列出的相同环境变量吗?
    • 当我直接从 EC2 实例运行 env 时,没有定义这些变量。但是当我通过eb ssh从EB实例运行env时,这些变量就被定义了。
    • 那么你能从eb ssh 运行RAILS_ENV=production rails db:seed 吗?
    • 我必须进入应用程序在 EB 中的托管位置,然后从那里运行它,结果成功了!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多