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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 10:47:38