Rails测试环境SQLite数据库未执行迁移,运行rails test提示找不到stocks表
问题原因
Rails的开发、测试环境数据库相互独立,开发环境执行过迁移不会自动同步到测试环境,导致测试库缺失stocks表。
解决方案
按优先级依次执行以下操作即可解决:
- 手动执行测试环境迁移
直接指定环境运行迁移即可将表结构同步到测试库:rails db:migrate RAILS_ENV=test - 重置测试数据库(推荐)
如果上述操作后仍然报错,直接使用Rails内置的测试库初始化命令,该命令会自动把开发环境最新的数据库schema同步到测试库,避免迁移版本不一致问题:rails db:test:prepare - 清理损坏的测试库文件
要是上面两个操作都无效,大概率是旧的测试库文件损坏,先删除旧文件再重建即可:rm db/test.sqlite3 rails db:test:prepare
注意事项
- 每次新增/修改迁移文件后,都需要同步测试库结构,否则运行测试都会出现表缺失报错
- Rails 5+版本内置了测试运行前自动同步迁移的逻辑,但如果存在文件权限、缓存异常的情况仍然会触发该问题,手动执行上述命令即可修复
内容的提问来源于stack exchange,提问作者Olexiy Kutsenko
相关产品推荐
相关产品推荐

