无法连接数据库:执行heroku run rails db:migrate遇PG连接错误求助
Let's break down what's going on here and fix this step by step:
首先,你的database.yml配置有明显问题
Heroku托管的PostgreSQL实例不需要你手动指定database、username、password这些字段——Heroku会自动为你的应用设置一个DATABASE_URL环境变量,里面包含了所有连接远程Postgres所需的信息(主机、端口、用户名、密码、数据库名)。你当前的配置硬编码了本地风格的连接参数,这和Heroku的远程Postgres环境完全不匹配。
为什么会出现这个错误?
错误提示里提到找不到Unix域套接字/var/run/postgresql/.s.PGSQL.5432,核心原因是:Heroku的dyno(运行你应用的容器)里没有本地运行的PostgreSQL服务。你的应用按照当前配置尝试连接本地的Postgres,但实际上应该连接Heroku提供的远程Postgres实例,而不是本地socket。
修复步骤:
修改
database.yml的production配置
把production部分改成依赖DATABASE_URL的极简配置,替换你现在的内容:production: url: <%= ENV['DATABASE_URL'] %> pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> encoding: unicode timeout: 5000这样Rails会自动使用Heroku提供的完整连接字符串,不需要手动指定各个参数。
确认Heroku已经添加了PostgreSQL插件
如果你还没给应用添加Postgres服务,执行这个命令:heroku addons:create heroku-postgresql:hobby-dev(
hobby-dev是免费的入门套餐,根据你的需求可以更换其他套餐)验证环境变量存在
执行以下命令确认Heroku已经设置了DATABASE_URL:heroku config:get DATABASE_URL如果返回一个类似
postgres://username:password@host:port/database的字符串,说明配置正确。重新部署并执行迁移
提交你的配置修改,推送到Heroku,然后再运行迁移:git add config/database.yml git commit -m "Update production database config to use Heroku DATABASE_URL" git push heroku main heroku run rails db:migrate
这样应该就能解决连接错误,成功执行数据库迁移了。
内容的提问来源于stack exchange,提问作者user3574603

