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

在AWS Elastic Beanstalk部署RoR应用时遭遇数据库迁移错误

解决AWS Elastic Beanstalk部署RoR应用时PostgreSQL连接失败的问题

我之前在Elastic Beanstalk上部署Ruby on Rails应用时,也碰到过几乎一模一样的问题,核心就是Rails应用没法连接到PostgreSQL数据库,导致db:migrate任务执行失败。给你几个亲测有效的排查和解决方向:

1. 先检查PostgreSQL服务是否正常运行

登录到报错里的那个EC2实例(i-0c1d25d2a182d8424),先确认Postgres服务的状态:

sudo systemctl status postgresql

如果显示服务未启动,手动启动它:

sudo systemctl start postgresql

为了避免后续实例重启后服务又掉,顺便设置开机自启:

sudo systemctl enable postgresql

2. 验证PostgreSQL套接字路径的权限与存在性

错误提示里提到的Unix套接字路径/var/run/postgresql/.s.PGSQL.5432经常会因为权限或路径不存在导致连接失败:

  • 先查看路径是否存在:
ls -la /var/run/postgresql/
  • 如果路径不存在,手动创建并设置正确的权限:
sudo mkdir -p /var/run/postgresql/
sudo chown postgres:postgres /var/run/postgresql/
sudo chmod 775 /var/run/postgresql/

做完后重启Postgres服务:

sudo systemctl restart postgresql

3. 检查Rails数据库配置是否匹配EB环境

Elastic Beanstalk的PostgreSQL环境(不管是内置的还是关联RDS的),都会通过环境变量注入数据库连接信息,你的config/database.yml配置应该用环境变量而非硬编码:

production:
  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'] %>

注意不要在生产环境配置里写本地的Unix套接字路径,EB上的Postgres默认走TCP连接。

4. 确认关联的RDS实例状态(如果用了RDS)

如果你的EB环境关联了RDS托管的Postgres,去AWS控制台检查:

  • RDS实例是否处于可用状态,没有停摆或维护中;
  • RDS的安全组是否允许EB环境的EC2实例访问5432端口。

5. 重新触发部署并查看完整错误栈

如果上面的步骤都排查没问题,重新部署应用试试:

  • 可以在EB控制台点击「部署」->「上传并部署」,重新上传应用包;
  • 或者用EB CLI命令:
eb deploy

如果还是失败,加上--trace参数运行迁移命令,获取完整的调用栈来定位更细节的问题:

bundle exec rake db:migrate --trace

内容的提问来源于stack exchange,提问作者Giulio Colleluori

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:19:15