You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails 6部署到AWS Elastic Beanstalk后无法连接RDS报PG::ConnectionBad错误

解决方案

  • 优先解决交互式shell环境变量加载问题
    你遇到的报错核心原因是:SSH登录EC2实例后的默认shell不会自动加载Elastic Beanstalk控制台配置的环境变量,同时默认Rails运行环境为development,读取到的数据库配置没有host参数,Rails会默认尝试连接本地PostgreSQL的Unix套接字,才会出现对应报错。而EB部署阶段会自动加载环境变量且指定生产环境,所以部署时的迁移任务可以正常运行,和你反馈的现象完全吻合。
    1. 登录EC2实例后,先切换到应用实际运行的webapp用户:
    sudo su - webapp
    
    1. 手动将EB配置的所有环境变量加载到当前shell:
    export $(sudo /opt/elasticbeanstalk/bin/get-config environment | xargs)
    
    1. 执行Rails相关命令时明确指定生产环境:
    RAILS_ENV=production bundle exec rails console
    RAILS_ENV=production bundle exec rails db:migrate
    
  • 排查配置有效性
    1. 进入Rails控制台后打印当前环境的数据库配置,确认参数正确:
    puts Rails.application.config.database_configuration[Rails.env]
    
    检查输出的host字段是否为你的RDS实例域名,而非空值或localhost。如果host为空,说明当前环境的database.yml配置没有正确读取到RDS_HOSTNAME变量,或DATABASE_URL配置错误覆盖了host参数。
    2. 如果配置了DATABASE_URL,确认该值的格式完全正确,用户名、密码、主机地址、端口、数据库名和RDS_*系列变量保持一致。Rails 6中DATABASE_URL的优先级高于database.yml的单独配置,错误的DATABASE_URL会直接导致连接失败。
  • 永久修复交互式shell的环境变量加载(可选)
    如果需要每次SSH登录后自动加载EB环境变量,可以在~/.bashrc或~/.bash_profile中添加如下内容:
    export $(sudo /opt/elasticbeanstalk/bin/get-config environment | xargs)
    export RAILS_ENV=production
    
    下次登录后即可直接执行Rails相关命令。

内容的提问来源于stack exchange,提问作者Imran Ahmad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:39:04