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

Rails 7应用Heroku Pipeline测试阶段数据库创建连接失败求助

解决Heroku Pipeline测试环境数据库连接问题

问题根源

你的数据库配置和Heroku CI的运行环境不匹配,核心问题如下:

  1. 测试环境数据库名称格式错误:database: db/test是SQLite的路径写法,但你使用的是PostgreSQL,数据库名不能包含斜杠,这会导致Heroku无法识别有效数据库名。
  2. 硬编码数据库认证信息:username: postgres是本地PostgreSQL的默认配置,但Heroku CI提供的PostgreSQL实例用户名并非postgres,而是通过DATABASE_URL环境变量自动注入。
  3. 未适配Heroku CI的数据库连接方式:测试环境没有使用Heroku提供的DATABASE_URL,而是沿用本地配置,导致无法连接CI环境的临时数据库。

修复步骤

1. 修正config/database.yml配置

替换为适配Heroku CI的配置,让测试环境自动读取Heroku提供的数据库连接信息:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: myapp_development
  username: postgres
  password: <%= ENV['WS_DATABASE_PASSWORD'] %>
  port: 5432

test:
  <<: *default
  url: <%= ENV['DATABASE_URL'] %>

production:
  <<: *default
  url: <%= ENV['DATABASE_URL'] %>
  • 移除了default块中的硬编码username和password,仅在开发环境保留本地配置。
  • 测试和生产环境直接使用DATABASE_URL,该变量由Heroku自动设置,包含所有必要的连接参数(主机、端口、用户名、密码、数据库名)。

2. 更新app.json添加测试初始化脚本

Heroku CI需要明确的命令来初始化测试数据库,修改app.json:

{
  "environments": {
    "test": {
      "addons": [
        "heroku-postgresql:mini",
        "heroku-redis:mini"
      ],
      "scripts": {
        "test-setup": "bin/rails db:create db:schema:load"
      }
    }
  }
}
  • test-setup脚本会在测试运行前执行,确保数据库被创建并加载最新的schema(用db:schema:load比db:migrate更适合测试环境,避免迁移顺序问题)。

3. 提交修改并重新触发测试

将上述修改提交到Git仓库,推送到关联Heroku Pipeline的分支,然后在Pipeline的测试标签页重新运行测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 17:33:36