Redmine测试库加载失败 提示Role无issues_visibility属性
Redmine测试数据库初始化报错排查
故障场景
执行测试数据库初始化命令时抛出属性不存在错误,执行命令如下:
rake db:drop db:create db:migrate redmine:plugins:migrate redmine:load_default_data RAILS_ENV=test
核心报错信息:
Select language: ar, az, bg, bs, ca, cs, da, de, el, en, en-GB, es, es-PA, et, eu, fa, fi, fr, gl, he, hr, hu, id, it, ja, ko, lt, lv, mk, mn, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sq, sr, sr-YU, sv, th, tr, uk, vi, zh, zh-TW [en] ==================================== Error: unknown attribute 'issues_visibility' for Role.
当前环境版本:
ruby: 3.0.4p208 redmine: 5.0.1.stable rails: 6.1.6
已移除此前安装的2个无数据库迁移逻辑的插件。
故障原因
该报错本质是Role模型加载时,对应数据库表中缺少issues_visibility字段,常见触发场景有三类:
- 多任务堆叠在单条rake命令执行时,Rails提前加载了未完成全部迁移的Role表结构缓存,后续迁移完成后缓存未刷新,导致默认数据加载时识别不到字段
- 数据库迁移未完整执行,添加
issues_visibility字段的核心迁移任务被跳过 - 插件目录残留文件覆写了核心Role模型,或缓存文件未清理导致表结构识别异常
解决步骤
- 第一步:清理全部缓存和残留文件
执行以下命令清空临时缓存、删除旧的schema定义文件,避免旧缓存干扰:
确认bin/rails tmp:cache:clear RAILS_ENV=test rm -rf tmp/cache/* db/schema.rbplugins/目录下无残留插件文件夹,所有自行安装的插件文件已完全删除。 - 第二步:分步骤执行数据库初始化,禁止将所有任务堆叠在单条命令执行
- 重建空测试库:
rake db:drop db:create RAILS_ENV=test - 单独执行核心数据库迁移:
执行完成后检查输出日志,确认包含rake db:migrate RAILS_ENV=test20121026121906 AddIssuesVisibilityToRoles迁移的成功记录;如果该迁移文件缺失,说明Redmine源码不完整,用5.0.1稳定版完整源码覆盖后重新执行。 - 执行插件迁移(空插件目录下该命令无实际改动,仅做流程校验):
rake redmine:plugins:migrate RAILS_ENV=test - 单独加载默认数据,出现语言选择提示时直接回车选择默认
en即可:rake redmine:load_default_data RAILS_ENV=test
- 重建空测试库:
- 第三步:异常校验
如果分步骤执行后仍报错,进入Rails控制台校验字段是否存在:
控制台内执行:rails c RAILS_ENV=test
如果返回Role.column_names.include?('issues_visibility')false,手动执行对应版本的迁移补全字段:
执行完成后重新加载默认数据即可。rake db:migrate:up VERSION=20121026121906 RAILS_ENV=test
内容的提问来源于stack exchange,提问作者Gary Aitken
相关产品推荐
相关产品推荐

