【问题标题】:Can't connect to PostgreSQL with Rails and Capistrano无法使用 Rails 和 Capistrano 连接到 PostgreSQL
【发布时间】:2023-04-08 04:25:01
【问题描述】:

我正在尝试使用 Postgres 通过 Capistrano 将我的 Rails 5 应用程序部署到 VPS。不过,它一直在失败 - 给我一个PG::ConnectionBad: FATAL: password authentication failed for user 'sys_user'

我的database.yml的相关设置是:

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

所有这些环境变量都已在/etc/environment 中设置 - 肯定是这种情况,因为它将RDS_USERNAME 拾取为sys_user。数据库的密码与变量RDS_PASSWORD 相同。端口、主机名等也都一样。

我被难住了。请帮忙。

【问题讨论】:

  • 我没有解决办法。暂时使用dotenv gem(当然,.env.production 没有检查到版本控制中)。

标签: ruby-on-rails postgresql capistrano ruby-on-rails-5 capistrano3


【解决方案1】:

Postgres 实例在哪里运行?我猜您正在尝试将应用程序从 Elastic Beanstalk 迁移到非 Amazon 主机。如果是这种情况,并且您的 Postgres 实例不是实际上是 RDS,您可能需要在配置文件中启用密码身份验证。

关于 Postgres 配置的文档可以在here 找到;我怀疑您可能需要将ident 更改为md5

【讨论】:

  • 实际上,这是在同一个 VPS 上全新部署的 Postgres。我根本没用过亚马逊。对于RDS_HOST 变量,我尝试了localhost127.0.0.1 两者都可以在我的开发机器上工作,但不能在服务器上工作。
  • 该应用程序最初是为 AWS 开发的吗?如果不是,那么很奇怪选择了 RDS_ 前缀 - 这些是用于 Elastic Beanstalk 应用程序的确切环境变量名称。无论如何,我仍然怀疑问题出在 Postgres 实例的配置上;如果它未配置为接受密码身份验证,那么您会收到该错误消息。
  • 不是——不过,RDS_* 前缀是出于对亚马逊的熟悉而选择的。请参阅我对我正在使用的临时修复问题的评论。
猜你喜欢
  • 2015-02-24
  • 1970-01-01
  • 2016-07-13
  • 1970-01-01
  • 2013-04-19
  • 2012-11-01
  • 2019-11-02
  • 2012-07-06
  • 2012-06-10
相关资源
最近更新 更多