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

CircleCI运行Ruby on Rails自动化测试提示表不存在如何解决?

问题修复方案

你的报错存在两个核心问题,按以下步骤修改即可解决:

1. 修复数据库名带-1后缀找不到的问题

这个后缀是Rails 6+默认开启的并行测试功能的特性:Rails会为每个并行测试worker自动分配带-数字后缀的独立数据库,你目前的配置只会创建基础的saving_test库,不会自动创建并行测试需要的带后缀库。

对应修改点:

(1)修正database.yml的test配置

你当前的test配置没有继承default块,还存在密码不匹配的问题,修改test块内容:

test:
  <<: *default
  database: saving_test
  password: <%= ENV.fetch("MYSQL_PASSWORD", "") %>

(2)修正CircleCI配置里的MySQL环境变量

CircleCI的MySQL镜像使用官方变量规则,你写的MYSQL_DB无效,改成正确的MYSQL_DATABASE:

- image: circleci/mysql:5.7
  environment:
    - MYSQL_ALLOW_EMPTY_PASSWORD: 'true'
    - MYSQL_DATABASE: saving_test

(3)替换数据库初始化命令

把test job里的Database Setup步骤的命令替换为rails db:test:prepare,这个命令会自动处理并行测试需要的所有数据库创建、schema加载逻辑,无需手动分步执行:

- run:
    name: Database Setup
    command: bundle exec rails db:test:prepare RAILS_ENV=test

如果你不需要并行测试,也可以在test/test_helper.rb中添加配置关闭并行,就不会生成带后缀的数据库:

parallelize(workers: 1)

2. 修复patienecs表不存在的问题

这个是Rails对Patience这个词的复数变形识别错误导致的,两种修复方案二选一:

方案1:手动指定模型表名

在Patience模型中添加表名声明:

class Patience < ApplicationRecord
  self.table_name = "patiences" # 手动指定正确表名
  belongs_to :user
  validates :user_id, presence: true
  validates :memo,length: { maximum: 140 }
end

方案2:添加自定义变形规则

在config/initializers/inflections.rb中添加变形规则,全局生效:

ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.irregular 'patience', 'patiences'
end

修改后先在本地确认测试可以正常运行,再推送到CircleCI执行即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:51:00