Rails 8部署Heroku遇ActiveRecord连接错误:误用本地PostgreSQL套接字
解决Heroku上Rails 8数据库连接失败问题
核心问题
你的database.yml生产环境配置未使用Heroku自动提供的DATABASE_URL环境变量,而是手动硬编码了数据库名、用户名等参数,导致Rails尝试连接本地PostgreSQL套接字,而非Heroku的Postgres实例。
修复步骤
1. 修改database.yml生产环境配置
Heroku会为Postgres插件自动生成DATABASE_URL环境变量,Rails可直接解析该变量完成数据库连接配置。修改生产环境配置如下:
default: &default adapter: postgresql encoding: unicode pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> development: <<: *default database: brikex2_development test: <<: *default database: brikex2_test production: primary: <<: *default url: <%= ENV["DATABASE_URL"] %> cache: <<: *default url: <%= ENV["DATABASE_URL"] %> database: brikex2_production_cache migrations_paths: db/cache_migrate queue: <<: *default url: <%= ENV["DATABASE_URL"] %> database: brikex2_production_queue migrations_paths: db/queue_migrate cable: <<: *default url: <%= ENV["DATABASE_URL"] %> database: brikex2_production_cable migrations_paths: db/cable_migrate
若无需多数据库实例(Heroku默认提供单个数据库),可简化为:
production: <<: *default url: <%= ENV["DATABASE_URL"] %>
2. 验证Heroku环境变量
执行命令确认DATABASE_URL已正确生成:
heroku config:get DATABASE_URL
若返回类似postgres://user:password@host:port/dbname的URL,说明环境变量配置正常。
3. 重新推送代码并执行迁移
git add config/database.yml git commit -m "修复生产环境数据库配置,使用Heroku DATABASE_URL" git push heroku main heroku run rails db:migrate
额外说明
- Heroku的Postgres插件会自动管理数据库的用户名、密码、主机等信息,无需手动在
database.yml中配置这些参数。 - 若确实需要多数据库实例,需为每个数据库单独创建Heroku Postgres插件,并获取对应环境变量(如
HEROKU_POSTGRESQL_<COLOR>_URL),再在database.yml中分别引用。
内容的提问来源于stack exchange,提问作者jordy Bolo Caldas
相关产品推荐
相关产品推荐

